SQL 語句執行很慢的原因

来源:https://www.cnblogs.com/jjfan0327/archive/2020/04/19/12731636.html
-Advertisement-
Play Games

大多數情況是正常的,只是偶爾會出現很慢的情況 網路問題 資料庫在刷新臟頁 獲取鎖失敗,我們可以用 show processlist這個命令來查看當前的狀態 刷臟頁有下麵4種場景(後兩種不用太關註“性能”問題): redolog寫滿了:redo log 里的容量是有限的,如果資料庫一直很忙,更新又很頻 ...


大多數情況是正常的,只是偶爾會出現很慢的情況

  • 網路問題

  • 資料庫在刷新臟頁

  • 獲取鎖失敗,我們可以用 show processlist這個命令來查看當前的狀態

刷臟頁有下麵4種場景(後兩種不用太關註“性能”問題):

  • redolog寫滿了:redo log 里的容量是有限的,如果資料庫一直很忙,更新又很頻繁,這個時候 redo log 很快就會被寫滿了,這個時候就沒辦法等到空閑的時候再把數據同步到磁碟的,只能暫停其他操作,全身心來把數據同步到磁碟中去的,而這個時候,就會導致我們平時正常的SQL語句突然執行的很慢,alter table 可能造成臟頁過多。所以說,資料庫在在同步數據到磁碟的時候,就有可能導致我們的SQL語句執行的很慢了。

  • 記憶體不夠用了:如果一次查詢較多的數據,恰好碰到所查數據頁不在記憶體中時,需要申請記憶體,而此時恰好記憶體不足的時候就需要淘汰一部分記憶體數據頁,如果是乾凈頁,就直接釋放,如果恰好是臟頁就需要刷臟頁。

  • MySQL 認為系統“空閑”的時候/ Master Thread:這時系統IO壓力不大,每秒或每十秒的非同步刷新操作

  • MySQL 正常關閉的時候:這時候,MySQL 會把記憶體的臟頁都 flush 到磁碟上,這樣下次 MySQL 啟動的時候,就可以直接從磁碟上讀數據,啟動速度會很快。

在數據量不變的情況下,這條SQL語句一直以來都執行的很慢

  • 沒有用上索引:例如該欄位沒有索引;由於對欄位進行運算、函數操作導致無法用索引。
  • 資料庫選錯了索引

有索引但是最終卻選擇全表掃描的原因:

例如以下SQL:

select * from t where 100 < c and c < 100000;

索引的選擇判斷來源於系統的預測,也就是說,如果要走 c 欄位索引的話,系統會預測走 c 欄位索引大概需要掃描多少行。如果預測到要掃描的行數很多(大概接近於20%),它可能就不走索引而直接掃描全表了。因為索引c將標識多一次的輔助索引的查詢,造成IO的增多。

系統判斷是否走索引,掃描行數的預測其實只是原因之一,這條查詢語句是否需要使用使用臨時表、是否需要排序等也是會影響系統的選擇的。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文記一些比較零碎的系統操作,如將程式放入後臺,查看進程和記憶體等信息,查看系統Linux內核和版本等信息,以及如何制定系統定時任務等。 將程式放入後臺在Windows程式中其實最小化之後就是放入後臺運行了,在Linux系統中有兩種方式將程式放入後臺。方式一:在命令的最後加一個&符即可將命令的運行放入 ...
  • Windows中可以通過任務管理器來查看對應的進程信息以及系統資源等信息,Linux中則通常使用“ps aux”來查看這些信息。 查看所有進程和系統資源ps aux或ps -le:查看所有進程即系統資源的使用,前者使用的是BSD操作系統格式,即Unix系統格式,a表示前臺進程,u表示創建該進程的用戶 ...
  • Linux中對於許可權的管理是非常嚴格的,不同的用戶可以擁有不同的操作許可權,其中超級管理員root是最大的,幾乎擁有所有的許可權,如果你是root用戶,即使你想把系統給刪了也是允許的,所以經常有“rm -rf /*”的玩笑或段子,但也確實需要小心,使用rm -rf命令的時候不要刪錯東西了。常用的許可權操作 ...
  • Linux運維工程師的首要職責就是保證業務7 x 24小時穩定的運行,監控Web伺服器對於查看網站上發生的情況至關重要。關註最多的便是日誌變動,查看實時日誌文件變動大家第一反應應該是'tail -f /path/to/log'命令吧,但是如果每個網站的訪問日誌都是使用這種方式查看也是相當崩潰的,今天 ...
  • 深度操作系統(DEEPIN)是武漢深之度科技有限公司致力於為全球用戶提供美觀易用、安全可靠的Linux發行版。經過一段時間的測試,這款操作系統的Beta版終於今天和大家見面了。這次Deepin v20操作系統帶來了全新的Deepin桌面和全家桶軟體,基於Linux 5.3內核,並宣佈將永久免費使用。 ...
  • 本文講述一些有利於提高xenomai 實時性配置建議,其中,一些是通用的,一些是針對某個架構的,最後是xenomai實時性測試數據,希望對你有用。 一、影響因素 硬實時操作系統應具備的最重要特性之一是可預測性,系統應該保證滿足所有關鍵時序約束。然而,這取決於一系列因素,這些因素涉及硬體的架構特征、內 ...
  • 這裡分享嵌入式領域有用有趣的項目/工具以及一些熱點新聞,農曆年分二十四節氣,希望在每個交節之日準時發佈一期。 ...
  • 在【甜甜老師的DB Fun圈】第二講的分享中,我們對GaussDB 100 OLTP 單機在RHEL7.6上的安裝有了全面的認識,那麼本期我們繼續分享【甜甜老師的DB Fun圈】第三講——GaussDB T 單機手工建庫。 你需要知道的 好了,我們今天的課就先講到這。同學們可以自己實操下,增強動手能 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...