所在的位置: mysql >> mysql优势 >> MySQLBUGonlineDDL堵

MySQLBUGonlineDDL堵

设计求职招聘QQ群 http://www.cgia.cn/news/roll/1587041.html

简单记录遇到的问题

一、问题如下

-----+----------------+----------------------------------------------------------------------------------------------------+TIMESTATEINFO-----+----------------+----------------------------------------------------------------------------------------------------+1updateinsertintotest(keyword,value)values()1updateinsertintotest(keyword,value)values()2updateinsertintotest(keyword,value)values()3updateinsertintotest(keyword,value)values()6updateinsertintotest(keyword,value)values()7updateinsertintotest(keyword,value)values()7updateinsertintotest(keyword,value)values()7updateinsertintotest(keyword,value)values()7updateinsertintotest(keyword,value)values()8updateinsertintotest(keyword,value)values()9updateinsertintotest(keyword,value)values()10updateinsertintotest(keyword,value)values()10updateinsertintotest(keyword,value)values()11updateinsertintotest(keyword,value)values()78alteringtableALTERTABLEtestADDINDEX`idx_ts`(`ts`)USINGBTREE-----+----------------+----------------------------------------------------------------------------------------------------+

图中的敏感数据已经处理掉了,其中rwlock部分堵塞如下

--Threadhaswaitedatrow0ins.cclinefor4.00secondsthesemaphore:S-lockonRW-latchat0x7f08b70fcreatedinfiledict0dict.cclineawriter(threadid)hasreserveditinmodeexclusivenumberofreaders0,waitersflag1,lock_word:ffffffffdfffffffLasttimereadlockedinfilerow0ins.cclineLasttimewritelockedinfile/export/zhg/mysql-5.7.24/storage/innobase/btr/btr0bulk.ccline53

反正都是这个玩意。版本5.7.24。

二、大概说明

大概的看了一下,实际上这里涉及到

dict0dict.ccline:index-lock作为索引树得并发并控制,比如悲观插入照成索引分裂的时候,需要涉及到这个锁。row0ins.ccline:进行insert的需要对onlineDDL的index进行日志记录,需要持有上面的index-lock(S/SX)btr0bulk.ccline53:这里涉及到讲tuple以bulk的方式插入到新的索引中,这里需要持有index-lock(X)

在以往的文章中大概知道onlineDDL的时候会讲排序好的数据通过bulk的方式插入到新的索引中,并且为循环插入,每次插入一行数据。

参考


转载请注明:http://www.aierlanlan.com/grrz/434.html