Database/MongoDB 실습

[MongoDB] OpLog 로 현재실행중인 쿼리 상태조회

꽁담 2024. 8. 21. 18:21

1. MongoDB OpLog

OpLog 를 통해 현재 실행중인 쿼리의 클라이언트 정보, 락의 유형 등을 확인할 수 있다.

 

2. MongoDB 테스트 버전

유형 버전 구성
mongosh 2.2.10  
mongodb 7.0.12 Config : 1개, 포트 20000
Route : 1개, 포트 20001
Shard1 : 1개, 포트 30001
Shard2 : 1개, 포트 40001

 

 

3. OpLog 확인

3-1. Session 1 에서 인덱스 생성

[direct: mongos] indexDB> db.uniqueIndex.createIndex( { dummy : 1 } )
dummy_1

 

3-2. Session 2 에서 OpLog 조회

위의 인덱스가 수행되는 동안 OpLog 를 조회하면 아래와 같은 정보가 출력된다.

[direct: mongos] test> db.currentOp()
{
      shard: 'rs1',
      type: 'op',
      host: 'ip-172-31-7-169.ap-northeast-2.compute.internal:30001',
      desc: 'IndexBuildsCoordinatorMongod-7',
      active: true,
      currentOpTime: '2024-08-21T09:11:39.672+00:00',
      opid: 'rs1:29291449',
      secs_running: Long('0'),
      microsecs_running: Long('133039'),
      op: 'command',
      ns: 'indexDB.uniqueIndex',
      redacted: false,
      command: {
        createIndexes: 'uniqueIndex',
        indexes: [ { v: 2, key: { dummy: 1 }, name: 'dummy_1' } ],
        readConcern: { level: 'local', provenance: 'implicitDefault' },
        writeConcern: { w: 'majority', wtimeout: 0, provenance: 'implicitDefault' },
        shardVersion: {
          e: ObjectId('000000000000000000000000'),
          t: Timestamp({ t: 0, i: 0 }),
          v: Timestamp({ t: 0, i: 0 })
        },
        databaseVersion: {
          uuid: UUID('4bdeceab-3d12-4c6d-b79e-94f8a094e3f0'),
          timestamp: Timestamp({ t: 1722313944, i: 1 }),
          lastMod: 1
        },
        lsid: {
          id: UUID('de0d01b9-df88-488a-9d82-417268031a5d'),
          uid: Binary.createFromBase64('47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=', 0)
        },
        '$clusterTime': {
          clusterTime: Timestamp({ t: 1724231498, i: 2 }),
          signature: {
            hash: Binary.createFromBase64('AAAAAAAAAAAAAAAAAAAAAAAAAAA=', 0),
            keyId: Long('0')
          }
        },
        '$configTime': Timestamp({ t: 1724231498, i: 2 }),
        '$topologyTime': Timestamp({ t: 1719896932, i: 2 }),
        '$client': {
          application: { name: 'mongosh 2.2.10' },
          driver: { name: 'nodejs|mongosh', version: '6.7.0|2.2.10' },
          platform: 'Node.js v20.12.2, LE',
          os: {
            name: 'linux',
            architecture: 'x64',
            version: '3.10.0-327.22.2.el7.x86_64',
            type: 'Linux'
          },
          mongos: {
            host: 'ip-172-31-7-169.ap-northeast-2.compute.internal:20001',
            client: '127.0.0.1:48032',
            version: '7.0.12'
          }
        },
        mayBypassWriteBlocking: false,
        '$db': 'indexDB'
      },
      queryFramework: 'classic',
      msg: 'Index Build: draining writes received during build',
      numYields: 0,
      locks: {},
      waitingForLock: false,
      lockStats: {
        FeatureCompatibilityVersion: { acquireCount: { r: Long('3'), w: Long('6') } },
        ReplicationStateTransition: { acquireCount: { w: Long('9') } },
        Global: { acquireCount: { r: Long('3'), w: Long('6') } },
        Database: { acquireCount: { r: Long('2'), w: Long('6') } },
        Collection: {
          acquireCount: { r: Long('1'), w: Long('4'), R: Long('1'), W: Long('2') }
        },
        Mutex: { acquireCount: { r: Long('15') } }
      },
      waitingForFlowControl: false,
      flowControlStats: { acquireCount: Long('4') }
    },

 

numYields : Yield 가 발생한 횟수

locks : 잠금유형

lockStats : r, w, R, W 잠금이 얼마나 획득되었는지