博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL Server 2005/2008 性能监控一
阅读量:6691 次
发布时间:2019-06-25

本文共 5205 字,大约阅读时间需要 17 分钟。

-- 查看性能记数器

 

SELECT * FROM sys.dm_os_performance_counters

 

 -- 执行过的线程所遇到的所有等待(不是当前正在运行的线程, 为自上次重置统计信息或启动服务器以来累积的数据),可分析靠前的几个等待较高的事件。

select * from sys.dm_os_wait_stats order by wait_time_ms desc

该动态视图的细节,请查看帮助文档. 

 

-- 重置该动态视图

DBCC SQLPERF ('sys.dm_os_wait_stats', CLEAR);

GO

 

 

 -- 正在等待某些资源的任务的等待队列

 select * from sys.dm_os_waiting_tasks order by wait_duration_ms desc

 

 

 

 

 

内存使用: 

查看当前由 SQL Server 分配的内存对象(KB): select sum((page_size_in_bytes/1024)*max_pages_allocated_count) from sys.dm_os_memory_objects;
查看系统内存当前信息: select * from sys.dm_os_sys_memory (这个动态视图只在sql 2008中才有)
select
cpu_count,
hyperthread_ratio,
scheduler_count,
physical_memory_in_bytes / 1024 / 1024 as physical_memory_mb,
virtual_memory_in_bytes / 1024 / 1024 as virtual_memory_mb,
bpool_committed * 8 / 1024 as bpool_committed_mb,
bpool_commit_target * 8 / 1024 as bpool_target_mb,
bpool_visible * 8 / 1024 as bpool_visible_mb
from sys.dm_os_sys_info

 

限制SQL Server使用的最小,最大内存(MB):

sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'min server memory', 300;
GO
sp_configure 'max server memory', 850;
GO
RECONFIGURE;
GO

CPU使用情况:

SELECT TOP 50

total_worker_time/execution_count AS '每次执行占用CPU(微秒)',

execution_count       as '执行次数',

total_worker_time     as '总共占用CPU(微秒)',

creation_time         as '创建时间',

last_execution_time   as '最后执行时间',

min_worker_time       as '最低每次占用CPU',

max_worker_time       as '最高每次占用cpu',

total_physical_reads  as '总共io物理读取次数',

total_logical_reads   as '总共逻辑读取次数',

total_logical_writes  as '总共逻辑写次数',

total_elapsed_time    as '完成此计划的执行所占用的总时间(微秒)',

(SELECT SUBSTRING(text,statement_start_offset/2,(CASE WHEN statement_end_offset = -1 then LEN(CONVERT(nvarchar(max), text)) * 2 ELSE statement_end_offset end -statement_start_offset)/2) FROM sys.dm_exec_sql_text(sql_handle)) AS 'SQL内容'

FROM sys.dm_exec_query_stats

ORDER BY 1 DESC

 

 

--下面的查询显示SQL 等待分析和前10 个等待的资源

select top 10 *

from sys.dm_os_wait_stats

where wait_type not in ('CLR_SEMAPHORE','LAZYWRITER_SLEEP','RESOURCE_QUEUE','SLEEP_TASK','SLEEP_SYSTEMTASK','WAITFOR')

order by wait_time_ms desc;

 

SQL Server中的活动会话数:

exec   sp_who   'active'
print @@rowcount

 

SQL Server等待情况

select * from sys.dm_os_waiting_tasks ; --当前等待事件
select * from sys.dm_os_wait_stats  --历史等待次数,是sqlserver启动后的累计值,需使用下一条语句清空
DBCC SQLPERF ('sys.dm_os_wait_stats', CLEAR);

找出进程阻塞:
运行下面的查询可确定阻塞的会话
select blocking_session_id, wait_duration_ms, session_id from
sys.dm_os_waiting_tasks
where blocking_session_id is not null

 

spid 正在阻塞另一个 spid,可在数据库中创建以下存储过程,然后执行该存储过程。此存储过程会报告此阻塞情况。键入 sp_who 可找出 @spid;@spid 是可选参数。

create proc dbo.sp_block (@spid bigint=NULL)
as
select
    t1.resource_type,
    'database'=db_name(resource_database_id),
    'blk object' = t1.resource_associated_entity_id,
    t1.request_mode,
    t1.request_session_id,
    t2.blocking_session_id   
from
    sys.dm_tran_locks as t1,
    sys.dm_os_waiting_tasks as t2
where
    t1.lock_owner_address = t2.resource_address and
    t1.request_session_id = isnull(@spid,t1.request_session_id)

