MongoDB †
MongoDBは、オープンソースソフトウェアのドキュメント指向データベースである。C++言語で記述されており、開発とサポートはMongoDB Inc.によって行なわれている。
- 各OS向けにバイナリが配布されている。RHEL/CentOS 6/7向けあり
パフォーマンスチューニング †
現在のパラメータ取得 †
メモリ使用量の上限を設定 †
エンジンによって設定が異なる。出来ない事もあるようだ。
現在のメモリ使用量:
mongo --quiet --eval "printjson(db.serverStatus().mem)"
wiredTiger
PERCONA rocksdb:
データサイズ削減 †
mongodbからコレクションを消しても、OSから見た空きディスク容量は増えない。
古いバージョンのダウンロード †
db.serverStatus(): 現在の設定を確認 †
# memだけ
mongo --quiet --eval 'printjson(db.serverStatus().mem)'
# connectionsだけ
mongo --quiet --eval "printjson(db.serverStatus().connections)"
バックアップ&リストア †
Capped Collections: コレクションの上限サイズを指定する †
- createCollection: 新規collection作成時に上限を設定する。
- convertToCapped: 既存collectionをcappedへ変更
- convertToCapped — MongoDB Manual
- 作業中はロックされる。大きいcollectionはロック時間が長くなるため注意。
- cappedが未設定のコレクションを探す
mongo --quiet --eval 'db.getCollectionNames().forEach(function(n){print(n + "," + db[n].stats().capped)})' sample | grep -v -E '^system|,true$' > ./mongo.capped.txt
- MB単位でコレクションサイズを表示
for app_id in $(cut -d, -f 1 mongo.capped.txt); do \
echo -n "$app_id," >> ./mongo.size.txt; \
mongo --quiet --eval "printjson(db.${app_id}.stats(1024*1024).size)" sample >> ./mongo.size.txt; \
done
grep -v ',0$' mongo.size.txt
- 「test01」collectionの上限サイズを「8MB」に設定
mongo --quiet --eval 'printjson(db.runCommand({ convertToCapped: "test01", size: 8*1024*1024}))' sample
- 複数のコレクションを対象とする場合
for app_id in $(cut -d, -f 1 mongo.capped.txt); do \
echo -n "$app_id,"; \
mongo --quiet --eval "printjson(db.runCommand({ convertToCapped: '${app_id}', size: 8*1024*1024}))" sample
done
mongodサービス起動時のtimeoutを延長する †
データが多くなってくるとでデフォルトの90秒では起動しない事がある。
- TimeoutStartSec="3m" のようにダブルクオーテーションで括ると認識せず、デフォルトの値に戻ってしまう。特にエラーもでない
レプリケーション †
mongoコマンド †
- printjsononeline(): スペースを含まないjsonで表示。
- collection一覧
show collections
Max open files/Max processesの設定 †
- initd (RHEL/CentOS 6), systemd(RHEL/CentOS 7)で設定箇所が異なるので注意
TLS/SSL接続 †