2016-02-15 17 views
1

面對蒙戈服務器性能下降的,所以爲了調試它,我們試圖有什麼像「maxQueryTime」?如果是的話,我該如何設置mongo maxQueryTime?

db.currentOp({ "active" : true, "secs_running" : { "$gt" : 1 }}) 

檢查當前的操作以1秒以上,並發現有運行超過500超過200個查詢秒。到目前爲止,我們無法控制查詢的來源。所以我們所做的就是使用這些操作。

db.killOp() 

現在有沒有辦法讓所有這些查詢自動執行超過x秒,一旦它們執行了x秒的響應?

注意: - 無法編輯查詢,希望它在mongod配置文件中。

+0

https://docs.mongodb.org/v3.0/reference/method/cursor.maxTimeMS/ –

+0

花花公子,已經通過它,發佈這個問題之前,這是基於遊標,意味着我必須手動添加這與每個查詢,我希望它在配置,與maxConnectionLimit,和其他配置變量。 – Nishant

+0

看起來不像這樣:https://jira.mongodb.org/browse/SERVER-8499 – JohnnyHK

回答

0

您可以在mongod級別設置https://docs.mongodb.org/v3.0/reference/parameters/#param.cursorTimeoutMillis,以便它適用於所有查詢。默認值是10分鐘(!)。

與此同時,您可以運行腳本來自動終止查詢。

格式化爲可讀性:

while(true) { 
    var data = db.currentOp({ "active" : true, "secs_running" : { "$gt" : 1 }})["inprog"]; 

    for(var i = 0; i < data.length; i ++) { 
    var operation = data[i]; 
    print("Killing " + operation.opid); db.killOp(operation.opid); 
    } 

    sleep(500); 
} 

格式化的外殼:

while(true) { var data = db.currentOp({ "active" : true, "secs_running" : { "$gt" : 1 }})["inprog"]; for(var i = 0; i < data.length; i ++) { var operation = data[i]; print("Killing " + operation.opid); db.killOp(operation.opid); } sleep(500); } 
+0

非常感謝您的幫助,這就是我一直在尋找的。 – Nishant

相關問題