未使用のインデックスを特定し、削除前に非表示にする (hideIndex)
MongoDBパフォーマンスコマンド
// Usage counter per index (on this member, since the last restart):
db.musteri.aggregate([{ $indexStats: {} }, { $project: { name: 1, ops: "$accesses.ops", since: "$accesses.since" } }, { $sort: { ops: 1 } }])
// Hide it from the planner before dropping (the index keeps being maintained):
db.musteri.hideIndex("idx_email")
// Revert immediately if problems appear:
db.musteri.unhideIndex("idx_email")
// If the observation period passes without issues:
db.musteri.dropIndex("idx_email")概要
$indexStats は各インデックスが使用された回数を表示する。hideIndex はインデックスを削除せずにクエリプランナーから隠すため、削除した場合の影響を元に戻せる形でテストできる。
使用する場面
書き込みオーバーヘッドとストレージを増やす不要なインデックスを整理する場合。
注意
カウンターはメンバーごとで、再起動でリセットされる。読み取りがセカンダリに向かう場合は、すべてのメンバーを確認し、十分に長い期間 (月末レポートを含む) 観察する。ops が 0 の一意インデックスや TTL インデックスも必要な場合がある: 一意制約と TTL による削除はカウンターに現れない。非表示のインデックスも書き込み時には維持され、非表示の一意インデックスも引き続き制約を強制する。