我见过很多慢查询日志,但从来没有这样的:
/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 表。(不是我的选择。)我做了一个 mysqldump 并恢复了数据库,重新启动了服务器,但我仍然看到这样的锁定时间。
谁能给我一个线索在哪里寻找问题?(服务器时间都很好。)
编辑:这个 MySql 版本:5.1.46-log 附带一个开源项目 Vicidial。很明显 Lock_time 是一个错误。问题是我正在查看慢查询日志以追踪用户对 Web 服务器响应慢的投诉。我希望有人会知道是什么触发了这个错误,以帮助我找到实际问题。正如您从日志中看到的,大多数慢查询都有正常的 Lock_times。存储过程和 PHP 生成的查询都会生成疯狂的 Lock_time。我看到的唯一共同点是它们都从表 vicidial_list 中选择或更新。我转储、删除并重新创建了该表,但无济于事。