MongoDB shell 에서는 커맨드를 통해 DB나 collection의 상태확인을 할 수 있다.


db.stats(); // DB 상태확인

db.col.stats() // collection 상태확인



근데 이걸 PHP 드라이버를 통해서 해보려고 하니 함수가 없는 것이다.


좀 찾아보니까 벌써 어떤 사람이 해달라고 요구했었는데,

초도로우님께서 그건 PEAR의 MongoDB-Admin 패키지에서 할 일이지 드라이버가 할 일이 아니라고 못 박으셨다.


링크 : https://jira.mongodb.org/browse/PHP-161


위 링크의 마지막 댓글에 드라이버 레벨의 함수가 아니라 command() 를 통해서 해결하는 법이 적혀 있어서 나도 그냥 그걸로 한다.


아래는 링크 클릭하기 귀찮은 사람을 위한 소스 예제.


// MongoDB의 모든 db, collections의 stats 정보 나열

$m = new Mongo('mongodb://ID:PW@HOST:PORT');


$r = $m->listDBs();

foreach ($r['databases'] as $v) {

    // system db 걸러내기

    if (in_array($v['name'], array('admin', 'config'))) continue;


    $DB[] = $v['name'];

}


$allStats = array();

foreach ($DB as $dbName) {

    $db = $m->selectDB($dbName);


    // db.stats()

    $allStats[$dbName]['dbStats'] = $db->command(array('dbStats'=>1));


    // collection.stats()

    $collections = $db->listCollections();

    foreach ($collections as $collection) {

        $colName = $collection->getName();

        $allStats[$dbName]['colStats'][$colName] = $db->command(array('colStats'=>$colName));

    }

}

// 여기까지 하면 $allStats 에 모든 db, collections의 stats 정보가 들어있음.





stats 의 프로퍼티는 다음과 같다.


참조1. DB.stats => http://docs.mongodb.org/manual/reference/database-statistics

참조2. col.stats => http://docs.mongodb.org/manual/reference/collection-statistics



DB.stats

 db   데이터베이스 이름 
 collections  데이터베이스에 있는 컬렉션 수 
 objects  데이터베이스에 있는 모든 오브젝트 수 

 avgObjSize

 데이터베이스에 있는 오브젝트 평균 사이즈 
 dataSize

 데이터베이스의 데이터 사이즈 (padding factor 포함) 

 storageSize

 데이터베이스의 document에 할당된 전체공간 사이즈 

 numExtents  데이터베이스에 있는 모든 extent의 수 
 indexes  데이터베이스에 있는 모든 index의 수 
 indexSize

 데이터베이스에 있는 index 전체 사이즈 

 fileSize

 데이터베이스에 할당된 파일 전체 사이즈 (preallocated, padding factor 포함) 

 nsSizeMB

 데이터베이스의 네임스페이스 전체 사이즈 

 raw

 각 shard 별 데이터. 프로퍼티는 동일. 




col.stats

 ns

 컬렉션의 네임스페이스. (DB명.컬렉션명) 
 sharded

 컬렉션의 sharding 여부. 

 count

 컬렉션의 오브젝트 혹은 도큐먼트 수 

 size

 컬렉션의 데이터 사이즈. index는 포함하지 않음 

 avgObjSize

 컬렉션에 있는 오브젝트의 평균 사이즈 

 storageSize

 컬렉션에 할당된 전체공간 사이즈.  

 numExtents

 할당된 데이터 파일 영역 수 

 nindexes

 컬렉션에 걸려 있는 모든 index 수. 모든 컬렉션은 최소한 1개 이상의 index가 있음. (_id 는 무조건 인덱스가 걸리므로)

 nchunks 컬렉션에 할당된 chunks 수 
 lastExtentSize

 할당된 마지막 extent 사이즈 

 paddingFactor

 각 document가 insert될 때 마지막에 추가되는 공간 사이즈. document의 크기에 따라 디스크 내에서 document를 최대한 적게 옮기도록 여분의 공간이 따라 붙는다. paddingFactor는 mongod 가 자동으로 계산한다. 

 totalIndexSize

 index 전체 사이즈. 
 indexSizes

 컬렉션에 걸려 있는 각 index의 key와 사이즈를 출력 

 shards

 각 shard 별 데이터. 프로퍼티는 동일.














Posted by bloodguy
,