mysql記錄

近期二刷了極客時(shí)間的MySQL實(shí)戰(zhàn)45講,對部分知識點(diǎn)進(jìn)行簡單的記錄

檢測delete不刪除磁盤表數(shù)據(jù)
1梯皿,為了方便直接win安裝了mysql工碾;
2渊额,通過SHOW VARIABLES LIKE 'datadir';命令找到數(shù)據(jù)所在文件夾
3旬迹,通過存儲函數(shù)為test庫創(chuàng)建20000條數(shù)據(jù)

CREATE PROCEDURE proc()
BEGIN
declare var int;
set var=0;
while var <= 10000 do
insert into term values(var,'');
set var = var + 1;
end while;
END;

data

4尸疆,此時(shí)執(zhí)行delete語句寿弱,delete from term where 1=1症革;文件大小并沒有發(fā)生改變
5噪矛,重現(xiàn)執(zhí)行步驟三残炮,執(zhí)行truncate語句吉殃,truncate term瓦灶;ibd文件只剩下96KB

因此批量刪除數(shù)據(jù)時(shí)建議用truncate贼陶,不僅釋放磁盤空間烘贴,而且row格式的binlog日志中也是這么一條語句老翘;
缺點(diǎn)铺峭,刪除無法進(jìn)行數(shù)據(jù)恢復(fù);

MDL鎖
用于解決或者保證DDL操作與DML操作之間的一致性;
DML操作需要MDL讀鎖,DDL操作需要MDL寫鎖;
讀寫互斥呢袱,讀讀不互斥;

MDL.png

如圖開啟兩個事務(wù)通過show processlist命令可以看見MDL鎖
MDL.png

MySQL 5.6 版本開始引入的 Online DDL;具體理解就是在更改表結(jié)構(gòu)的時(shí)候可以同時(shí)進(jìn)行DML操作张峰;
那還是否有MDL寫鎖棒旗?
當(dāng)然,只是寫鎖時(shí)間縮短;ALTER語句在啟動的時(shí)候需要獲取 MDL 寫鎖俱两,但是這個寫鎖在真正拷貝數(shù)據(jù)之前就退化成讀鎖了休讳。

死鎖產(chǎn)生與處理
死鎖出現(xiàn)的原因是資源的相互等待(例子來源于mysql實(shí)戰(zhàn)45講第7,21章)

首先表只事務(wù)的隔離級別是可重復(fù)讀(擁有間隙鎖)
CREATE TABLE t (
id int(11) NOT NULL,
c int(11) DEFAULT NULL,
d int(11) DEFAULT NULL,
PRIMARY KEY (id),
KEY c (c)
) ENGINE=InnoDB;
insert into t values(0,0,0),(5,5,5),
(10,10,10),(15,15,15),(20,20,20),(25,25,25);

Deadlock

當(dāng)執(zhí)行sessionA,B后可發(fā)現(xiàn)出現(xiàn)了死鎖
1纳猫,session A 啟動事務(wù)后執(zhí)行查詢語句加 lock in share mode侵续,在索引 c 上加了 next-key lock(5,10] 和間隙鎖 (10,15)状蜗;
2需五,session B 的 update 語句也要在索引 c 上加 next-key lock(5,10] ,進(jìn)入鎖等待轧坎;
3宏邮,然后 session A 要再插入 (8,8,8) 這一行,被 session B 的間隙鎖鎖住缸血。由于出現(xiàn)了死鎖蜜氨,InnoDB 讓 session B 回滾。

期間還需注意sessionB block了為什么還能添加間隙鎖捎泻?
由于加鎖的步驟是分兩步的飒炎,先是間隙鎖,后是行鎖笆豁。間隙鎖加成功郎汪,而update語句的行鎖被block了

