當資料庫出現效能問題或異常操作時,通常需要結合資料庫的會話資訊,快速定位和解決資料庫的問題。資料庫自治服務DAS(Database Autonomy Service)的執行個體會話功能,支援即時查看目標執行個體的會話資訊,並提供會話營運操作,例如結束會話、10秒SQL分析、SQL限流以及最佳化等。
前提條件
目標資料庫執行個體已接入DAS,並且接入狀態顯示為接入正常。
說明 當前不支援RDS SQL Server資料庫執行個體。
操作步驟
本文以RDS MySQL為例介紹如何使用執行個體會話功能。
登入DAS控制台。
在左側導覽列中,單擊執行個體監控。
找到目標執行個體,單擊執行個體ID,進入目標執行個體詳情頁。
在左側導覽列,單擊執行個體會話。
在會話管理頁面,可以查看目標執行個體當前的執行個體會話和會話統計等詳細資料。
您可以在執行個體會話地區進行如下操作:
查看執行個體會話資訊:可以查看異常、活躍會話、最大執行時間、CPU使用率和串連使用率等資訊。
10秒SQL分析:單擊頁面右上方的10秒SQL分析,在彈出的對話方塊內查看10秒內的SQL統計、慢日誌及SQL概覽等資訊,詳細資料請參見10秒SQL分析。
SQL限流:單擊SQL限流,在彈出的SQL限流頁面配置限流參數,對符合限流條件的執行個體會話進行SQL限流,詳細操作請參見SQL限流。
最佳化:單擊最佳化,對目標執行個體會話進行最佳化,詳細操作請參見SQL最佳化。
匯出活躍會話。
結束會話。
結束會話時,需要輸入建立該會話的資料庫帳號和密碼。您也可以使用更高許可權的資料庫帳號(具有結束其他帳號建立的會話的許可權),例如高許可權帳號。
您可以在會話統計地區進行如下操作:
常見問題
Q:為什麼會出現%的訪問來源?
A:該情況可能在您使用預存程序時出現。按如下樣本可以複現這種情況:
說明 樣本中資料庫執行個體為RDS MySQL,測試帳號為test_user,測試資料庫為testdb。
在RDS控制台建立普通許可權帳號及其授權的資料庫,詳細操作請參見建立資料庫和帳號。
使用測試帳號通過命令列方式串連資料庫執行個體,詳細操作請參見通過用戶端、命令列串連RDS MySQL執行個體。
切換到測試資料庫,並建立如下預存程序。
-- 切換到測試資料庫
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;
使用高許可權帳號串連資料庫執行個體,詳細操作請參見通過用戶端、命令列串連RDS MySQL執行個體。
調用預存程序。
-- 切換到測試資料庫
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:對於RDS MySQL和PolarDB MySQL版執行個體,哪些會話會被標記為異常?
A:如下的會話會被標記為異常:
會話包含阻塞型SQL(執行時間超過30秒的SQL),例如報“Waiting for table metadata lock”的會話。阻塞型SQL會長時間佔用資源,從而導致其他SQL無法正常執行。常見的阻塞型SQL,如:FLUSH TABLES WITH READ LOCK,懸掛事務導致DDL語句等待中繼資料鎖等。
會話中的事務期間超過30s。
會話中包含長時間未提交的事務。如果一個會話中開啟了事務,但是超過10秒未執行任何新的SQL,很可能是代碼中遺漏了COMMIT命令,這可能導致事務一直持有資源,無法及時釋放資源。