婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Mysql解決USE DB堵塞詳解

Mysql解決USE DB堵塞詳解

熱門標簽:銀川電銷外呼系統(tǒng)定制 電銷機器人好品牌門薩維l 做地圖標注都需要什么工具 西安400電話在哪里辦理 甘孜電話機器人廠家 中科嘉智人工智能電銷機器人 上海智能外呼系統(tǒng)需要多少錢 凱立德科技館地圖標注 哈爾濱crm外呼系統(tǒng)價格

遇到故障,我們往往想的是如何解決這個故障,而不是從故障的根本去思考出現(xiàn)這個故障的原因?這樣的結果,只能使我們得到了魚,失去了漁。今天,我們就來分享一個由USE DB堵塞故障引發(fā)的思考案例。

故障描述

今天一個朋友遇到數(shù)據(jù)庫遇到一個嚴重的故障,故障環(huán)境如下:

MYSQL 5.6.16

RR隔離級別

GITD關閉

表現(xiàn)如下:

use db不能進入數(shù)據(jù)庫

show table status不能查詢到表信息

schema.processlist來看有大量的 Waiting for table metadata lock

情急之下他殺掉了一大堆線程后發(fā)現(xiàn)還是不能恢復,最后殺掉了一個沒有及時提交的事物才恢復正常。也僅僅留下了如下圖的一個截圖:

故障信息提取

還是回到上圖,我們可以歸納一下語句類型如下:

1、CREATE TABLE A AS SELECT B

其STATE為 sending data

2、DROP TABLE A

其STATE為 Waiting for table metadata lock

3、SELECT * FROM A

其STATE為 Waiting for table metadata lock

4、 SHOW TABLE STATUS[like 'A']

其STATE為 Waiting for table metadata lock

信息分析

要分析出這個案列其實不太容易因為他是MYSQL層MDL LOCK和RR模式innodb row lock的一個綜合案列,并且我們要對schema.processlist的STATE比較敏感才行。

建議先閱讀我的如下文章來學習MDL LOCK:

https://www.jb51.net/article/131383.htm

本節(jié)關于MDL LOCK的驗證使用下面兩種方式:

方式一:筆者在MDL LOCK源碼加鎖函數(shù)處加日志輸出,如果要分析各種語句加MDL LOCK的類型還只能用這種方式,因為MDL LOCK加鎖往往一閃而過,performance_schema.metadata_locks 沒有辦法觀察到。

方式二:處于堵塞情況下使用5.7版本的performance_schema.metadata_locks觀察。

在P_S中打開mdl監(jiān)測方法如下:

一、關于CREATE TABLE A AS SELECT B 對B表sending data的分析

關于sending data這個狀態(tài)其實可以代表很多含義,從我現(xiàn)有的對的了解,這是MYSQL上層對SELECT類型語句的這類語句在INNODB層和MYSQL層進行數(shù)據(jù)交互的時候一個統(tǒng)稱,所以出現(xiàn)它的可能包含:

確實需要訪問數(shù)據(jù)量特別大,可能需要優(yōu)化。

由于INNODB 層的獲取row lock需要等待,比如我們常見的SELECT FOR UPDATE。

同時我們還需要注意在RR模式下SELECT B這一部分加鎖方式和INSERT...SELECT是一致的參考不再贅述:

從他反應的情況因為他在最后殺掉了一個長期的未提交的事物所以他因為是情況2。并且整個CREATE TABLE A AS SELECT B語句由于B表上某些數(shù)據(jù)庫被上了鎖而不能獲取,導致整個語句處于sending data狀態(tài)下。

二、關于SHOW TABLE STATUS[like 'A'] Waiting for table metadata lock的分析

這是本案例中最重要的一環(huán),SHOW TABLE STATUS[like 'A']居然被堵塞其STATE為Waiting for table metadata lock并且注意這里是table因為MDL LOCK類型分為很多。我在MDL介紹的那篇文章中提到了desc 一個表的時候會上MDL_SHARED_HIGH_PRIO(SH),其實在SHOW TABLE STATUS的時候也會對本表上MDL_SHARED_HIGH_PRIO(SH)。

方式一

方式二

兩種方式都能觀察到MDL_SHARED_HIGH_PRIO(SH)的存在并且我模擬的是處于堵塞情況下的。

