SQLServer性能分析
2023-12-29 15:24:05
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
SET SHOWPLAN_ALL 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
SET STATISTICS IO 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 死锁处理
select
request_session_id spid,
OBJECT_NAME(resource_associated_entity_id) tableName
from
sys.dm_tran_locks
where
resource_type='OBJECT'
--杀死死锁进程
kill ${spid}
--显示死锁相关信息
exec sp_who2 ${spid}
参考资料
文章来源:https://blog.csdn.net/sinat_41883985/article/details/135284169
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!