Mongodb

db.collection.validate() 的案例 - 通過掃描集合的數據和索引來檢查命名空間中的結構是否正確

  • December 4, 2016

我在 MongoDB 郵件列表中找到了一個案例db.collection.validate()

count() 命令通常是基於儲存引擎提供的統計資訊對目前文件計數的估計。

在使用 WiredTiger 儲存引擎非正常關閉 mongod 後,count 報告的計數統計資訊可能不准確。如果確實發生這種情況,您可以在每個集合上執行 validate() 以恢復正確的統計資訊。

還有其他案例嗎?也許是正常的 DBA 工作任務?我們經常有不干淨的停機。

validate 命令通過掃描集合的數據和索引來檢查命名空間中的結構是否正確。該命令返回有關集合的磁碟表示的資訊。

validate 命令可能很慢,尤其是在較大的數據集上。

對於健康的 MongoDB 部署,沒有規定需要db.collection.validate(true)定期執行。true使用or參數進行驗證{full:true}可能會佔用大量資源,因為它會遍歷集合的數據和索引結構。

validate(full)命令通常僅在疑似本地數據損壞的情況下用作診斷輔助,或(特別是對於 WiredTiger)在不正常關機後正確收集計數。在 MongoDB 3.4 中,validate()它是一個只讀命令,但validate(true)如果您使用的是 WiredTiger 儲存引擎,它將檢查和調整集合計數。

驗證通常只暴露資料結構中的明顯問題,並不能檢測所有可能的數據損壞形式。如果您的副本集成員之一遇到導致明顯斷言的數據問題並且您想要驗證其他輔助節點是否看起來健康,則成功驗證可用作完整性檢查。如果對副本集成員的完全驗證不成功,一般的補救措施是重新同步該成員而不是嘗試修復(這可能導致數據與其他副本集成員的分歧)。

我們經常有不干淨的停機。

如果您經常出現不干淨的關機並且正在使用 WiredTiger,那麼validate在重新啟動後執行以驗證收集計數肯定是明智的,因為這些可能不准確。理想情況下,最好調查並解決導致您頻繁不正常關機的問題或做法。

引用自:https://dba.stackexchange.com/questions/151215