在进程列表中显示“等待表刷新”

时间:2018-06-20 13:28:03

标签: mysql

如果我尝试在架构中的某些特定表上运行查询(甚至与从表限制1中选择id一样容易)(只有其中几个有此问题),我就会陷入困境。 查看进程列表时,状态为“等待表刷新”。 关于如何解锁这些表以便可以查询它们的任何建议?

1 个答案:

答案 0 :(得分:1)

对于MySQL

  1. 确定引起问题的过程。

    • 此命令将有助于检测在D状态下等待磁盘I / O的进程:

      watch "ps -eo pid,user,state,command | awk '\$3 == /D/ { print \$0 }'"

    • 您也可以像这样寻找运行时间长的进程:

      SHOW FULL PROCESSLIST\G

  2. 修复您先前检测到的过程或相关查询。

  3. 如果需要杀死检测到的进程,则可以使用先前的完整进程列表找到它们的ID,然后执行以下命令:KILL <pid>;

如果您要解决针对SQL的相同问题

  1. 查找过程正在引起问题。 此查询将列出它们:
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
  1. 修复您先前检测到的过程或相关查询。

  2. 如果需要杀死检测到的进程,则可以使用先前的完整进程列表找到它们的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