mysql 执行计划不对_关于mysql主从查询执行计划不一致问题的分析
最近面試過程中被面試官拋了一個問題,說曾經有一個線上出現的奇怪的問題,主庫和從庫各種配置是一致的,當數據量比較大的時候,某些時候同樣的查詢,在從庫里的執行計劃執行成功了,而主庫里沒有執行這個執行計劃,問我這是為什么?
當時我的回答是主庫偏重于寫數據,從庫偏重于讀數據,既然mysql的查詢語句執行計劃是有可能改變的說明mysql的語句執行計劃是可能隨著數據的變化而發生調整的,如果分析是認為原定執行計劃沒有成功執行,那么我們可以對執行計劃進行控制,也許自己可以進行配置。答案明顯是錯的,我只是根據自己對問題的理解進行了想法的闡述。
那么真正的情況如何呢?其實答案就是隱藏在那些理所當然的思路的背后。眾所周知,mysql的索引不能建的太多,因為mysql在數據增刪比較頻繁的情況下需要花費大量資源進行重建索引。而mysql有協調機制,如果一段時間內數據量變化較大,會將調整索引的計劃推遲,直至判斷數據變化不大的時候才會去重建索引。所以這就造成了,mysql在評判不同的執行計劃的時候,如果突然新增的數據量很大,不走索引反而比走索引所花費的時間更短,就相應的將執行計劃調整為不走索引。
因此,在數據量變化較大的時候進行主庫查詢,其實可以對應先判斷一下不同執行策略所耗費的時間,如果走索引耗費的時間更長,說明索引沒有重建完成,可以進行手動重建索引,然后再進行判斷執行計劃之間的時間差異。之后mysql的執行計劃選擇器自然會判斷出正確的執行計劃。
總結
以上是生活随笔為你收集整理的mysql 执行计划不对_关于mysql主从查询执行计划不一致问题的分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 开启profiles_MyS
- 下一篇: appfog mysql_appfog