bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

怎樣進(jìn)行MySQL中的事務(wù)和鎖簡單測(cè)試

本篇文章為大家展示了怎樣進(jìn)行MySQL中的事務(wù)和鎖簡單測(cè)試,內(nèi)容簡明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

公司主營業(yè)務(wù):成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出巴州免費(fèi)做網(wǎng)站回饋大家。

一直以來,對(duì)于MySQL中的事務(wù)和鎖的內(nèi)容是淺嘗輒止,沒有花時(shí)間了解過,在一次看同事排查的故障中有個(gè)問題引起了我的興趣,雖然過去了很久,但是現(xiàn)在簡單總結(jié)一下還是有一些收獲。
首先我們初始化數(shù)據(jù),事務(wù)的隔離級(jí)別還是MySQL默認(rèn)的RR,存儲(chǔ)引擎為InnoDB
>create table test(id int,name varchar(30));
>insert into test values(1,'aa');
開啟一個(gè)會(huì)話,開啟事務(wù)。
會(huì)話1:
[test]>start transaction;
怎樣進(jìn)行MySQL中的事務(wù)和鎖簡單測(cè)試
這個(gè)時(shí)候我們查看show processlist的信息是不會(huì)看到更為具體的SQL等的信息。
怎樣進(jìn)行MySQL中的事務(wù)和鎖簡單測(cè)試
我們?cè)诹硗庖粋€(gè)會(huì)話中查看事務(wù)相關(guān)的一個(gè)表,Innodb_trx,其實(shí)它對(duì)應(yīng)的存儲(chǔ)引擎是MEMORY
[information_schema]>select *from innodb_trx\G
怎樣進(jìn)行MySQL中的事務(wù)和鎖簡單測(cè)試
然后在會(huì)話1執(zhí)行一條語句。
select * from test where id=1 for update;
再次查看事務(wù)表的信息,我們對(duì)比前后兩次的結(jié)果變化,發(fā)現(xiàn)唯一的不同是trx_lock_structs的地方,由0變?yōu)榱?
怎樣進(jìn)行MySQL中的事務(wù)和鎖簡單測(cè)試
對(duì)于這個(gè)字段的含義,可以參考官方文檔的介紹。
https://dev.mysql.com/doc/refman/5.6/en/innodb-trx-table.html

對(duì)于字段TRX_LOCK_STRUCTS的官方解釋如下:
The number of locks reserved by the transaction.

會(huì)話2:
這個(gè)時(shí)候在會(huì)話2中執(zhí)行語句會(huì)發(fā)生阻塞,因?yàn)榇嬖谙鄳?yīng)的鎖等待。
select * from test where id=1 for update;
等待一段時(shí)間,會(huì)話2就會(huì)提示超時(shí)。
[test]>select * from test where id=1 for update;
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
這個(gè)地方和一個(gè)參數(shù)是有關(guān)聯(lián)的,innodb_lock_wait_timeout它會(huì)控制阻塞等待的時(shí)長。
[test]>show variables like '%innodb_lock_wait_timeout%';
| Variable_name            | Value |
| innodb_lock_wait_timeout | 120   |
對(duì)于事務(wù)相關(guān)的信息查看,在MySQL中有三個(gè)比較經(jīng)典的數(shù)據(jù)字典,innodb_lock_waits,innodb_trx,innodb_trx,三者可以結(jié)合起來,就能夠查到相對(duì)比較完整的阻塞信息和事務(wù)的情況,官方提供的一個(gè)SQL如下:
怎樣進(jìn)行MySQL中的事務(wù)和鎖簡單測(cè)試
我們簡稱為check_trx.sql,在這個(gè)場(chǎng)景中我們運(yùn)行check_trx.sql會(huì)發(fā)現(xiàn)線程3573在等待,阻塞它的正是線程3574
怎樣進(jìn)行MySQL中的事務(wù)和鎖簡單測(cè)試