但是MDL_SHARED_HIGH_PRIO(SH) 是一個優(yōu)先級非常高的一個MDL LOCK類型表現(xiàn)如下:

兼容性:

阻塞隊列優(yōu)先級:

其被堵塞的條件除了被MDL_EXCLUSIVE(X)堵塞沒有其他的可能。那么這就是一個非常重要的突破口。

三、關于CREATE TABLE A AS SELECT B 對A表的加MDL LOCK的分析

這一點也是我以前不知道的,也是本案列中花時間最多的地方,前文已經(jīng)分析過要讓SHOW TABLE STATUS[like 'A']這種只會上MDL_SHARED_HIGH_PRIO(SH) MDL LOCK的語句堵塞在MDL LOCK上只有一種可能那就是A表上了MDL_EXCLUSIVE(X)。

那么我開始懷疑這個DDL語句在語句結束之前會對A表上MDL_EXCLUSIVE(X) ,然后進行實際測試不出所料確實是這樣的如下:

方式一

方式二

這里比較遺憾在performance_schema.metadata_locks中并沒有顯示出MDL_EXCLUSIVE(X),而顯示為MDL_SHARED(S)是我們在我輸出的日志中可以看到這里做了升級操作將MDL_SHARED(S) 升級為了MDL_EXCLUSIVE(X)。并且由前面的兼容性列表來看,只有MDL_EXCLUSIVE(X)會堵塞MDL_SHARED_HIGH_PRIO(SH)。所以我們應該能夠確認這里確實做了升級操作,否則SHOW TABLE STATUS[like 'A'] 是不會被堵塞的。

四、關于SELECT * FROM A Waiting for table metadata lock的分析

也許大家認為SELECT不會上鎖,但是那是在innodb 層次,在MYSQL層會上MDL_SHARED_READ(SR) 如下:

方式一

方式二

可以看到確實有MDL_SHARED_READ(SR)的存在,當前處于堵塞狀態(tài)

其兼容性如下:

顯然MDL_SHARED_READ(SR) 和MDL_SHARED_HIGH_PRIO(SH)是不兼容的需要等待。

五、關于DROP TABLE A Waiting for table metadata lock的分析

這一點很好分析因為A表上了X鎖而DROP TABLE A必然上MDL_EXCLUSIVE(X)鎖它當然和MDL_EXCLUSIVE(X)不兼容。如下:

方式一

方式二

其中EXCLUSIVE就是我們說的MDL_EXCLUSIVE(X)它確實存在當前處于堵塞

六、為何use db也會堵塞?

如果使用mysql客戶端不使用-A選項(或者 no-auto-rehash)在USE DB的時候至少要做如下事情:

1、 對db下每個表上MDL (SH) lock如下(調(diào)用MDL_context::acquire_lock 這里給出堵塞時候的信息)

方式一

方式二

可以看到USE DB確實也因為MDL_SHARED_HIGH_PRIO(SH) 發(fā)生了堵塞。

2、對每個表加入到table cache,并且打開表(調(diào)用open_table_from_share())

那么這種情況就和SHOW TABLE STATUS[like 'A']被堵塞的情況一模一樣了,也是由于MDL 鎖不兼容造成的。

分析梳理

有了前面的分析那么我們可以梳理這個故障發(fā)生的原因如下:

有一個在B表上長期未提交的DML
語句會在innodb層對B表某些數(shù)據(jù)加innodb row lock。

由步驟1引起了CREATE TABLE A AS SELECT B的堵塞
因為RR模式下SELECT B必然對B表上滿足的數(shù)據(jù)上鎖,因為步驟1已經(jīng)加鎖所以觸發(fā)等待,STATE為sending data。

由步驟2引起了其他語句的堵塞
因為CRATE TABLE A AS SELECT B在A表建立完成之前會上MDL_EXCLUSIVE(X),這把鎖會堵塞其他全部的關于A表的語句,包括DESC/SHOW TABLE STATUS/USE DB(非-A) 這種只上MDL_SHARED_HIGH_PRIO(SH)MDL LOCK 的語句。STATE統(tǒng)一為Waiting for table metadata lock。

模擬測試

測試環(huán)境:

5.7.14

GITD關閉

RR隔離級別

使用腳本:

步驟如下:

session1

