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 별 데이터. 프로퍼티는 동일. |
'DataBase' 카테고리의 다른 글
[SQLite3] 테이블 존재 여부 체크 (check table exists) (0) | 2013.04.15 |
---|---|
[SQLite3] INSERT/UPDATE 속도 높이기 (increase write speed) (0) | 2013.01.17 |
[MongoDB] setShardVersion failed 에러 발생시 [client version differs from config's for collection] (2) | 2012.10.05 |
[MongoDB] log rotate (0) | 2012.08.30 |
[MongoDB] 배열의 수를 기준으로 질의 (advanced query - $size) (0) | 2012.06.27 |