全部產品
Search
文件中心

ApsaraDB RDS:會話管理

更新時間:Jul 27, 2024

當資料庫出現效能問題或異常操作時,通常需要結合資料庫的會話資訊,快速定位和解決資料庫的問題。資料庫自治服務DAS(Database Autonomy Service)的執行個體會話功能,支援即時查看目標執行個體的活躍會話、異常會話、會話訪問來源和SQL語句等資訊,並提供結束會話、SQL限流、SQL診斷最佳化等營運操作。

前提條件

執行個體為如下版本:

  • RDS MySQL 8.0 高可用系列、三節點企業系列或叢集系列

  • RDS MySQL 5.7 高可用系列、三節點企業系列或叢集系列

  • RDS MySQL 5.6 高可用系列

  • RDS MySQL 5.5 高可用系列

操作步驟

  1. 訪問RDS執行個體列表,在上方選擇地區,然後單擊目標執行個體ID。
  2. 在左側導覽列中,選擇自治服務(原CloudDBA) > 一鍵診斷

  3. 單擊會話管理頁簽。

  4. 會話管理頁面,可以查看目標執行個體當前的執行個體會話會話統計等詳細資料。

    • 您可以在執行個體會話地區進行如下操作:

      • 查看執行個體會話資訊:可以查看異常、活躍會話、最大執行時間、CPU使用率和串連使用率等資訊。

      • 10秒SQL分析:單擊頁面右上方的10秒SQL分析,在彈出的對話方塊內查看10秒內的SQL統計、慢日誌及SQL概覽等資訊,詳細資料請參見10秒SQL分析

      • SQL限流:單擊SQL限流,在彈出的SQL限流頁面配置限流參數,對符合限流條件的執行個體會話進行SQL限流,詳細操作請參見SQL限流

      • 最佳化:單擊最佳化,在彈出的SQL診斷最佳化對話方塊中,查看SQL診斷結果。

        若您採納診斷建議,單擊頁面右上方的複製,並將最佳化後的SQL粘貼到資料庫用戶端或DMS上執行,若不採納診斷建議,可直接單擊取消結束診斷。

        說明

        DAS會根據SQL的複雜程度、對應表的資料量、資料庫負載等進行SQL診斷,診斷建議的返回時間可能會超過20秒。完成診斷後,SQL診斷引擎會給出診斷結果、最佳化建議和預期最佳化收益,您可以根據診斷結果確認是否採納建議。

      • 匯出活躍會話。

      • 結束會話。

        結束會話時,需要輸入建立該會話的資料庫帳號和密碼。您也可以使用更高許可權的資料庫帳號(具有結束其他帳號建立的會話的許可權),例如高許可權帳號

        說明
        • 在會話列表的使用者列,可以查看建立目標會話的資料庫帳號。

        • 單擊結束會話記錄,查看結束會話的記錄。

    • 您可以在會話統計地區進行如下操作:

      • 查看會話統計資訊:可以查看會話概要(如會話總數、運行中會話總數和運行中會話最長時間),查看按使用者、按訪問來源和按資料庫等條件統計的會話總數及活躍數。

      • 匯出會話統計資訊:可以按概要、按使用者統計、按訪問來源統計和按資料庫統計等條件匯出會話統計資訊。

    • 您可以單擊開啟自動限流按鈕,開啟自動SQL限流功能。當資料庫執行個體滿足設定的限流條件時會自動觸發SQL限流,協助您自動控制資料庫請求訪問量和SQL並發量,保障服務的可用性,詳情請參見自動SQL限流

常見問題

Q:為什麼會出現%訪問來源

A:該情況可能在您使用預存程序時出現。按如下樣本可以複現這種情況:

說明

樣本中資料庫執行個體為RDS MySQL,測試帳號為test_user,測試資料庫為testdb。

  1. 在RDS控制台建立普通許可權帳號及其授權的資料庫,詳細操作請參見建立資料庫和帳號

  2. 使用測試帳號通過命令列方式串連資料庫執行個體,詳細操作請參見通過用戶端、命令列串連RDS MySQL執行個體

  3. 切換到測試資料庫,並建立如下預存程序。

    -- 切換到測試資料庫
    USE testdb;
    
    -- 建立預存程序
    DELIMITER $$
    DROP PROCEDURE IF EXISTS `das` $$
    CREATE DEFINER=`test_user`@`%` PROCEDURE `das`()
    BEGIN
    SELECT * FROM information_schema.processlist WHERE Id = CONNECTION_ID();
    END $$
    DELIMITER;
  4. 使用高許可權帳號串連資料庫執行個體,詳細操作請參見通過用戶端、命令列串連RDS MySQL執行個體

  5. 調用預存程序。

    -- 切換到測試資料庫
    USE testdb;
    
    -- 調用預存程序
    CALL das();
    
    +--------+-----------+--------+--------+---------+------+-----------+-------------------------------------------------------------------------+
    | ID     | USER      | HOST   | DB     | COMMAND | TIME | STATE     | INFO                                                                    |
    +--------+-----------+--------+--------+---------+------+-----------+-------------------------------------------------------------------------+
    | 487818 | test_user | %:2065 | testdb | Query   |    0 | executing | SELECT * FROM information_schema.processlist WHERE Id = CONNECTION_ID() |
    +--------+-----------+--------+--------+---------+------+-----------+-------------------------------------------------------------------------+

Q:哪些會話會被標記為異常

A:如下的會話會被標記為異常:

  • 會話包含阻塞型SQL(執行時間超過30秒的SQL),例如報“Waiting for table metadata lock”錯誤的會話。阻塞型SQL會長時間佔用資源,從而導致其他SQL無法正常執行。常見的阻塞型SQL包括DDL和FLUSH TABLES WITH READ LOCK等。

  • 會話中的事務期間超過30s。

  • 會話中包含長時間未提交的事務。如果一個會話中開啟了事務,但是超過10秒未執行任何新的SQL,很可能是代碼中遺漏了COMMIT命令,這可能導致事務一直持有資源,無法及時釋放資源。

相關文檔

您可以啟用DAS的自治功能,對執行個體會話中的SQL進行自動診斷治理。