0


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 执行计划查询启用和关闭语法

SETSHOWPLAN_ALLON|OFF

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

USE test_db

GOSETSHOWPLAN_ALLONGOSELECT*FROM User WHERE id ='123'GOSETSHOWPLAN_ALLOFFGO```javascript
SETSHOWPLAN_ALLON|OFF

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

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

SETSTATISTICSIOON|OFF

3.2 案例

USE book_db

GOSETSTATISTICSIOONGOSELECT*FROM book WHERE id ='YBZT246'GOSETSTATISTICSIOOFFGO

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

SELECTTOP20
    total_worker_time/1000AS[总消耗CPU时间(ms)],execution_count [运行次数],
    qs.total_worker_time/qs.execution_count/1000AS[平均消耗CPU时间(ms)],
    last_execution_time AS[最后一次执行时间],max_worker_time /1000AS[最大执行时间(ms)],SUBSTRING(qt.text,qs.statement_start_offset/2+1,(CASEWHEN qs.statement_end_offset =-1THENDATALENGTH(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>1ORDERBY  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}

本文转载自: https://blog.csdn.net/weixin_42164754/article/details/136946715
版权归原作者 凯酱 所有, 如有侵权,请联系我们删除。

“SQLServer性能优化分析--执行计划、耗时SQL排查和死锁处理”的评论:

还没有评论