mysql ddl 鎖_MySQL Online DDL導致全局鎖表案例分析

MySQL Online DDL導致全局鎖表案例分析

我這邊遇到了什么問題?

線上給某個表執行新增索引SQL, 然后整個數據CPU打到100%, 連接數暴增到極限, 最后導致所有訪問數據庫的應用都奔潰.

SQL如下:

ALTER TABLE `book`

ADD INDEX `idx_sub_title` (`sub_title` ASC);

能看到什么?

'10063293', 'root', '10.0.0.1:35252', 'novel', 'Query', '50', 'Waiting for table metadata lock',

'ALTER TABLE `lemon_novel`.`book` \nADD INDEX `idx_sub_title` (`sub_title` ASC)'

'10094494', 'root', '172.16.2.112:42808', 'novel', 'Query', '31', 'Waiting for table metadata lock', 'SELECT \n

book_trend.book_id AS book_id,

很奇怪, 這兩邊都在等"Waiting for table metadata lock"

反手查一下"Waiting for table metadata lock"是什么

初步的一些結論

看下來下面的一些結論:MySQL 5.6以后的版本,支持在線DDL,新增index/刪除index之類的可以直接InPlace操作,不需要rebuild整張表,理論上效果是很快的,詳細資料見Online DDL Operations

DDL add index 操作會lock table metadata,此操作是導致我們服務不可用的原因

有懷疑過lock tabel matadata和MySQL autocommit有關,但是實踐下來兩者看起來沒有關聯。

后來在阿里云上面還看到過他們特定寫過類似的答疑.

阿里云建議主要是這樣操作.這里需要找到的是一直在占用該表的會話,而不是正在等待MDL鎖解除的會話,注意區分。可以根據State列的狀態和Info列的命令內容來進行分析判斷。

您也可以用如下命令查詢長時間未完成的事務,如果導致阻塞的語句的用戶與當前用戶不同,請使用導致阻塞的語句的用戶登錄來終止會話。

select concat('kill ',i.trx_mysql_thread_id,';') from information_schema.innodb_trx i,

(select

id, time

from

information_schema.processlist

where

time = (select

max(time)

from

information_schema.processlist

where

state = 'Waiting for table metadata lock'

and substring(info, 1, 5) in ('alter' , 'optim', 'repai', 'lock ', 'drop ', 'creat'))) p

where timestampdiff(second, i.trx_started, now()) > p.time

and i.trx_mysql_thread_id not in (connection_id(),p.id);

然而在我的場景, 上面的SQL并沒有任何的進程輸出.

陷入僵局的...

不過上面給了一些思路, 現在我們主要是因為有東西占用著 table metadata lock, 導致當前所有的東西都沒有執行.

showfull processlist;

看一眼沒什么卵用, 處理那兩個奇怪的wait lock, 其他的都挺正常的.

那么, 看下現在誰占用著鎖? 怎么看呢?

select*from information_schema.innodb_trx;

神奇了, 真有兩個東西在占用鎖.

那kill 了他們看看.

額, 解決了.

最終結論

某個奇怪的程序開了查詢或者奇怪的操作,lock了 table metadata,

之后連接一直都沒有被釋放, 導致以上各種問題.

現在的問題來了, 究竟是哪個程序或者哪個代碼導致的呢?

抱歉, 我現在也還不知道...

理論上可以查,

但是上次去查的時候發現數據庫顯示的host對應機器的端口早就沒東西了,

死無對證ing.

最后建議online DDL前,最好確認一下當前數據庫有沒有類似table metadata lock存在

最好的方案還是主從切換來搞

全文完.

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/534259.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/534259.shtml
英文地址,請注明出處:http://en.pswp.cn/news/534259.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ci框架 亂碼 mysql_mysql容器亂碼問題

在docker-compose.yml文件中定義mysql導入utf-8的萬國碼services:mysql:image:mysql:5.7# command: [--character-set-serverutf8mb4, --collation-serverutf8mb4_unicode_ci]volumes:-./data/docker/mysql:/var/lib/mysql-./mysql/:/docker-entrypoint-initdb.d/-./conf/mys…

mysql分表 查詢 優化_MySQL性能管理及架構(查詢優化、分庫分表)一遍文章搞定...

相關配置參數:slow_query_log # 啟動停止記錄慢查日志,慢查詢日志默認是沒有開啟的可以在配置文件中開啟(on)slow_query_log_file # 指定慢查日志的存儲路徑及文件,日志存儲和數據從存儲應該分開存儲long_query_time # 指定記錄慢查詢日志SQL…

dokcer mysql修改編碼_默認支持utf8編碼的mysql docker鏡像

其他人都是不正確的使用mysql容器鏡像可以很快速的運行mysql,免去了傳統的虛擬機安裝方式的繁瑣配置。但是使用官方的mysql鏡像,你會遇到中文亂碼的問題,原因是官方鏡像的字符集默認值不是utf8。這時候你去google,會找到一些文章&…

mysql臨時表 清空_在數據庫中臨時表什么時候會被清除呢

展開全部我們仍使用 實驗 05 中的環境,略去準備數據的過程。我們仍然使用兩個會話,62616964757a686964616fe59b9ee7ad9431333433646439一個會話 run,用于運行主 SQL;另一個會話 ps,用于進行 performance_schema 的觀察…

locust mysql_locust性能壓測連接mysql,隨機取出班級,綁定學生

