SQLServer性能优化分析--执行计划、耗时SQL排查和死锁处理

1 常用系统存储过程

1.1 查询表结构

EXEC sp_columns 'your_table', @column_name = 'table_column'

1.2 查询表索引

EXEC sp_helpindex 'your_table';

1.3 查询存储过程定义

EXEC sp_helptext 'sp_columns'

1.4 显示表的磁盘空间使用情况

EXEC sp_spaceused 'your_table';

2 查看执行计划

2.1 执行计划查询启用和关闭语法

SET SHOWPLAN_ALL ON | OFF

2.2 案例:在test_db数据库中的User表上查询“学号=123“的学生,并分析哪些索引被系统采用

USE test_db

GO
SET SHOWPLAN_ALL ON
GO

SELECT * FROM User WHERE id = '123'

GO
SET SHOWPLAN_ALL OFF
GO

3 查看磁盘使用率(STATISTICS IO)

3.1 执行计划查询启用和关闭语法

SET STATISTICS IO ON | OFF

3.2 案例

USE book_db

GO
SET STATISTICS IO ON
GO

SELECT * FROM book WHERE id = 'YBZT246'

GO
SET STATISTICS IO OFF
GO

4 查询时间耗时较长的语句

SELECT TOP 20
    total_worker_time/1000 AS [总消耗CPU 时间(ms)],execution_count [运行次数],
    qs.total_worker_time/qs.execution_count/1000 AS [平均消耗CPU 时间(ms)],
    last_execution_time AS [最后一次执行时间],max_worker_time /1000 AS [最大执行时间(ms)],
    SUBSTRING(qt.text,qs.statement_start_offset/2+1, 
        (CASE WHEN qs.statement_end_offset = -1 
        THEN DATALENGTH(qt.text) 
        ELSE qs.statement_end_offset END -qs.statement_start_offset)/2 + 1) 
    AS [使用CPU的语法], qt.text [完整语法],
    dbname=db_name(qt.dbid),
    object_name(qt.objectid,qt.dbid) ObjectName
FROM sys.dm_exec_query_stats qs WITH(nolock)
CROSS apply sys.dm_exec_sql_text(qs.sql_handle) AS qt
WHERE execution_count>1
ORDER BY  total_worker_time DESC

5 死锁处理

5.1 查询死锁进程ID

SELECT
    request_session_id spid,   
    OBJECT_NAME(resource_associated_entity_id) tableName    
FROM sys.dm_tran_locks   
WHERE resource_type='OBJECT' 

5.2 查询死锁进程信息

EXEC sp_who2 ${spid}

5.3 杀死进程

KILL ${spid}

参考资料

  1. https://juejin.cn/post/7145871688217919524
  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值