SQLServer常用语句

查询当前数据库上执行的SQL语句

SELECT  'kill '+CONVERT(varchar(50),session_id),
  [session_id],
  [wait_time] AS '等待时间',
  [request_id],
  [start_time] AS '开始时间',
  [status] AS '状态',
  [command] AS '命令',
  dest.[text] AS 'sql语句', 
  DB_NAME([database_id]) AS '数据库名',
 [blocking_session_id] AS '正在阻塞其他会话的会话ID',
 [wait_type] AS '等待资源类型',
 [wait_resource] AS '等待的资源',
 [reads] AS '物理读次数',
 [writes] AS '写次数',
 [logical_reads] AS '逻辑读次数',
 [row_count] AS '返回结果行数'
 FROM sys.[dm_exec_requests] AS der 
 CROSS APPLY 
 sys.[dm_exec_sql_text](der.[sql_handle]) AS dest 
 WHERE [session_id]>50 
 ORDER BY [cpu_time] DESC



SELECT *
FROM   sys.[sysprocesses] AS syspro
       CROSS apply sys.Dm_exec_sql_text(syspro.sql_handle) AS t
WHERE  status != 'sleeping'
ORDER  BY physical_io DESC; 

 

--查看AlwaysON同步延迟时间
SELECT Datediff(s, last_redone_time, Getdate()) DelayTimeS
FROM   ( ( sys.availability_groups AS ag
           JOIN sys.availability_replicas AS ar
             ON ag.group_id = ar.group_id )
         JOIN sys.dm_hadr_availability_replica_states AS ar_state
           ON ar.replica_id = ar_state.replica_id )
       JOIN sys.dm_hadr_database_replica_states dr_state
         ON ag.group_id = dr_state.group_id
            AND dr_state.replica_id = ar_state.replica_id

 

--如何查询最近执行的SQL的ISOLATION LEVEL:
SELECT CASE transaction_isolation_level 
WHEN 0 THEN 'Unspecified' 
WHEN 1 THEN 'Read Uncommitted' 
WHEN 2 THEN 'Read Committed' 
WHEN 3 THEN 'Repeatable Read' 
WHEN 4 THEN 'Serializable' 
WHEN 5 THEN 'Snapshot' END AS TRANSACTION_ISOLATION_LEVEL ,session_id, login_time,login_name,logical_reads,[status]
,[text_size]
FROM sys.dm_exec_sessions 
where session_id = 'SPID'
order by login_time desc

 

--查询当前活动事务
select dbt.database_id,
       DB_NAME(dbt.database_id) '数据库名',
       dbt.transaction_id,
       at.name,
       at.transaction_begin_time,
       
       case at.transaction_type         --事务类型   
           when 1 then N'读/写事务'  
           when 2 then N'只读事务'  
           when 3 then N'系统事务'  
           when 4 then N'分布式事务'  
       end N'transaction类型',  
         
       case at.transaction_state  
           when 0 then N'事务尚未完全初始化'  
           when 1 then N'事务已初始化但尚未启动'  
           when 2 then N'事务处于活动状态'  
           when 3 then N'事务已结束。该状态用于只读事务'  
           when 4 then N'已对分布式事务启动提交进程'  
           when 5 then N'事务处于准备就绪状态且等待解析'  
           when 6 then N'事务已提交'  
           when 7 then N'事务正在被回滚'  
           when 8 then N'事务已回滚'  
       end  'transaction状态',
       
       st.session_id,  
       tt.text as '最近执行的语句',
       
       es.program_name
       
from sys.dm_tran_database_transactions dbt
left join sys.dm_tran_active_transactions at
        on dbt.transaction_id = at.transaction_id
left join sys.dm_tran_session_transactions st
        on at.transaction_id = st.transaction_id
 
left join sys.dm_exec_sessions es
       on st.session_id = es.session_id
left join sys.dm_exec_connections ec
       on es.session_id = ec.session_id
outer apply sys.dm_exec_sql_text(ec.most_recent_sql_handle) tt
 
where st.session_id >= 50
      and dbt.database_id <> 32767

 查询历史执行JOB

SELECT top 50 j.name AS 'JobName' ,
          run_date ,
          run_time,
          run_duration
  FROM    msdb.dbo.sysjobs j
          INNER JOIN msdb.dbo.sysjobhistory h ON j.job_id = h.job_id
  WHERE   j.enabled = 1  --Only Enabled Jobs
        and j.name='JOB名称'
        AND H.run_date='20211130'
  ORDER BY 
          run_date desc ,
          run_time DESC

 查询表大小

SELECT
    OBJECT_NAME(object_id) AS TableName,
    SUM(row_count) AS RowCountaa,
    SUM(reserved_page_count) * 8 AS TotalSpaceKB,
    SUM(used_page_count) * 8 AS UsedSpaceKB,
    SUM(reserved_page_count - used_page_count) * 8 AS UnusedSpaceKB
FROM
    sys.dm_db_partition_stats
GROUP BY
    object_id

ORDER BY SUM(reserved_page_count) desc

 

posted @ 2021-08-23 19:09  泥称  阅读(233)  评论(0编辑  收藏  举报