SQLS各种性能统计(收藏)

CPU负载统计的演示代码
 
--运行以下脚本,复制输出结果,然后启动多个运行时间较长的脚本,再次运行以下脚本,复制输出结果
--比较输出结果间的差异,主要关注runnable_tasks_count

SELECT scheduler_id, cpu_id, parent_node_id, current_tasks_count, runnable_tasks_count, current_workers_count,   active_workers_count, work_queue_count
FROM sys.dm_os_schedulers

 

--统计查询优化器的相关信息
SELECT * FROM sys.dm_exec_query_optimizer_info WHERE counter = 'optimizations' OR counter = 'elapsed time'

 

--查找Query Plan的常规统计信息
SELECT plan_generation_num, creation_time, last_execution_time, execution_count,
 total_worker_time, total_physical_reads, total_logical_reads, total_logical_writes, total_elapsed_time,
 SUBSTRING(st.text, (qs.statement_start_offset/2) + 1, 

                       ((CASE 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

 

--查找Query Plan的CPU相关统计  总计耗费CPU时间最长的查询计划
SELECT TOP 5 total_worker_time, last_worker_time,
 max_worker_time, min_worker_time,
    SUBSTRING(st.text, (qs.statement_start_offset/2) + 1,
    ((CASE 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 DESC


--单次执行耗费CPU时间最长的查询计划
SELECT TOP 5 total_worker_time, last_worker_time,
 max_worker_time, min_worker_time,
    SUBSTRING(st.text, (qs.statement_start_offset/2) + 1,
    ((CASE 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 max_worker_time DESC

--利用次数最多的查询计划
SELECT TOP 5 creation_time, last_execution_time,
    execution_count,
    SUBSTRING(st.text, (qs.statement_start_offset/2) + 1,
    ((CASE 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 execution_count DESC
GO



内存负载统计的演示代码
 
--显示服务器的内存配置
--开启高级配置

sp_configure 'show advanced options', '1'
RECONFIGURE
--显示各项内存相关运行值
sp_configure 'awe_enabled'
sp_configure 'min server memory'
sp_configure 'max server memory'
sp_configure 'min memory per query'
sp_configure 'query wait'
--关闭高级配置
sp_configure 'show advanced options', '0'
RECONFIGURE

--显示系统相关信息
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的内存分配情况
DBCC MEMORYSTATUS

--显示各种对象占用内存的数量
SELECT type, SUM (pages_allocated_count * page_size_in_bytes) as 'Bytes Used'
FROM sys.dm_os_memory_objects
GROUP BY type
ORDER BY 2 DESC;
GO

--由多页分配器分配的内存总量
select sum(multi_pages_kb) / 1024.00 AS multi_pages_mb
from sys.dm_os_memory_clerks

--统计各种类型Memory_Clerk由多页分配器分配的内存总量
select type, sum(multi_pages_kb) / 1024.00 AS multi_pages_mb
from sys.dm_os_memory_clerks 
where multi_pages_kb != 0 
group by type
order by 2 desc

--如果rounds_count和remove_rounds_count不断增长,代表内存面临压力
select *
from 
    sys.dm_os_memory_cache_clock_hands
where 
    rounds_count > 0
    and removed_all_rounds_count > 0

--各种由于I/O Latch申请而导致等待的信息
select wait_type, waiting_tasks_count, wait_time_ms,
signal_wait_time_ms, wait_time_ms / waiting_tasks_count AS 'avg_task_wait_time'
from sys.dm_os_wait_stats 
where wait_type like 'PAGEIOLATCH%'  and waiting_tasks_count > 0
order by wait_type

--查看有挂起IO的数据库或文件
--运行Tough Taks 01.sql和Tough Tasks 02.sql

select database_id, file_id, io_stall, scheduler_address
from sys.dm_io_virtual_file_stats(NULL, NULL) t1,
     sys.dm_io_pending_io_requests as t2
where t1.file_handle = t2.io_handle

--寻找IO最频繁的5个查询
--其中的Query Plan可以到处为sqlplan文件
--USE AdventureWorksDW
--SELECT * INOT dbo.TestProduct FROM dbo.DimProduct
--DELETE FROM dbo.TestProduct

select top 5 (total_logical_reads/execution_count) as avg_logical_reads,
                   (total_logical_writes/execution_count) as avg_logical_writes,
      (total_physical_reads/execution_count) as avg_physical_reads,
      Execution_count, statement_start_offset, p.query_plan, q.text
from sys.dm_exec_query_stats
 cross apply sys.dm_exec_query_plan(plan_handle) p
 cross apply sys.dm_exec_sql_text(plan_handle) as q
order by (total_logical_reads + total_logical_writes)/execution_count Desc

--Query Option对执行计划及系统负载的影响
SET STATISTICS IO ON
SET STATISTICS TIME ON

--注意服务器统计输出
DBCC DROPCLEANBUFFERS           --清除相关缓存
DBCC FREESYSTEMCACHE ('ALL')   --清除相关缓存
SELECT c.Title, c.FirstName, c.MiddleName, c.LastName,
 c.Suffix, e.Title AS JobTitle
FROM HumanResources.Employee AS e INNER JOIN
 Person.Contact AS c ON c.ContactID = e.ContactID

--注意服务器统计输出
DBCC DROPCLEANBUFFERS           --清除相关缓存
DBCC FREESYSTEMCACHE ('ALL')   --清除相关缓存
SELECT c.Title, c.FirstName, c.MiddleName, c.LastName,
 c.Suffix, e.Title AS JobTitle
FROM HumanResources.Employee AS e INNER JOIN
 Person.Contact AS c ON c.ContactID = e.ContactID
 OPTION (MERGE JOIN)



Tempdb负载统计的演示代码

--统计Tempdb各部分的空间消耗
select
    sum(user_object_reserved_page_count)*8 as user_objects_kb,
    sum(internal_object_reserved_page_count)*8 as internal_objects_kb,
    sum(version_store_reserved_page_count)*8  as version_store_kb,
    sum(unallocated_extent_page_count)*8 as freespace_kb
from sys.dm_db_file_space_usage
where database_id = 2

--统计Tempdb中用户对象消耗的空间
--由于演示系统空闲,在另一会话中创建一个全局临时表

use tempdb
declare userobj_cursor cursor for 
select 
     sys.schemas.name + '.' + sys.objects.name 
from sys.objects, sys.schemas
where object_id > 100 and 
      type_desc = 'USER_TABLE'and 
      sys.objects.schema_id = sys.schemas.schema_id
go
 
open userobj_cursor
go
 
declare @name varchar(256)
fetch userobj_cursor into @name
while (@@FETCH_STATUS = 0) 
begin
    exec sp_spaceused @objname = @name
        fetch userobj_cursor into @name    
end
close userobj_cursor
deallocate userobj_cursor

--统计每个会话创建的内部对象
select 
    session_id, 
    internal_objects_alloc_page_count, 
    internal_objects_dealloc_page_count
from sys.dm_db_session_space_usage
order by internal_objects_alloc_page_count DESC


----找到Blocking Process------------------------------------------------------

SELECT  s.spid, BlockingSPID = s.blocked, DatabaseName = DB_NAME(s.dbid),
        s.program_name, s.loginame, ObjectName = OBJECT_NAME(objectid,s.dbid), 
        Definition = CAST(text AS VARCHAR(MAX))
 INTO   #Processes
 FROM   sys.sysprocesses s  CROSS APPLY sys.dm_exec_sql_text (sql_handle)
 WHERE  s.spid > 50



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
? 第四章 T-SQL编程 ? ? 1、TSQL语句的分类 ? 2、TSQL语句实战1 ? 3、TSQL语句实战2 ? 4、TSQL语句实战3 ? 5、TSQL语句实战4 ? 6、TSQL语句实战5 ? 7、TSQL语句实战6 ? 8、TSQL语句实战7 ? 9、TSQL语句实战8 ? 10、TSQL语句实战9 ? 11、TSQL语句实战10 ? 12、TSQL语句实战11 ? 13、TSQL语句实战12 ? 14、TSQL语句实战13 ? 15、TSQL语句实战14 ? 16、TSQL语句实战15 ? 17、TSQL语句实战16 ? 18、TSQL语句实战17 ? 19、TSQL语句实战18 ? 20、TSQL语句实战19 ? 21、TSQL语句实战20 ? ? 第五章 函数 ? ? 1、函数简介 ? 2、函数(1) ? 3、函数(2) ? 4、函数(3) ? 5、函数(4) ? 6、函数(5) ? 7、函数(6) ? 8、函数(7) ? 9、函数(8) ? 10、函数(9) ? 11、函数(10) ? 12、函数(11) ? 13、函数(12) ? 14、函数(13) ? 15、函数(14) ? 16、函数(15) ? 17、函数(16) ? 18、函数(17) ? 19、函数(18) ? 20、函数(19) ? 21、函数(20) ? 22、函数(21) ? 23、函数(22) ? ? ? 第六章 存储过程 ? ? 1、存储过程(1) ? 2、存储过程(2) ? 3、存储过程(3) ? 4、存储过程(4) ? 5、存储过程(5) ? 6、存储过程(6) ? 7、存储过程(7) ? 8、存储过程(8) ? 9、存储过程(9) ? 10、存储过程(10) ? 11、存储过程(11) ? 12、存储过程(12) ? 13、存储过程(13) ? 14、存储过程(14) ? 15、存储过程(15) ? 16、存储过程(16) ? 17、存储过程(17) ? 18、存储过程(18) ? 19、存储过程(19) ? 20、存储过程(20) ? 21、存储过程(21) ? ? 第七章 游标 ? ? 1、游标1 ? 2、游标2 ? 3、游标3 ? 4、游标4 ? 5、游标5 ? 6、游标6 ? 7、游标7 ? 8、游标8 ? 9、游标9
第一章 SQL Server基础 ? ? 1、SQL 2008视频教程—SQL数据库连接 ? 2、SQL 2008视频教程-系统数据库 ? 3、SQL 2008视频教程-数据库创建 ? 4、SQL 2008视频教程-数据库创建2 ? 5、SQL 视频教程-对数据库属性的更改 ? 6、SQL 2008视频教程-分离数据库 ? 7、SQL 2008视频教程-删除数据库 ? 8、SQL 2008视频教程-常用数据类型 ? 9、SQL 2008视频教程-常用数据类型2 ? 10、标识种子和标识自增量 ? 11、SQL 2008视频教程-字段默认值 ? 12、利用T-SQL语句创建数据库 ? 13、利用T-SQL语句更改数据库名称 ? 14、利用T-SQL语句创建数据库 ? ? ? 第二章T-SQL语句 ? ? 1、SQL 2008视频教程-数据库表常用术语 ? 2、SQL视频教程-数据库表常用术语2 ? 3、SQL视频教程-T-SQL创建数据库详解 ? 4、SQL视频教程-T-SQL创建数据库详解2 ? 5、SQL视频-T-SQL语言与SQL语言的区别 ? 6、SQL 2008视频教程-T-SQL语句1 ? 7、SQL 2008视频教程-T-SQL语句2 ? 8、SQL 2008视频教程-T-SQL语句3 ? 9、SQL 2008视频教程-T-SQL语句4 ? 10、T-SQL语句5 ? 11、SQL 2008视频教程-T-SQL语句6 ? 12、SQL 2008视频教程-T-SQL语句7 ? 13、SQL 2008视频教程-T-SQL语句8 ? 14、利用T-SQL语句修改表 ? 15、利用T-SQL语句插入记录 ? 16、设置字段是否允许Null ? 17、利用Update语句更新表中记录 ? 18、利用Update语句更新表中记录2 ? 18、利用Update语句更新表中记录3 ? 19、利用Update语句更新表中记录4 ? 20、利用T_SQL语句删除记录 ? 21、Select查询语句1 ? 22、Select查询语句2 ? 23、Select查询语句3 ? 24、Select查询语句—逻辑或运算符 ? 25、Select查询语句—不等于运算符 ? 26、 Select查询语句—不等于运算符2 ? 27、 Select查询语句—不等于运算符3 ? 28、 T-SQL语句中的运算符优先级 ? 29、 Select查询语句1 ? 30、 Select查询语句2 ? 31、 Select查询语句4 ? 32、 Select查询语句5 ? 33、 Select查询语句6 ? 34、 Select查询语句7 ? 35、 Select查询语句-嵌套查询1 ? 36、 用T-SQL创建表及其主键 ? 38、多表嵌套查询 ? 39、多表嵌套查询2 ? 40、对结果进行排序 ? 41、 统计函数SUM ? 42、 统计函数AVG ? 43、 统计函数AVG2 ? 44、 定义标识 ? 45、 Like运算符 ? 46、函数的综合运用 ? 47、分组汇总 ? 48、Group分组 ? 49、Group分组2 ? 50、对分组设定条件 ? 51、谓词查询 exists ? 52、谓词查询 any ? 53、查询指定数量的记录 ? 54、将查询结果存到另一个表中 ? 55、更新表中记录 ? 56、联合查询 ? 57、从多个表中查询记录 ? 58、按指定条件查询多个表中的记录 ? 59、超联接查询 ? 60、左联接和右联接 ? ? 第三章 约束、索引和视图 ? ? 1、简介 ? 2、Check约束 ? 3、主键约束 ? 4、创建唯一键 ? 5、索引1 ? 6、索引2 ? 7、索引3 ? 8、索引4 ? 9、索引5 ? 10、如何修改索引名称 ? 11、对索引的删除 ? 12、什么是视图及视图优缺点 ? 13、设计模式下创建视图 ? 14、视图的修改 ? 15、视图的修改2 ? 16、利用T-SQL语句创建视图 ? 17、利用T-SQL语句修改视图
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值