如果我尝试在架构中的某些特定表上运行查询(甚至与从表限制1中选择id一样容易)(只有其中几个有此问题),我就会陷入困境。 查看进程列表时,状态为“等待表刷新”。 关于如何解锁这些表以便可以查询它们的任何建议?
答案 0 :(得分: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
修复您先前检测到的过程或相关查询。
如果需要杀死检测到的进程,则可以使用先前的完整进程列表找到它们的ID,然后执行以下命令:
KILL <SPID>
GO
EXEC sp_who2
GO
您可以在以下问题/答案/评论中找到更多替代方法和详细信息:
https://serverfault.com/questions/316922/how-to-detect-the-process-and-mysql-query-that-makes-high-load-on-server How do I find out what is hammering my SQL Server?
您还可以使用与SQL有关的分步指南:https://www.wearediagram.com/blog/terminating-sql-server-blocking-processes