MySQL执行drop表卡住,如何排查BufferPool LRU链表扫描压力问题?
- 内容介绍
- 文章标签
- 相关推荐
本文共计732个文字,预计阅读时间需要3分钟。
MySQL 5.6 的 InnoDB 引擎在执行 `DROP TABLE` 命令时,不会立即刷新脏页,而是首先从每个 Buffer Pool 实例的 LRU 和 flush list 中移除对应的页。这个过程需要遍历整个 LRU 链表(即 old sublist),如果 Buffer Pool 设置过大(例如超过 16GB)或表已被大量访问导致页面散落在各个位置,遍历时间可能会变长——这会导致 `DROP` 操作卡住,表现为卡在 `Waiting for table metadata lock` 或 `dropping table` 状态,同时 CPU 使用率不高,I/O 等待明显。
本文共计732个文字,预计阅读时间需要3分钟。
MySQL 5.6 的 InnoDB 引擎在执行 `DROP TABLE` 命令时,不会立即刷新脏页,而是首先从每个 Buffer Pool 实例的 LRU 和 flush list 中移除对应的页。这个过程需要遍历整个 LRU 链表(即 old sublist),如果 Buffer Pool 设置过大(例如超过 16GB)或表已被大量访问导致页面散落在各个位置,遍历时间可能会变长——这会导致 `DROP` 操作卡住,表现为卡在 `Waiting for table metadata lock` 或 `dropping table` 状态,同时 CPU 使用率不高,I/O 等待明显。