以下是使用此存储过程的示例。

exec sp_block
exec sp_block @spid = 7

select sum((page_size_in_bytes/1024)*max_pages_allocated_count) from sys.dm_os_memory_objects;

select * from sys.dm_os_sys_info;
select * from sys.dm_os_performance_counters

 

 

 

 

A. 获取有关按平均 CPU 时间排在最前面的五个查询的信息
以下示例返回前五个查询的 SQL 语句文本和平均 CPU 时间。

 SELECT TOP 5 total_worker_time/execution_count AS [Avg CPU Time],

    SUBSTRING(st.text, (qs.statement_start_offset/2)+1,
        ((CASE qs.statement_end_offset
          WHEN -1 THEN DATALENGTH(st.text)
         ELSE qs.statement_end_offset
         END - qs.statement_start_offset)/2) + 1) AS statement_text
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st
ORDER BY total_worker_time/execution_count DESC;
 

B. 提供批处理执行统计信息

以下示例返回按批执行的 SQL 查询的文本,并提供有关它们的统计信息。

 

SELECT s2.dbid,
    s1.sql_handle, 
    (SELECT TOP 1 SUBSTRING(s2.text,statement_start_offset / 2+1 ,
      ( (CASE WHEN statement_end_offset = -1
         THEN (LEN(CONVERT(nvarchar(max),s2.text)) * 2)
         ELSE statement_end_offset END)  - statement_start_offset) / 2+1))  AS sql_statement,
    execution_count,
    plan_generation_num,
    last_execution_time,  
    total_worker_time,
    last_worker_time,
    min_worker_time,
    max_worker_time,
    total_physical_reads,
    last_physical_reads,
    min_physical_reads, 
    max_physical_reads, 
    total_logical_writes,
    last_logical_writes,
    min_logical_writes,
    max_logical_writes 
FROM sys.dm_exec_query_stats AS s1
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS s2 
WHERE s2.objectid is null
ORDER BY s1.sql_handle, s1.statement_start_offset, s1.statement_end_offset; 

 

-- 数据库文件性能,文件io性能统计(必须重启sql server服务,才能清零该计数器)

 select DB_NAME(database_id) DB_NAME, file_id,io_stall_read_ms ,num_of_reads

,cast(io_stall_read_ms/(1.0+num_of_reads) as numeric(10,1)) as 'avg_read_stall_ms'

,io_stall_write_ms,num_of_writes

,cast(io_stall_write_ms/(1.0+num_of_writes) as numeric(10,1)) as 'avg_write_stall_ms'

,io_stall_read_ms + io_stall_write_ms as io_stalls

,num_of_reads + num_of_writes as total_io

,cast((io_stall_read_ms+io_stall_write_ms)/(1.0+num_of_reads + num_of_writes) as numeric(10,1)) as 'avg_io_stall_ms'

from sys.dm_io_virtual_file_stats(null,null)

order by avg_io_stall_ms desc;

 

 

-- 查看分区表money,各个分区的行数和边界值.

select partition = $partition.分区函数名(userid)

      ,rows      = count(*)

      ,minval    = min(userid)

      ,maxval    = max(userid)

  from dbo.money with(nolock)

 group by $partition.分区函数名(userid)

 order by partition;

 

 

转载地址:http://emkoo.baihongyu.com/

你可能感兴趣的文章
【二叉树遍历】中序
查看>>
一个完整的类用来读取OpenSSL生成的pem格式的x509证书
查看>>
Delphi调用WebService(通过SoapHeader认证)经验总结
查看>>
2014年最新世界各国面积排名(172个国家)
查看>>
socket编程演示样例(多线程)
查看>>
C++ 初始化与赋值
查看>>
碰到的异常
查看>>
Android对话框-上篇-之系统对话框
查看>>
利用Segue在视图控制器间传值的问题
查看>>
发动机存隐患 现代起亚宣布在美召回16.8万辆车
查看>>
最前线|VIPKID正寻求4-5亿美元新一轮融资,估值达60亿美元
查看>>
文 OR 理?答案都在这里!
查看>>
XML+JSON面试题都在这里
查看>>
教你如何攻克Kotlin中泛型型变的难点(实践篇)
查看>>
2018Android面试经历
查看>>
不受限对抗样本挑战赛介绍
查看>>
浅解前端必须掌握的算法(三):直接插入排序
查看>>
[译] TensorFlow 教程 #06 - CIFAR-10
查看>>
阅读SSH的ERP项目【第二篇】
查看>>
如何有效的避免OOM,温故Java中的引用
查看>>