MySQL 慢查询 Lock_time = 年?

MySQL Slow Query Lock_time = years?

我见过很多慢查询日志,但从来没有这样的:

    /usr/sbin/mysqld, Version: 5.1.46-log (SUSE MySQL RPM). started with:
    Tcp port: 3306  Unix socket: /var/run/mysql/mysql.sock
    Time                 Id Command    Argument
    # Time: 160627  9:10:05
    # User@Host: sysop[sysop] @  [127.0.0.1]
    # Query_time: 3.768728  Lock_time: 0.034402 Rows_sent: 734  Rows_examined: 734
    use asterisk;
    SET timestamp=1467033005;
    select PostID, lead_id, list_id from vdlist_temp where Posted is null;
    # Time: 160627 10:35:11
    # User@Host: sysop[sysop] @  [192.168.0.248]
    # Query_time: 35.563521  Lock_time: 0.000054 Rows_sent: 1222017  Rows_examined: 2444034
    SET timestamp=1467038111;
    SELECT `vicidial_list`.`lead_id`, `vicidial_list`.`source_id` FROM  `vicidial_list` ORDER BY `vicidial_list`.`source_id`;
    # User@Host: sysop[sysop] @  [127.0.0.1]
    # Query_time: 0.000095  Lock_time: 18446744073699.406250 Rows_sent: 2  Rows_examined: 1
    SET timestamp=1467038111;
    call spUpdate_VDList_from_temp(0, 0, 1324903);
    # Time: 160627 10:35:12
    # User@Host: sysop[sysop] @  [127.0.0.1]
    # Query_time: 0.000055  Lock_time: 18446744073699.359375 Rows_sent: 0  Rows_examined: 0
    SET timestamp=1467038112;
    call spMoveXDrop(10376163);
    # Time: 160627 11:26:14
    # User@Host: sysop[sysop] @  [127.0.0.1]
    # Query_time: 0.000057  Lock_time: 18446744073697.218750 Rows_sent: 3  Rows_examined: 0
    SET timestamp=1467041174;
    call spUpdate_VDList_from_temp(10795520, 616062301, 1955758);

这似乎表明我有查询等待锁定超过 500,000 年。 (我写了存储过程,我还没那么老!)不知何故,我认为那是不对的。这些都是 MyISAM tables。 (不是我的选择。)我做了一个 mysqldump 并恢复了数据库,重新启动了服务器,但我仍然看到这样的锁定时间。

任何人都可以告诉我在哪里寻找问题的线索吗? (服务器时间都很好。)

编辑:这个 MySql 版本:5.1.46-log 随 OpenSource 项目 Vicidial 一起提供。 Lock_time 显然是一个错误。问题是我正在查看慢速查询日志以追踪用户对慢速 Web 服务器响应的投诉。我希望有人知道是什么触发了这个错误,以帮助我找到实际问题。从日志中可以看出,大多数慢速查询都有正常的 Lock_times。存储过程和 PHP 生成的查询都会生成疯狂的 Lock_time。我看到的唯一共同点是它们都是 select 或从 table vicidial_list 更新。我丢弃、丢弃并重新创建 table 无济于事。

有时时钟似乎 运行 倒转。十多年来,这一直是一个问题。这似乎是无害的。将其视为虚假值而忽略。

请注意,如果 -1 存储在 BIGINT UNSIGNED 中,您将获得与您看到的 18446744073699.406250 非常相似的值。

这些查询不是库存 VICIdial 的一部分,因此我可能会建议对您尝试的那些自定义查询进行一些查询优化 运行。此外,在我们的 VICIbox ISO 安装程序的更新版本中,我们使用的是 MariaDB,还有一个更新的版本,与您使用的 MySQL 的旧版本相比,它有很多错误修复和优化。