成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

mysql死鎖問題實例分析

這篇文章主要介紹“MySQL死鎖問題實例分析”,在日常操作中,相信很多人在mysql死鎖問題實例分析問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”mysql死鎖問題實例分析”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

創(chuàng)新互聯(lián)建站于2013年開始,先為江陽等服務(wù)建站,江陽等地企業(yè),進行企業(yè)商務(wù)咨詢服務(wù)。為江陽企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

一、問題描述:

        一張表的非索引字段更新,并發(fā)環(huán)境下出現(xiàn)鎖表,導(dǎo)致死鎖!

二、簡要分析:

        兩個事務(wù),一個事務(wù),在執(zhí)行一個索引字段更新sql,另外一個事務(wù)正好進行主鍵條件更新,也進行非索引更新。導(dǎo)致兩個事務(wù)交叉等待釋放鎖,所以出現(xiàn)死鎖問題。

三、數(shù)據(jù)模擬:

創(chuàng)建表:

create table user(

  id int(10) NOT NULL AUTO_INCREMENT,

  user_id varchar(20),

  id_card_no varchar(50),

  name varchar(30),

  password varchar(30),

  sex char(1),

  birthday date,

  PRIMARY KEY (`id`),

  INDEX index_name (user_id(20))

);

插入兩條數(shù)據(jù)

insert into user (user_id,id_card_no,name,password,sex,birthday) values('000001','001','zhangsan','123','t','1993-05-27');

insert into user (user_id,id_card_no,name,password,sex,birthday) values('000002','002','lisi','123','t','1993-05-27');

四、問題復(fù)現(xiàn)

step 1:開啟一個事務(wù)1,首先執(zhí)行主鍵更新

  begin;

  update user set name = "test transaction by zz" where id = 1;

step 2:再開啟一個事務(wù)2,執(zhí)行另一個主鍵更新語句,

   begin;

   update user set name = "test transaction by zz" where id = 2;

step 3:事務(wù)1執(zhí)行一條非索引字段更新,不要提交事務(wù);

  update user set name = "test transaction by zz name" where user_id = '000001';

step 4:事務(wù)2在執(zhí)行一條非索引字段更新,不要提交事務(wù);

  update user set name = "test transaction by zz name" where user_id = '000002';

運行結(jié)果:ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction.

mysql死鎖問題實例分析

四、分析結(jié)果:

1.兩個事務(wù),交叉等待對方釋放鎖,就會出現(xiàn)死鎖。

2.如上操作,事務(wù)1執(zhí)行sql2的時候等待事務(wù)2釋放行鎖,事務(wù)2這時候可能也進行非索引字段更新,需要等待事務(wù)1釋放表鎖,這就出現(xiàn)了死鎖。

3.主鍵更新,只會鎖住該索引,這就是行級鎖的概念;索引字段更新或者刪除,會先根據(jù)索引字段,找到相應(yīng)的主鍵記錄,再進行加鎖;非主鍵,非索引字段的更新和刪除默認會鎖住整張表,這就是一個表級鎖的概念;

五、優(yōu)化與建議:

1.避免非索引字段的更新和刪除操作。

2.如果有這樣的更新,建議事務(wù)外查詢,然后根據(jù)索引字段進行更新,就不會造成鎖表的情況;

3.對相應(yīng)的字段加索引,但是一張表中索引不宜太多,會影響數(shù)據(jù)庫性能,最好四個以內(nèi),對于超過100ms的查詢,需要優(yōu)化;但是加索引也不是最好的解決方案,索引更新,也會先找到索引對應(yīng)的主鍵,再進行加鎖,也有一點點性能問題。但是滿足大部分的業(yè)務(wù)需求。

4.系統(tǒng)需要異常情況要有重試機制,對于數(shù)據(jù)庫這樣的,死鎖問題,一般的在并發(fā)下出現(xiàn),也是會有系統(tǒng)空缺的時候,這時候有重試,就稍微好一點。但是對于時效性比較高的業(yè)務(wù),一定不能出現(xiàn)這種問題。

到此,關(guān)于“mysql死鎖問題實例分析”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

本文標(biāo)題:mysql死鎖問題實例分析
本文網(wǎng)址:http://jinyejixie.com/article4/jjphoe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計虛擬主機、網(wǎng)頁設(shè)計公司、動態(tài)網(wǎng)站用戶體驗

廣告

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

商城網(wǎng)站建設(shè)
彭水| 内江市| 保山市| 宜君县| 平顺县| 仪征市| 大渡口区| 鸡泽县| 浦东新区| 原阳县| 乐安县| 西华县| 望江县| 阳城县| 黑水县| 苍山县| 昌黎县| 平凉市| 安义县| 中西区| 射洪县| 尚义县| 平顶山市| 龙山县| 琼中| 万州区| 东乌珠穆沁旗| 万宁市| 迁西县| 泸水县| 辽阳市| 临海市| 博爱县| 桂平市| 库尔勒市| 兴国县| 阜南县| 福建省| 鄱阳县| 肇东市| 山东|