SQL Server进程管理专题

SQL Server属于单进程多线程,我们这里说的“进程”实际上指的是线程。

Kill掉一个库所有会话:

select 'kill '+ cast(spid as varchar(10)) +';' from sysprocesses where dbid=db_id('数据库名');

再将查询出的语句执行即可。

查看近段时间SQLSERVER执行了什么语句:

 SELECT     TOP 1000 QS.creation_time, SUBSTRING(ST.text, (QS.statement_start_offset / 2) + 1,
                      ((CASE QS.statement_end_offset WHEN - 1 THEN DATALENGTH(st.text) ELSE QS.statement_end_offset END - QS.statement_start_offset) / 2) + 1)
                      AS statement_text, ST.text, QS.total_worker_time, QS.last_worker_time, QS.max_worker_time, QS.min_worker_time
FROM         sys.dm_exec_query_stats QS CROSS APPLY sys.dm_exec_sql_text(QS.sql_handle) ST
WHERE   1=1   
--and QS.creation_time BETWEEN '2017-09-09 10:00:00' AND '2017-09-11 18:00:00' AND ST.text LIKE '%%'
ORDER BY QS.creation_time DESC

显示最近的 100 个执行记录,按最后执行时间的降序排列:

SELECT TOP 100 *
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st
ORDER BY last_execution_time DESC;

最近执行的 100 个查询,并包括执行时间、所在的数据库名称、对象名称和实际执行的 SQL 语句

SELECT TOP 100
    qs.last_execution_time,
    DB_NAME(st.dbid) AS database_name,
    OBJECT_NAME(st.objectid, st.dbid) AS object_name,
    SUBSTRING(st.text, (qs.statement_start_offset/2)+1,
        ((CASE qs.statement_end_offset
          WHEN -1 THEN DATALENGTH(st.text)
          ELSE qs.statement_end_offset
         END - qs.statement_start_offset)/2)+1) AS executed_sql
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st
ORDER BY qs.last_execution_time DESC;

(更新中)

你可能感兴趣的:(SQL Server进程管理专题)