如果我尝试在模式中的某些特定表上运行查询(甚至像 select id from table limit 1 一样简单)(其中只有少数有这个问题),我会卡住。查看进程列表时,状态为“等待表刷新”。关于如何解锁这些表以便查询它们的任何建议?
小智 1
对于MySQL
确定导致问题的流程。
此命令将有助于检测处于 D 状态等待磁盘 I/O 的进程:
watch "ps -eo pid,user,state,command | awk '\$3 == /D/ { print \$0 }'"
您还可以像这样寻找运行时间长的进程:
SHOW FULL PROCESSLIST\G
修复您之前检测到的进程或相关查询。
如果需要杀死检测到的进程,可以使用之前的完整进程列表找到它们的 id 并执行命令:KILL <pid>;
如果您想修复 SQL 的相同问题:
SELECT TOP 20
qs.sql_handle,
qs.execution_count,
qs.total_worker_time AS Total_CPU,
total_CPU_inSeconds = --Converted from microseconds
qs.total_worker_time/1000000,
average_CPU_inSeconds = --Converted from microseconds
(qs.total_worker_time/1000000) / qs.execution_count,
qs.total_elapsed_time,
total_elapsed_time_inSeconds = --Converted from microseconds
qs.total_elapsed_time/1000000,
st.text,
qp.query_plan
FROM
sys.dm_exec_query_stats AS qs
CROSS APPLY
sys.dm_exec_sql_text(qs.sql_handle) AS st
CROSS APPLY
sys.dm_exec_query_plan (qs.plan_handle) AS qp
ORDER BY
qs.total_worker_time DESC
Run Code Online (Sandbox Code Playgroud)
修复您之前检测到的进程或相关查询。
如果需要杀死检测到的进程,可以使用之前的完整进程列表找到它们的 id 并执行命令:
KILL <SPID>
GO
EXEC sp_who2
GO
Run Code Online (Sandbox Code Playgroud)
您可以在以下来源问题/答案/评论中找到更多替代方案和详细信息:
https://serverfault.com/questions/316922/how-to-detect-the-process-and-mysql-query-that-makes-high-load-on-server 如何找出是什么在影响我的 SQL Server ?
您还可以使用分步 SQL 相关文章:https://www.wearediagram.com/blog/termination-sql-server-blocking-processes
| 归档时间: |
|
| 查看次数: |
10438 次 |
| 最近记录: |