使用DAS經(jīng)濟(jì)版進(jìn)行鎖分析
DAS經(jīng)濟(jì)版在基礎(chǔ)版功能的基礎(chǔ)上,增強(qiáng)了會(huì)話管理、鎖分析和性能洞察等功能,并新增了空間碎片自動(dòng)回收,使數(shù)據(jù)庫(kù)運(yùn)維更加高效便捷,幫助您7*24小時(shí)高效管理數(shù)據(jù)庫(kù),避免業(yè)務(wù)受阻的風(fēng)險(xiǎn),有效保障線上業(yè)務(wù)的穩(wěn)定性。本文介紹如何通過(guò)DAS經(jīng)濟(jì)版對(duì)RDS MySQL進(jìn)行鎖分析。
前提條件
已創(chuàng)建RDS MySQL實(shí)例。詳情請(qǐng)參見快速使用RDS MySQL高可用版實(shí)例。
DAS經(jīng)濟(jì)版當(dāng)前僅支持華東2(上海)地域,請(qǐng)?jiān)谌A東2(上海)地域創(chuàng)建RDS MySQL實(shí)例。
步驟一:構(gòu)造數(shù)據(jù)
在目標(biāo)RDS MySQL實(shí)例中創(chuàng)建名為das_test的測(cè)試數(shù)據(jù)庫(kù)。詳情請(qǐng)參見創(chuàng)建數(shù)據(jù)庫(kù)。
通過(guò)數(shù)據(jù)管理DMS(Data Management)登錄RDS MySQL數(shù)據(jù)庫(kù),詳情請(qǐng)參見通過(guò)DMS登錄RDS數(shù)據(jù)庫(kù)。
在DMS的SQL窗口(SQL Console)執(zhí)行如下命令,在數(shù)據(jù)庫(kù)das_test中創(chuàng)建測(cè)試表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
重復(fù)執(zhí)行如下命令10次,在測(cè)試表students中寫入測(cè)試數(shù)據(jù)。
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());
步驟二:元數(shù)據(jù)鎖分析與處理
通過(guò)MySQL命令行工具連接RDS MySQL數(shù)據(jù)庫(kù),構(gòu)造會(huì)話一。詳情請(qǐng)參見使用命令行連接。
查詢測(cè)試表students中的數(shù)據(jù)。
SELECT id FROM students LIMIT 5;
例如返回結(jié)果為:
+----+ | id | +----+ | 1 | | 2 | | 3 | | 4 | | 5 | +----+
開啟事務(wù),并更新測(cè)試表students中的數(shù)據(jù),但不提交事務(wù)。
BEGIN; UPDATE students SET name=UUID() WHERE id =3 ;
構(gòu)造會(huì)話二,執(zhí)行如下語(yǔ)句為測(cè)試表students增加索引。
ALTER TABLE students ADD INDEX idx_name(name);
構(gòu)造會(huì)話三,執(zhí)行如下語(yǔ)句查詢測(cè)試表students中的數(shù)據(jù)。
SELECT * FROM students WHERE id < 5;
登錄DAS控制臺(tái),通過(guò)會(huì)話管理功能查看實(shí)例當(dāng)前會(huì)話。詳情請(qǐng)參見實(shí)例會(huì)話。
實(shí)例會(huì)話顯示當(dāng)前存在鎖等待。
單擊查看詳情,查看會(huì)話鎖等待關(guān)系圖。
選擇并結(jié)束可疑會(huì)話。
刷新實(shí)例會(huì)話數(shù)據(jù)。可以觀察到,查詢語(yǔ)句已經(jīng)執(zhí)行完畢,DDL語(yǔ)句正在執(zhí)行。
說(shuō)明如果測(cè)試表students上的數(shù)據(jù)較少,當(dāng)可疑會(huì)話結(jié)束時(shí),DDL語(yǔ)句會(huì)立即執(zhí)行成功,將無(wú)法觀察到。
步驟三:事務(wù)阻塞關(guān)系分析
通過(guò)MySQL命令行工具連接RDS MySQL數(shù)據(jù)庫(kù),構(gòu)造會(huì)話一。詳情請(qǐng)參見使用命令行連接。
查詢測(cè)試表students中的數(shù)據(jù)。
SELECT id FROM students WHERE id < 5;
例如返回結(jié)果為:
+----+ | id | +----+ | 1 | | 2 | | 3 | | 4 | +----+
開啟事務(wù),并更新測(cè)試表students中的數(shù)據(jù),但不提交事務(wù)。
BEGIN; UPDATE students SET name=UUID() WHERE id < 5;
構(gòu)造會(huì)話二,執(zhí)行如下語(yǔ)句更新會(huì)話一中更新過(guò)的數(shù)據(jù)。
UPDATE students SET name=UUID() WHERE id = 1;
構(gòu)造會(huì)話三,執(zhí)行如下語(yǔ)句更新會(huì)話一中更新過(guò)的數(shù)據(jù)。
UPDATE students SET name=UUID() WHERE id = 2;
登錄DAS控制臺(tái),通過(guò)會(huì)話管理功能查看實(shí)例當(dāng)前會(huì)話。詳情請(qǐng)參見實(shí)例會(huì)話。
實(shí)例會(huì)話顯示當(dāng)前有兩個(gè)事務(wù)處于LOCK WAIT狀態(tài)。
在鎖等待統(tǒng)計(jì)區(qū)域,單擊查看詳情,查看會(huì)話鎖等待關(guān)系圖。
在會(huì)話一中,執(zhí)行如下命令提交事務(wù)。
COMMIT;
查看實(shí)例當(dāng)前會(huì)話,系統(tǒng)顯示另外兩個(gè)會(huì)話的更新語(yǔ)句已經(jīng)執(zhí)行完畢,并且已經(jīng)沒有處于LOCK WAIT狀態(tài)的事務(wù)。
相關(guān)文檔
DAS經(jīng)濟(jì)版的詳情請(qǐng)參見DAS經(jīng)濟(jì)版介紹。
DAS經(jīng)濟(jì)版的計(jì)費(fèi)情況請(qǐng)參見產(chǎn)品計(jì)費(fèi)。