简单记录遇到的问题
一、问题如下-----+----------------+----------------------------------------------------------------------------------------------------+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的方式插入到新的索引中,并且为循环插入,每次插入一行数据。
参考