全部產品
Search
文件中心

ApsaraDB RDS:RDS MySQL慢SQL問題

更新時間:Jun 19, 2024

在相同業務情境下,架構設計和庫表索引設計會影響查詢效能,良好的設計可以提高查詢效能,反之會出現很多慢SQL(執行時間很長的SQL語句)。本文介紹導致慢SQL的原因和解決方案。

SQL異常

  • 原因及現象

    SQL異常的原因很多,例如庫表結構設計不合理、索引缺失、掃描行數太多等。

    您可以在控制台的SQL洞察頁面,查看慢SQL的執行耗時、執行次數等資訊。

  • 解決方案

    根據實際業務情況最佳化SQL。具體操作,請參見SQL最佳化

執行個體瓶頸

  • 原因及現象

    執行個體到達瓶頸的原因一般有如下幾種:

    • 業務量持續增長而沒有擴容。
    • 硬體老化,效能有損耗。
    • 資料量一直增加,資料結構也有變化,導致原來不慢的SQL變成慢SQL。

    您可以在控制台的監控與警示頁面,單擊標準監控頁簽,在資源監控內可以查看執行個體的資源使用方式。如果資源使用率各項指標都接近100%,可能是執行個體到達了瓶頸。

  • 解決方案

    判斷執行個體是否到達瓶頸,較好的方法是先測試出執行個體的效能基準值,例如用SysBench進行基準測試,複雜情境下的QPS和TPS很少會超過基準值。

    確認執行個體到達瓶頸後,建議升級執行個體規格。具體操作,請參見變更配置

版本升級

  • 原因及現象

    執行個體升級版本可能會導致SQL執行計畫發生改變,執行計畫中連線類型從好到壞的順序是system>const>eq_ref>ref>fulltext>ref_or_null>index_merge>unique_subquery>index_subquery>range>index>all。更多資訊,請參見MySQL官方文檔

    range和index連線類型時,如果SQL請求變慢,業務又不斷重發請求,導致並行SQL查詢比較多,會導致應用線程釋放變慢,最終串連池耗盡,影響整個業務。

    您可以在控制台的監控與警示頁面,單擊標準監控頁簽,在資源監控內可以查看執行個體的串連數情況。

  • 解決方案

    根據執行計畫分析索引使用方式、掃描的行數等,預估查詢效率,重構SQL語句、調整索引,提升查詢效率。具體操作,請參見SQL最佳化

參數設定不當

  • 原因及現象

    參數innodb_buffer_pool_instancesjoin_buffer_size等設定不當會導致效能變慢。

    您可以在控制台的參數設定頁面,單擊修改歷史頁簽,查看執行個體的參數修改情況。

    修改歷史
  • 解決方案

    調整相關參數,使其適合業務情境。

緩衝失效

  • 原因及現象

    緩衝可以很好地承擔大量查詢,但是並不能保證快取命中率100%,如果緩衝失效,也會有大量的查詢路由到資料庫端,導致效能下降。

    您可以在控制台的監控與警示頁面,單擊標準監控頁簽,在引擎監控內可以查看執行個體的快取命中率、QPS、TPS等。

  • 解決方案

    可以使用Thread PoolFast Query Cache自動SQL限流等功能提高效能。

大量操作

  • 原因及現象

    如果有大批量的資料匯入、刪除、查詢操作,會導致SQL執行變慢。

    可以從磁碟空間、SQL洞察或者慢查詢裡找到對應語句。例如查看Binlog大小,正常情況單個Binlog大小是500 MB,如果有超過500 MB的,可以查看是否有異常。

    您也可以在控制台的監控與警示頁面,單擊標準監控頁簽,在資源監控引擎監控內可以查看執行個體的磁碟空間、IOPS、事務等情況。

    Binlog
  • 解決方案

    在業務低峰期執行大大量操作,或將大大量操作拆分後分批執行。

未關閉事務

  • 原因及現象

    如果某個任務突然變慢,查看CPU和IOPS的使用率並不高,而且活躍會話持續增多,通常是因為存在未關閉的事務。

  • 解決方案

    檢查導致事務衝突的鎖並中止對應的SQL語句。

定時任務

  • 原因及現象
    如果執行個體負載隨時間有規律性變化,可能是存在定時任務。
    說明 您可以在監控與警示頁面的標準監控頁簽查看相關監控資訊。
  • 解決方案

    調整定時任務的執行時間,建議在業務低峰期執行。

總結

RDS上定位慢SQL的主要方法如下:

結合RDS提供的這些功能,可以有效協助您快速定位甚至自動解決慢SQL問題。