當(dāng)出現(xiàn)死鎖以后,有兩種策略:
一種策略是闯狱,直接進(jìn)入等待煞赢,直到超時(shí)。這個超時(shí)時(shí)間可以通過參數(shù) innodb_lock_wait_timeout來設(shè)置扩氢。
另一種策略是耕驰,發(fā)起死鎖檢測,發(fā)現(xiàn)死鎖后录豺,主動回滾死鎖鏈條中的某一個事務(wù)朦肘,讓其他事 務(wù)得以繼續(xù)執(zhí)行。將參數(shù)innodb_deadlock_detect設(shè)置為on双饥,表示開啟這個邏輯媒抠。

innodb_lock_wait_timeout在InnoDB中,innodb_lock_wait_timeout的默認(rèn)值是50s咏花,意味著如果采用第一個策略趴生,當(dāng)出現(xiàn) 死鎖以后,第一個被鎖住的線程要過50s才會超時(shí)退出昏翰,然后其他線程才有可能繼續(xù)執(zhí)行苍匆。對于 在線服務(wù)來說,這個等待時(shí)間往往是無法接受的棚菊。
但是浸踩,我們又不可能直接把這個時(shí)間設(shè)置成一個很小的值,比如1s统求。這樣當(dāng)出現(xiàn)死鎖的時(shí)候检碗,確 實(shí)很快就可以解開,但如果不是死鎖码邻,而是簡單的鎖等待呢折剃?所以,超時(shí)時(shí)間設(shè)置太短的話像屋,會 出現(xiàn)很多誤傷怕犁。
所以,正常情況下我們還是要采用第二種策略己莺,即:主動死鎖檢測因苹,而且 innodb_deadlock_detect的默認(rèn)值本身就是on。主動死鎖檢測在發(fā)生死鎖的時(shí)候篇恒,是能夠快速發(fā) 現(xiàn)并進(jìn)行處理的扶檐,但是它也是有額外負(fù)擔(dān)的。
每個新來的被堵住的線程胁艰,都要判斷會不會由于自己的加入導(dǎo)致了死鎖款筑,這是一個時(shí)間復(fù)雜度是 O(n)的操作。假設(shè)有1000個并發(fā)線程要同時(shí)更新同一行腾么,那么死鎖檢測操作就是100萬這個量級 的奈梳。雖然最終檢測的結(jié)果是沒有死鎖,但是這期間要消耗大量的CPU資源解虱。因此攘须,你就會看到 CPU利用率很高,但是每秒?yún)s執(zhí)行不了幾個事務(wù)


Deadlock.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末殴泰,一起剝皮案震驚了整個濱河市于宙,隨后出現(xiàn)的幾起案子浮驳,更是在濱河造成了極大的恐慌,老刑警劉巖捞魁,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件至会,死亡現(xiàn)場離奇詭異,居然都是意外死亡谱俭,警方通過查閱死者的電腦和手機(jī)奉件,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來昆著,“玉大人县貌,你說我怎么就攤上這事〈斩” “怎么了煤痕?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長征候。 經(jīng)常有香客問我杭攻,道長,這世上最難降的妖魔是什么疤坝? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任兆解,我火速辦了婚禮,結(jié)果婚禮上跑揉,老公的妹妹穿的比我還像新娘锅睛。我一直安慰自己,他們只是感情好历谍,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布现拒。 她就那樣靜靜地躺著,像睡著了一般望侈。 火紅的嫁衣襯著肌膚如雪印蔬。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天脱衙,我揣著相機(jī)與錄音侥猬,去河邊找鬼。 笑死捐韩,一個胖子當(dāng)著我的面吹牛退唠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播荤胁,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼瞧预,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起垢油,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤盆驹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后秸苗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體召娜,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡运褪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年惊楼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片秸讹。...
    茶點(diǎn)故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡檀咙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出璃诀,到底是詐尸還是另有隱情弧可,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布劣欢,位于F島的核電站棕诵,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏凿将。R本人自食惡果不足惜校套,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望牧抵。 院中可真熱鬧笛匙,春花似錦、人聲如沸犀变。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽获枝。三九已至蠢正,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間省店,已是汗流浹背嚣崭。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留萨西,地道東北人有鹿。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像谎脯,于是被迫代替她去往敵國和親葱跋。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內(nèi)容