我在 MS SQL Server 2008 上每 5 分钟运行一次任务,该任务链接到网络中另一台服务器上的 MySQL。它大概有 80% 的时间可以工作。剩余的 20% 会导致 MySQL 挂起,因此service mysql restart
需要 a。
以下是每 5 分钟运行一次的查询的一些信息:
- ~32,000 行和 25 列
- 引擎= MyISAM
- 查询(从 SQL Server 2008 运行)=
INSERT INTO MYSQLINTRANET...segments_temp SELECT * FROM ProjectTracking.dbo.segments;
- 行故障似乎是随机的
- 错误日志为空
是否有可能ProjectTracking.dbo.segments
被锁定而导致挂起?
错误日志中没有报告任何错误,我该怎么办?
答案1
我本来想把这个留作注释,但我想引用一些代码,所以我在这里引用。我首先尝试追踪锁发生的位置。下次你遇到锁时,收集一些数据。在 MS SQL 服务器上运行以下命令:
USE master
select text,wait_time,blocking_session_id AS "Block",
percent_complete, * from sys.dm_exec_requests
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS s2 order by start_time asc
分析返回结果并查看状态。是否被阻塞?是否正在等待远程返回数据?
在 mySQL 服务器上运行:
show full processlist;
也:
SHOW ENGINE INNODB STATUS
第一个会列出正在运行的进程,你的查询状态如何?它说正在等待什么。第二个会帮助你发现是否存在死锁问题。