上下文
有一个包含2列的表格 整数id列 - 主键自动增量 和一个长文本栏。
许多不同的进程和连接会同时从此表中添加,读取和删除行。根本没有DDL语句。只需插入,选择和删除 - 每个操作最多发生一行。即 插入单行,按主键选择单行,然后按主键删除单行。
该表是mysql实例上的唯一表(这是在docker容器中)。
该表的填充行很少,ibd文件的大小为199G。
问题
我经常看到像这样的信号量锁
--Thread 140441749952256 has waited at btr0cur.cc line 545 for 249.00 seconds the semaphore:
S-lock on RW-latch at 0x4fcb428 created in file dict0dict.cc line 2606
a writer (thread id 140441750218496) has reserved it in mode exclusive
number of readers 0, waiters flag 1, lock_word: 0
Last time read locked in file btr0cur.cc line 545
有时锁定保持超过600秒且innodb故意崩溃。
在dict0dict中查看5.6.26 - the function的代码是
Adds an index to the dictionary cache.
@return DB_SUCCESS, DB_TOO_BIG_RECORD, or DB_CORRUPTION */
UNIV_INTERN
dberr_t
dict_index_add_to_cache(
具体而言:
rw_lock_create(index_tree_rw_lock_key, &new_index->lock,
dict_index_is_ibuf(index)
? SYNC_IBUF_INDEX_TREE : SYNC_INDEX_TREE);
问题
造成这些锁的原因是什么?
目前已尝试
由于它是一张忙碌的桌子,我不想优化桌子,但如果是答案 - 我想知道原因。