DAS經濟版在基礎版功能的基礎上,增強了會話管理、鎖分析和性能洞察等功能,并新增了空間碎片自動回收,使數據庫運維更加高效便捷,幫助您7*24小時高效管理數據庫,避免業務受阻的風險,有效保障線上業務的穩定性。本文介紹如何通過DAS經濟版對RDS MySQL進行鎖分析。
前提條件
已創建RDS MySQL實例。詳情請參見快速使用RDS MySQL高可用版實例。
DAS經濟版當前僅支持華東2(上海)地域,請在華東2(上海)地域創建RDS MySQL實例。
開通DAS經濟版
登錄DAS控制臺。
在左側導航欄中,單擊實例監控。
找到目標實例,單擊實例ID,進入目標實例詳情頁。
單擊頁面右上角的開啟經濟版,依照界面提示購買并開通DAS經濟版。
如果華東2(上海)地域的RDS MySQL實例無法開通DAS經濟版,或者開通DAS經濟版失敗,請單擊頁面右下角的反饋按鈕,提交
經濟版+阿里云賬號ID
進行反饋。說明您可以單擊頁面右上角的頭像,獲取阿里云賬號ID。
使用DAS經濟版進行鎖分析
步驟一:構造數據
在目標RDS MySQL實例中創建名為das_test的測試數據庫。詳情請參見創建數據庫。
通過數據管理DMS(Data Management)登錄RDS MySQL數據庫,詳情請參見通過DMS登錄RDS數據庫。
在DMS的SQL窗口(SQL Console)執行如下命令,在數據庫das_test中創建測試表students。
CREATE TABLE `students` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', `sid` char(64) NOT NULL COMMENT 'student id', `name` varchar(64) NOT NULL COMMENT 'name', `birth_date` date NOT NULL COMMENT 'birth date', `gender` char(16) NOT NULL COMMENT 'sex', `extra_info` varchar(1024) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `uk_sid` (`sid`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
重復執行如下命令10次,在測試表students中寫入測試數據。
INSERT INTO students(sid, name, birth_date, gender, extra_info) VALUES(UUID(), SUBSTRING(UUID(), FLOOR(1+(RAND() * 18)), FLOOR(2+(RAND() * 16))), CONCAT(FLOOR(1990 + (RAND() * 20)),'-',LPAD(FLOOR(1 + (RAND() * 12)),2,0),'-',LPAD(FLOOR(1 + (RAND() * 27)),2,0)), 'female', UUID()); INSERT INTO students(sid, name, birth_date, gender, extra_info) VALUES(UUID(), SUBSTRING(UUID(), FLOOR(1+(RAND() * 18)), FLOOR(2+(RAND() * 16))), CONCAT(FLOOR(1990 + (RAND() * 20)),'-',LPAD(FLOOR(1 + (RAND() * 12)),2,0),'-',LPAD(FLOOR(1 + (RAND() * 27)),2,0)), 'male', UUID());
步驟二:元數據鎖分析與處理
通過MySQL命令行工具連接RDS MySQL數據庫,構造會話一。詳情請參見使用命令行連接。
查詢測試表students中的數據。
SELECT id FROM students LIMIT 5;
例如返回結果為:
+----+ | id | +----+ | 1 | | 2 | | 3 | | 4 | | 5 | +----+
開啟事務,并更新測試表students中的數據,但不提交事務。
BEGIN; UPDATE students SET name=UUID() WHERE id =3 ;
構造會話二,執行如下語句為測試表students增加索引。
ALTER TABLE students ADD INDEX idx_name(name);
構造會話三,執行如下語句查詢測試表students中的數據。
SELECT * FROM students WHERE id < 5;
登錄DAS控制臺,通過會話管理功能查看實例當前會話。詳情請參見實例會話。
實例會話顯示當前存在鎖等待。
單擊查看詳情,查看會話鎖等待關系圖。
選擇并結束可疑會話。
刷新實例會話數據。可以觀察到,查詢語句已經執行完畢,DDL語句正在執行。
說明如果測試表students上的數據較少,當可疑會話結束時,DDL語句會立即執行成功,將無法觀察到。
步驟三:事務阻塞關系分析
通過MySQL命令行工具連接RDS MySQL數據庫,構造會話一。詳情請參見使用命令行連接。
查詢測試表students中的數據。
SELECT id FROM students WHERE id < 5;
例如返回結果為:
+----+ | id | +----+ | 1 | | 2 | | 3 | | 4 | +----+
開啟事務,并更新測試表students中的數據,但不提交事務。
BEGIN; UPDATE students SET name=UUID() WHERE id < 5;
構造會話二,執行如下語句更新會話一中更新過的數據。
UPDATE students SET name=UUID() WHERE id = 1;
構造會話三,執行如下語句更新會話一中更新過的數據。
UPDATE students SET name=UUID() WHERE id = 2;
登錄DAS控制臺,通過會話管理功能查看實例當前會話。詳情請參見實例會話。
實例會話顯示當前有兩個事務處于LOCK WAIT狀態。
在鎖等待統計區域,單擊查看詳情,查看會話鎖等待關系圖。
在會話一中,執行如下命令提交事務。
COMMIT;
查看實例當前會話,系統顯示另外兩個會話的更新語句已經執行完畢,并且已經沒有處于LOCK WAIT狀態的事務。