MySQL Innodb_row_lock_current_waits 是 2^64 - 1

Dan*_*ott 8 mysql innodb mysql-5.6

我有一个 MySQL 5.6 服务器,我们使用 Nagios 对其进行监控。

上周末,它开始抱怨 Innodb_row_lock_current_waits,当前值为 18446744073709551615,是的,超过 10^19!据我了解,这个值是当前行锁的数量。基本上,我不相信,这个数字太大了?

正如 Phil 所指出的,这个数字是 2^64 - 1,所以现在我的问题是:为什么 MySQL 返回这个数字,它一定是某种溢出/错误代码。

Rol*_*DBA 3

MySQL 5.6.14 有一个关于此的开放错误报告

\n\n

Bug #71520 不断增加 Innodb_row_lock_current_waits 值

\n\n

从错误报告中,记下此条目

\n\n
\n

[2015年6月25日 6:58] 谢振业 在我的环境中,我得到了一个奇怪的\n值。(-1 作为 uint64)

\n\n
mysql> show status where Variable_name = \'Innodb_row_lock_current_waits\';\n\n+-------------------------------+----------------------+\n| Variable_name                 | Value                |\n+-------------------------------+----------------------+\n| Innodb_row_lock_current_waits | 18446744073709551615 |\n+-------------------------------+----------------------+\n1 row in set (0.06 sec)\n
Run Code Online (Sandbox Code Playgroud)\n\n

在lock0wait.cc中,srv_stats.n_lock_wait_current_count.inc() srv_stats.n_lock_wait_current_count.dec(); 不是线程安全的。\n srv_stats 是一个全局变量,但它只有一个对 trx 的锁定\n 围绕更改值。

\n
\n\n

你说得对it must be an overflow/error code of some sort

\n\n

截至今年 6 月 14 日,MySQL 5.7.11 中可能存在也可能不存在此问题

\n\n
\n

[6 月 14 日 9:55] A\xcc\x81ngel 或 早上好,

\n\n

我在 MySQL 5.7.11-log 中看到了这一点:

\n\n
mysql> show status like \'%Innodb_row_lock_current%\';\n\n+-------------------------------+-------+\n| Variable_name                 | Value |\n+-------------------------------+-------+\n| Innodb_row_lock_current_waits | 45    |\n+-------------------------------+-------+\n1 row in set (0.00 sec)\n\nmysql> select count(*) from information_schema.innodb_lock_waits;\n\n+----------+\n| count(*) |\n+----------+\n|        0 |\n+----------+\n1 row in set (0.00 sec)\n\nmysql> select version();\n+------------+\n| version()  |\n+------------+\n| 5.7.11-log |\n+------------+\n1 row in set (0.00 sec)\n
Run Code Online (Sandbox Code Playgroud)\n
\n