我正在参加「掘金·启航计划」
sqlserver性能分析
当数据库服务器出现IO占用较高时,就可以检查一下是否时某些sql语句查询的时候没有走索引,或者时某些表的索引建立得不对
查看执行计划(SHOWPLAN_ALL)
显示查询计划是SQL Server将显示在执行查询的过程中连接表时所采取的每个步骤,以及是否选择及选择了哪个索引,从而帮助用户分析有哪些索引被系统采用。
通常在查询语句中设置SHOWPLAN_ALL选项,可以选择是否让SQL Server显示查询计划。
SET SHOWPLAN_ALL ON ︳OFF 或 SET SHOWPLAN_TEXT ON | OFF
例题:在book数据库中的User表上查询“学号=123“的学生,并分析哪些索引被系统采用。
USE book
GO
SET SHOWPLAN_ALL ON
GO
SELECT * FROM User
WHERE 学号= '123'
GO
SET SHOWPLAN_ALL OFF
GO
查看磁盘使用率(STATISTICS IO)
数据检索语句所花费的磁盘活动量也是用户比较关心的性能之一。通过设置STATISTICS IO选项,可以是SQL Server显示磁盘IO信息。
设置是否显示磁盘IO统计的命令为:
SET STATISTICS IO ON| OFF
USE book
GO
SET STATISTICS IO ON
GO
SELECT * FROM book1
WHERE 编号 = 'YBZT246'
GO
SET STATISTICS IO OFF
GO
查询时间耗时较长的语句
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
死锁处理
select
request_session_id spid,
OBJECT_NAME(resource_associated_entity_id) tableName
from
sys.dm_tran_locks
where
resource_type='OBJECT'
--杀死死锁进程
kill 354
--显示死锁相关信息
exec sp_who2 354