from locust import HttpLocust, TaskSet, taskimport pymysqlimport randomclass UserBehavior(TaskSet):def on_start(self):db pymysql.connect("ip地址", "用戶名", "密碼", "數據庫")cursor db.cursor()cursor.execute("S…

mysql無法添加或更新子行_違反完整性約束:1452無法添加或更新子行:

我試圖在我的注釋表中插入值,但出現錯誤。俗話說,我不能添加或更新子行,我也不知道這意味著什么。我的架構看起來像這樣-- ------------------------------ Table structure for comments-- ----------------------------DROP TABLE IF EXIST…

python醫學圖像分割_基于cv2的醫學圖像分割

例如,圖像如下所示:import cv2import numpy as npimg cv2.imread("mdb168.pgm",0)import matplotlib.pyplot as pltplt.imshow(img, cmap"gray")我想刪除圖像中所有的偽影和不必要的部分。在為此,我首先對圖像進行二值化…

python解析response的json_從HTML responseTex解析JSON

因此,我大體上同意,更好的解決方案是確保服務器只返回JSON,不過這是通過客戶端Javascript實現的一種快速方法,如Barmer所建議的那樣,將html解析到DOM,獲取body中的文本childNode并在其上運行JSONParse。在v…

mysql 密碼修改時間_Mysql修改密碼的方法

修改mysql密碼的方法:最簡單的,在Navicat連接后點用戶,找到rootlocalhost直接修改。注意如果裝了xampp,在phpmyadmin配置文件也需要改兩處密碼。下面是在命令行修改的方法。方法1:用mysqladmin----------------親測這個…

svn版本庫瀏覽器_在SVN版本庫瀏覽器中直接編輯文件保存后不會彈..._網絡編輯_幫考網...

原因是沒有實際添加到版本庫中,要添加到版本庫必須執行“Commit”。具體分析如下:SVN錯誤處理svn : Couldn’t perform atomic initialization. 臨時解決辦法:升級sqlite。原本安裝的是 subversion 1.6.16 sqlite 3.6.13,一直報”…

ubuntu下使用python將ppt轉成圖片_Ubuntu下使用Python實現游戲制作中的切分圖片功能...

本文實例講述了Ubuntu下使用Python實現游戲制作中的切分圖片功能。分享給大家供大家參考,具體如下:why拿到一個人物行走的素材,要用TexturePacker打包。TexturePacker打包后,助于游戲加載圖片效率,且比較好管理。目前得…

世上最簡單的mysql_mysql這樣學最簡單|基本操作上

這是數據庫系列的第一篇文章,主要是對mysql的基本操作有一個了解。本系列的教程會先從基礎出發,逐步過渡到優化。一、前提在這里我們不會從如何去安裝數據庫開始講起,而是在安裝完之后從操作數據庫開始,文中所有的代碼均在我自己的…

django ipython shell_django shell ipython 模型層優化(關聯對象) 懶加載和預加載 +長鏈接...

懶加載存在于外鍵和多對多關系不檢索關聯對象的數據調用關聯對象會再次查詢數據庫問題根源查看django orm的數據加載,兩次. 查詢user,查詢menu第一次查詢 用戶表 第二次查詢 app表cmd:python manage.py shell #進入shell調試 或者ipythonfrom authorization.models import Use…

zabbix4.0添加mysql報警_Zabbix4.0系統告警“Zabbix server is not running”

第一步: 查看系統日志,進一步確認原因1 cat /var/log/zabbix/zabbix_server.log問題出現在數據庫。第二步 數據庫確認1 mysql -u root -p #root用戶登陸數據庫如果登錄不成功,就看一下登錄密碼是否正確以及zabbix用戶是否有權限登錄數據庫。1…

影響索引的mysql函數_mysql索引對排序的影響實例分析

本文實例講述了mysql索引對排序的影響。分享給大家供大家參考,具體如下:索引不僅能提高查詢速度,還可以添加排序速度,如果order by 后面的語句用到了索引,那么將會提高排序的速度。測試1、創建測試表:t15表…

php如何對 mysql 中text類型拆分存入一個數組_PHP遞歸實現無限級分類,可選返回字符串和數組...

正 文:在一些復雜的系統中,要求對信息欄目進行無限級的分類,以增強系統的靈活性。那么PHP是如何實現無限級分類的呢?我們在本文中使用遞歸算法并結合mysql數據表實現無限級分類。遞歸,簡單的說就是一段程序代碼的重復調…

python 開發框架 ant_Golang/python語言開發的分布式游戲服務器框架 mqant

軟件介紹mqantmqant 是一款基于 Golang 語言的簡潔,高效,高性能的分布式游戲服務器框架,研發的初衷是要實現一款能支持高并發,高性能,高實時性的游戲服務器框架,也希望 mqant 未來能夠做即時通訊和物聯網方…

java w3c xml_org.w3c.dom(java dom)解析XML文檔

首先來了解點Java DOM 的 API:1.解析器工廠類:DocumentBuilderFactory創建的方法:DocumentBuilderFactory dbf DocumentBuilderFactory.newInstance();2.解析器:DocumentBuilder創建方法:通過解析器工廠類來獲得 DocumentBuilder…

java中小數點位數_Java中限制小數位數問題

在Java中限制小數位數的方法不止一種,下面我們以限制兩位小數為例來說明幾種限制小數位數的方法,其他位數可以以此類推方式一:四舍五入double f 111231.5585;BigDecimal b new BigDecimal(f);double f1 b.setScale(2,…

orange pi java_[中文]Orange Pi家族各大成員一覽表

全部復制來自官網,只修改了錯別字和優化了排版。Orange Pi Zero香橙派Zero是一款開源的單板電腦,新一代的arm開發板,它可以運行Android4.4、Ubuntu、Debian等操作系統。香橙派Zero使用全志H2系統級芯片,同時擁有256MB/512MB DDR3 內存(256MB為…