前面兩章記錄如何修改默認的配置和索引調優的策略,本章將介紹mongo自帶的分析工具profiling
准備工作
啟動mongoDB切換至需要的庫
./mongo --username xx --password xx --port xx --authenticationDatabase xxx
> use IDP2
查看當前的profile等級
> db.getProfilingLevel() 0
返回 0 代表當前沒有設置profiling等級。
關於等級官方有解釋,傳送門:https://docs.mongodb.com/manual/reference/method/db.setProfilingLevel/
這里簡單解釋一下一共有 0, 1, 2三個等級,
默認等級是0,代表關閉
等級1,如果設置了時間則會記錄比設置時間慢的請求,無設置則默認慢查詢100ms
等級2,記錄所有的查詢請求
這里查詢過濾100ms以上的請求來觀察
> db.setProfilingLevel(1,100) { "was" : 0, "slowms" : 100, "ok" : 1 }
接下來就可以開始性能請求操作了
操作完成后,我們需要先關閉掉profiling再做操作,避免因為手工操作引起的記錄
> db.setProfilingLevel(0) { "was" : 1, "slowms" : 100, "ok" : 1 }
> db.system.profile.count()
992
可以看到一共記錄了992條數據,再查看詳細的數據都是操作了什么很慢。
> db.system.profile.find({}, {ns:1,op:1,millis:1,query:1}) { "op" : "insert", "ns" : "IDP2.OrganizationUnitOU", "millis" : 165 } { "op" : "insert", "ns" : "IDP2.OrganizationUnitOU", "millis" : 188 } { "op" : "insert", "ns" : "IDP2.OrganizationUnitOU", "millis" : 172 } { "op" : "insert", "ns" : "IDP2.OrganizationUnitOU", "millis" : 190 } { "op" : "insert", "ns" : "IDP2.OrganizationUnitOU", "millis" : 161 } { "op" : "insert", "ns" : "IDP2.OrganizationUnitOU", "millis" : 157 } { "op" : "insert", "ns" : "IDP2.OrganizationUnitOU", "millis" : 160 } { "op" : "insert", "ns" : "IDP2.OrganizationUnitOU", "millis" : 151 } { "op" : "insert", "ns" : "IDP2.OrganizationUnitOU", "millis" : 140 } { "op" : "insert", "ns" : "IDP2.OrganizationUnitOU", "millis" : 132 } { "op" : "insert", "ns" : "IDP2.OrganizationUnitOU", "millis" : 133 } { "op" : "insert", "ns" : "IDP2.OrganizationUnitOU", "millis" : 107 } { "op" : "insert", "ns" : "IDP2.OrganizationUnitOU", "millis" : 119 } { "op" : "insert", "ns" : "IDP2.OrganizationUnitOU", "millis" : 126 } { "op" : "query", "ns" : "IDP2.OrganizationUnit", "query" : { "find" : "OrganizationUnit", "filter" : { "archived" : false, "externalId" : "OU0 992164adf79adf35b7ab795565d736a627b4zz74clb", "enterpriseUuid" : "5beed120546802f0a35fff3998eae8fa8JzyFIiIHxt" }, "ntoreturn" : -1 }, "millis" : 149 } { "op" : "insert", "ns" : "IDP2.OrganizationUnitOU", "millis" : 219 } { "op" : "query", "ns" : "IDP2.OrganizationUnit", "query" : { "find" : "OrganizationUnit", "filter" : { "_id" : "zjs_3_1353", "enterpriseUuid" : "5beed120546802f0a35fff3998eae8fa8JzyFIiIHxt" }, "ntoreturn" : -1 }, "millis" : 145 } { "op" : "query", "ns" : "IDP2.OrganizationUnit", "query" : { "find" : "OrganizationUnit", "filter" : { "archived" : false, "enterpriseUuid" : "5beed120546802f0a35fff3998eae8fa8JzyFIiIHxt", "rootNode" : true }, "ntoreturn" : -1 }, "millis" : 150 } { "op" : "insert", "ns" : "IDP2.SessionEnterpriseUser", "millis" : 103 } { "op" : "query", "ns" : "IDP2.ApplicationInformation", "query" : { "find" : "ApplicationInformation", "filter" : { "archived" : false, "applicationUuid" : "2a4a8b5fd24e77907d0938a5db8d8352NcfqwsKNOoy", "enterpriseId" : "cs5" }, "ntoreturn" : -1 }, "millis" : 171 } Type "it" for more > it { "op" : "insert", "ns" : "IDP2.OrganizationUnitUDGroup", "millis" : 105 } { "op" : "insert", "ns" : "IDP2.AuditLog", "millis" : 130 } { "op" : "insert", "ns" : "IDP2.OrganizationUnit", "millis" : 123 } { "op" : "insert", "ns" : "IDP2.OrganizationUnitOU", "millis" : 115 } { "op" : "insert", "ns" : "IDP2.UDGroup", "millis" : 135 } { "op" : "query", "ns" : "IDP2.PSMemberRole", "query" : { "find" : "PSMemberRole", "filter" : { "memberUuid" : "0ffd3ff5f9ebc6107968ebe5150cffdbxiZj1vfaG1I" } }, "millis" : 115 } { "op" : "insert", "ns" : "IDP2.UDGroup", "millis" : 294 } { "op" : "insert", "ns" : "IDP2.UDGroup", "millis" : 202 } { "op" : "insert", "ns" : "IDP2.UDGroup", "millis" : 159 } { "op" : "insert", "ns" : "IDP2.AuditLog", "millis" : 162 } { "op" : "insert", "ns" : "IDP2.UDGroup", "millis" : 157 } { "op" : "insert", "ns" : "IDP2.UDGroup", "millis" : 141 } { "op" : "insert", "ns" : "IDP2.UDGroup", "millis" : 238 } { "op" : "insert", "ns" : "IDP2.UDGroup", "millis" : 328 } { "op" : "insert", "ns" : "IDP2.UDGroup", "millis" : 131 } { "op" : "insert", "ns" : "IDP2.UDGroup", "millis" : 308 } { "op" : "update", "ns" : "IDP2.OrganizationUnit", "query" : { "_id" : "f90263c56f5257226f0e28e25f5f6198Wb1GsbgeuLe" }, "millis" : 169 } { "op" : "insert", "ns" : "IDP2.UDGroup", "millis" : 218 } { "op" : "query", "ns" : "IDP2.ApplicationInformation", "query" : { "find" : "ApplicationInformation", "filter" : { "applicationUuid" : "2a4a8b5fd24e77907d0938a5db8d8352NcfqwsKNOoy", "enterpriseId" : "cs5" }, "ntoreturn" : -1 }, "millis" : 120 } { "op" : "insert", "ns" : "IDP2.UDGroup", "millis" : 140 } Type "it" for more
可以通過繼續輸入 “it”來查看更多。
{ "op" : "insert", --- 操作是插入
"ns" : "IDP2.UDGroup", ---- 表是UGGroup
"millis" : 140 } ---- 花費時間是140ms
接下來就根據不同的操作查看表是不是建立了合理的索引,如果沒有則對索引進行修改即可。
當我們分析完成以后通過
db.system.profile.drop()
來清空這些捕捉到的數據,清空之前需要先關閉profiling。