session2 session3 session4------use test;---use test;begin; delete from b;------------use test;create table a asselect * from b;(由于b表innodb row lock堵塞)------------show table status like 'a';(由于a表MDL LOCK堵塞)------------use test(由于a表MDL LOCK堵塞)

最后我們看到的等待狀態(tài)如下:

這樣我們就完美的模擬出線上的狀態(tài),如果我們殺掉session1中的事物,自然就全部解鎖了,讓我們再來看一下performance_schema.metadata_locks中的輸出:

我們可以看到如上的輸出,但是需要注意LOCK_TYPE: SHARED它不可能堵塞LOCK_TYPE: SHARED_HIGH_PRIO(可以參考附錄或者我以前寫的MDL LOCK分析的文章)如上文分析這里實際上是做了升級操作升級為了MDL_EXCLUSIVE(X)。

總結

RC模式下雖然CREATE TABLE A SELECT B中B表不會上任何INNODB ROW LOCK但是如果B表非常大那么A表也會處于MDL_EXCLUSIVE(X)保護下,因此也會觸發(fā)USE DB\SHOW TABLE STATUS等待的情況。

如果打開GTID不能使用CREATE TABLE A SELECT B這樣的語句。

對于DML/DDL混用的系統(tǒng)一定要注意并發(fā),就像本例中如果注意到高并發(fā)下的情況可以想辦法避免。

這個案列再次說明了長期不提交的事物可能引發(fā)悲劇,所以建議監(jiān)控超過N秒沒結束的事務。

附錄

MDL LOCK TYPE

兼容性矩陣

等待隊列優(yōu)先級矩陣

標簽:平頂山 安康 那曲 山南 安徽 四川 濮陽 浙江