怎樣進(jìn)行MySQL中的事務(wù)和鎖簡單測(cè)試
怎樣進(jìn)行MySQL中的事務(wù)和鎖簡單測(cè)試
這個(gè)時(shí)候有一個(gè)地方需要注意,那就是通過show engine innodb status得到的結(jié)果中,標(biāo)紅的部分可以看出鎖是表級(jí)鎖。這個(gè)還是和表的結(jié)構(gòu)有一定的關(guān)系。
我們可以換一個(gè)方式來測(cè)試完善,比如測(cè)試一下死鎖。

測(cè)試死鎖
首先給表test添加一條記錄
insert into test values(2,'bb');
為了杜絕表級(jí)鎖,對(duì)表test 添加主鍵,如果采用下面的方式添加主鍵,竟然不可以,看來Oracle用慣了,很多思維方式要復(fù)制過來,SQL語法還是有不少地方需要注意。
[test]>alter table test modify id primary key;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server vline 1。。。
可以使用下面的方式來添加主鍵。
[test]>ALTER TABLE test ADD UNIQUE INDEX (id), ADD PRIMARY KEY (id);
Query OK, 2 rows affected (0.25 sec)
Records: 2  Duplicates: 0  Warnings: 0
接下來來復(fù)現(xiàn)一下死鎖的情況。

會(huì)話1:
開啟事務(wù),更新id=1的那行數(shù)據(jù)。
start transaction;
[test]>select * from test where id=1 for update;
+----+------+
| id | name |
+----+------+
|  1 | aa   |
+----+------+
1 row in set (0.00 sec)
這個(gè)時(shí)候查看innodb_trx的信息,只有1條記錄。
怎樣進(jìn)行MySQL中的事務(wù)和鎖簡單測(cè)試

會(huì)話2:
開啟事務(wù),更新id=2的那行數(shù)據(jù)。
start transaction;
select * from test where id=2 for update;
(root:localhost:Sat Oct  8 18:15:10 2016)[test]>select * from test where id=2 for update;
+----+------+
| id | name |
+----+------+
|  2 | bb   |
+----+------+
1 row in set (0.00 sec)
這個(gè)時(shí)候兩者是不存在阻塞的情況,因?yàn)楸舜硕际怯绊應(yīng)毩⒌男小?br/>>source check_trx.sql
Empty set (0.00 sec)
查看事務(wù)表,里面就是2條記錄了。
怎樣進(jìn)行MySQL中的事務(wù)和鎖簡單測(cè)試

怎樣進(jìn)行MySQL中的事務(wù)和鎖簡單測(cè)試
會(huì)話1:
在會(huì)話1中修改id=2的數(shù)據(jù)行。
select * from test where id=2 for update;
查看事務(wù)表,會(huì)有一條阻塞的信息。
怎樣進(jìn)行MySQL中的事務(wù)和鎖簡單測(cè)試

會(huì)話2:
在會(huì)話2中修改id=1的數(shù)據(jù)行,這個(gè)時(shí)候會(huì)發(fā)現(xiàn)存在死鎖,而MySQL會(huì)毫不猶豫的清理掉阻塞的那個(gè)會(huì)話。這個(gè)過程是自動(dòng)完成的。
[test]>select * from test where id=1 for update;
ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction
查看阻塞的信息,就會(huì)發(fā)現(xiàn)已經(jīng)被清理掉了。
[(none)]>source check_trx.sql
Empty set (0.00 sec)
查看事務(wù)表,會(huì)發(fā)現(xiàn)只有1條記錄了。
怎樣進(jìn)行MySQL中的事務(wù)和鎖簡單測(cè)試
總體感覺MySQL的數(shù)據(jù)字典還是比較少,不過使用起來還是比較清晰。

上述內(nèi)容就是怎樣進(jìn)行MySQL中的事務(wù)和鎖簡單測(cè)試,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

網(wǎng)頁名稱:怎樣進(jìn)行MySQL中的事務(wù)和鎖簡單測(cè)試
URL分享:http://vcdvsql.cn/article4/jhisoe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設(shè)、網(wǎng)站內(nèi)鏈微信小程序、品牌網(wǎng)站設(shè)計(jì)、服務(wù)器托管、移動(dòng)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名