巨人網(wǎng)絡通訊聲明:本文標題《Mysql解決USE DB堵塞詳解》,本文關鍵詞  Mysql,解決,USE,堵塞,詳解,;如發(fā)現(xiàn)本文內(nèi)容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Mysql解決USE DB堵塞詳解》相關的同類信息!
  • 本頁收集關于Mysql解決USE DB堵塞詳解的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    日本视频一区二区三区| 视频一区欧美日韩| 日日夜夜免费精品视频| av色综合久久天堂av综合| 精品久久久久av影院 | 欧美一区二区三区四区高清| 亚洲欧美自拍偷拍| 欧美日韩一级片在线观看| 亚洲国产日韩精品| 在线视频国产一区| 免费看黄色91| 久久久国产精品不卡| 高清成人在线观看| 国产精品网站在线观看| 99久久精品一区| 国产亚洲成aⅴ人片在线观看| 国产成人啪免费观看软件| 国产丝袜在线精品| 欧美挠脚心视频网站| 日本午夜精品视频在线观看| 欧美一区二区二区| 国产精品一二三| 亚洲乱码日产精品bd| 欧美午夜精品久久久久久孕妇| 日韩中文字幕1| 久久嫩草精品久久久久| 欧美男男青年gay1069videost| 免费xxxx性欧美18vr| 亚洲欧洲制服丝袜| 国产日韩视频一区二区三区| 欧美视频三区在线播放| 暴力调教一区二区三区| 日韩高清中文字幕一区| 国产精品激情偷乱一区二区∴| 欧美精品一卡两卡| 欧美日韩美少妇| 欧美性色综合网| 国产精品福利一区| 国产精品88av| 国产做a爰片久久毛片 | 午夜久久久久久| 一区二区三区四区av| 亚洲午夜日本在线观看| 最新欧美精品一区二区三区| 国产精品天美传媒| 中文字幕在线视频一区| 亚洲色图20p| 亚洲国产一区二区三区| 日韩电影一区二区三区四区| 麻豆国产精品视频| 国产精品91xxx| 日本韩国一区二区三区视频| 丁香亚洲综合激情啪啪综合| 国精品**一区二区三区在线蜜桃| 美女性感视频久久| 国产精品资源站在线| 成人精品国产福利| 9191精品国产综合久久久久久| 91在线视频官网| 色综合久久综合中文综合网| 欧美日韩在线免费视频| 国产精品无圣光一区二区| 亚洲综合在线电影| 国产成人免费网站| 欧洲av一区二区嗯嗯嗯啊| 26uuuu精品一区二区| 精品国产乱码久久久久久牛牛| 樱桃视频在线观看一区| 一区二区三区精密机械公司| 日韩vs国产vs欧美| 成人综合婷婷国产精品久久| 69堂精品视频| 怡红院av一区二区三区| 国产性做久久久久久| 91在线观看成人| 精品国产亚洲在线| 久久精品国产精品亚洲精品| 波多野结衣91| 国产日本欧美一区二区| 韩国av一区二区| 日韩美女视频在线| 久久99久久99小草精品免视看| 在线观看av不卡| 国产亚洲精品bt天堂精选| 精品一区二区三区免费毛片爱| 国产99久久久国产精品潘金| 久久精品综合网| 国产精品一品二品| 久久久久国产精品免费免费搜索| 免费xxxx性欧美18vr| 欧美videossexotv100| 国产九九视频一区二区三区| 精品国产一区二区三区忘忧草| 日韩一区欧美小说| 欧美日韩精品久久久| 国产精品国产a| 欧美理论电影在线| 免费观看成人av| 亚洲午夜精品网| 亚洲精品一区二区三区蜜桃下载 | 日韩免费观看2025年上映的电影| 麻豆国产精品官网| 国产精品色眯眯| 欧美一区二区三区视频| 国产很黄免费观看久久| 日韩成人午夜精品| 国产三级欧美三级日产三级99 | 欧美日韩在线免费视频| 婷婷综合五月天| 久久综合久久鬼色| 5月丁香婷婷综合| 91污片在线观看| 国产suv一区二区三区88区| 亚洲国产成人av| 97精品电影院| 不卡电影一区二区三区| 午夜不卡av在线| 中文字幕av一区二区三区免费看| 欧美日韩国产一区二区三区地区| 蜜桃视频一区二区三区在线观看| 一区二区三区不卡视频| 亚洲国产高清aⅴ视频| 日本高清无吗v一区| 99久久精品国产导航| 成人av免费在线播放| 波多野结衣在线aⅴ中文字幕不卡| 麻豆一区二区三| 国产精品久久久久久久久免费相片 | 色拍拍在线精品视频8848| 久久精品72免费观看| 亚洲国产日韩精品| 亚洲国产日韩一区二区| 一区二区三区在线免费| 亚洲1区2区3区4区| 精品一区二区精品| 91视频xxxx| 欧美性生活大片视频| 欧美性一级生活| 日韩一区二区在线免费观看| 色综合欧美在线视频区| 成人精品鲁一区一区二区| 在线免费观看成人短视频| 欧美日韩国产精品成人| 欧美日韩国产123区| 亚洲色图在线视频| 国产亚洲欧美色| 日韩欧美一区二区久久婷婷| 亚洲精品一线二线三线无人区| 久久久久久久综合| 亚洲视频免费在线| 1000部国产精品成人观看| 亚洲高清视频中文字幕| 伊人色综合久久天天人手人婷| 亚洲午夜激情av| 成人福利视频在线看| 欧美男同性恋视频网站| 欧美国产日本视频| 国产91对白在线观看九色| 欧美一区二区免费| 偷拍日韩校园综合在线| 99久久久精品| 中文字幕av一区 二区| 九九国产精品视频| 欧美日韩免费高清一区色橹橹 | 欧美午夜理伦三级在线观看| 日韩一区有码在线| 丁香激情综合国产| 国产情人综合久久777777| 亚洲综合色视频| 日本高清不卡一区| 一区二区三区中文字幕精品精品 | 国产日韩三级在线| 秋霞成人午夜伦在线观看| 欧美日韩国产一区| 亚洲精品成人悠悠色影视| 在线国产亚洲欧美| 午夜a成v人精品| 日韩欧美不卡一区| 成人av网址在线观看| 天堂va蜜桃一区二区三区| 久久久久久久久久久久久夜| caoporn国产一区二区| 亚洲欧美日韩在线| 91精品国产综合久久精品app| 成人av动漫在线| 偷窥少妇高潮呻吟av久久免费| 欧美成人伊人久久综合网| 成人av电影在线网| 一卡二卡欧美日韩| 国产精品日产欧美久久久久| www.一区二区| 国产a精品视频| 极品少妇xxxx偷拍精品少妇| 一区二区在线观看不卡| 欧美激情在线观看视频免费| 9191国产精品| 欧美一级理论片| 欧美精品v国产精品v日韩精品| 成人听书哪个软件好| 国产精一品亚洲二区在线视频|