"该资源提供了一系列用于SQL Server 2008性能优化的脚本,主要包括检查数据库连接数、分析其他等待类型、监控CPU压力以及找出执行效率最低的查询等关键指标。" 在SQL Server 2008的管理与优化过程中,了解系统状态和性能瓶颈至关重要。以下是对这些脚本的详细解读: 1. 查询某个数据库的连接数: ```sql select count(*) from Master.dbo.SysProcesses where dbid = db_id() ``` 这个脚本用于统计当前正在与指定数据库交互的连接数量。`SysProcesses` 是一个系统视图,包含所有进程的信息,`dbid` 指定数据库ID,`db_id()` 函数返回当前数据库的ID。 2. 前10名其他等待类型: ```sql SELECT TOP 10 * FROM sys.dm_os_wait_stats ORDER BY wait_time_ms DESC SELECT * FROM sys.dm_os_wait_stats WHERE wait_type LIKE 'PAGELATCH%' OR wait_type LIKE 'LAZYWRITER_SLEEP%' ``` `sys.dm_os_wait_stats` 是一个动态管理视图,显示自SQL Server实例启动以来每个等待类型的统计信息。第一个脚本返回等待时间最长的前10个等待类型。第二个脚本则专门筛选出与页面锁定(`PAGELATCH%`)和懒惰写入器睡眠(`LAZYWRITER_SLEEP%`)相关的等待类型,这些都是常见的I/O或资源争用问题。 3. CPU的压力: ```sql SELECT scheduler_id, current_tasks_count, runnable_tasks_count FROM sys.dm_os_schedulers WHERE scheduler_id < 255 ``` `sys.dm_os_schedulers` 视图展示了SQL Server的调度器信息。这个脚本关注的是CPU调度器,检查每个处理器上的当前任务数和可运行任务数,帮助识别CPU资源是否过度使用。 4. 表现最差的前10名使用查询: ```sql SELECT TOP 10 ProcedureName = t.text, ExecutionCount = s.execution_count, ... FROM sys.dm_exec_query_stats s CROSS APPLY sys.dm_exec_sql_text(s.sql_handle) t ORDER BY s.max_physical_reads DESC ``` `sys.dm_exec_query_stats` 和 `sys.dm_exec_sql_text` 配合使用,可以获取执行计划统计信息和查询文本。这个脚本列出执行次数最多、平均执行时间最长、CPU消耗最大、物理读取最多的前10个查询,并按最大物理读取量降序排列,帮助识别性能瓶颈。 5. 等待时间过多的信号等待: ```sql SELECT SUM(signal_wait_time)... ``` 这个片段可能不完整,但通常分析信号等待时间(如`signal_wait_time`)可以帮助识别CPU瓶颈,因为高信号等待意味着线程在等待CPU资源。 通过运行这些脚本,DBA可以诊断SQL Server 2008实例的性能问题,识别可能的瓶颈,从而采取相应的优化措施,比如调整索引、内存分配、查询优化或硬件升级。理解并定期监控这些关键性能指标是确保数据库高效运行的关键步骤。
select count(*) from Master.dbo.SysProcesses where dbid=db_id()
--前10名其他等待类型
SELECT TOP 10 * from sys.dm_os_wait_stats
ORDER BY wait_time_ms DESC
SELECT *FROM sys.dm_os_wait_stats WHERE wait_type like 'PAGELATCH%'
OR wait_type like 'LAZYWRITER_SLEEP%'
--CPU的压力
SELECT scheduler_id, current_tasks_count, runnable_tasks_count
FROM sys.dm_os_schedulers
WHERE scheduler_id < 255
--表现最差的前10名使用查询
SELECT TOP 10 ProcedureName = t.text,
ExecutionCount = s.execution_count,
AvgExecutionTime = isnull ( s.total_elapsed_time / s.execution_count, 0 ),
AvgWorkerTime = s.total_worker_time / s.execution_count,
TotalWorkerTime = s.total_worker_time,
MaxLogicalReads = s.max_logical_reads,
MaxPhysicalReads = s.max_physical_reads,
MaxLogicalWrites = s.max_logical_writes,
CreationDateTime = s.creation_time,
CallsPerSecond = isnull ( s.execution_count / datediff ( second , s.creation_time, getdate ()), 0 )
FROM sys.dm_exec_query_stats s
CROSS APPLY sys.dm_exec_sql_text( s.sql_handle ) t ORDER BY
s.max_physical_reads DESC
--一个信号等待时间过多对资源的等待时间那么你的CPU是目前的一个瓶颈。
SELECT SUM(signal_wait_time_ms) AS total_signal_wait_time_ms总信号等待时间 ,
SUM(wait_time_ms - signal_wait_time_ms) AS resource_wait_time_ms资源的等待时间,
SUM(signal_wait_time_ms) * 1.0 / SUM (wait_time_ms) * 100 AS [signal_wait_percent信号等待%],
SUM(wait_time_ms - signal_wait_time_ms) * 1.0 / SUM (wait_time_ms) * 100 AS [resource_wait_percent资源等待%]
--查看进程所执行的SQL语句
if (select COUNT(*) from master.dbo.sysprocesses) > 500
begin
select text,CROSS APPLY master.sys.dm_exec_sql_text(a.sql_handle) from master.sys.sysprocesses a
end
select text,a.* from master.sys.sysprocesses a
CROSS APPLY master.sys.dm_exec_sql_text(a.sql_handle)
where a.spid = '51'
dbcc inputbuffer(53)
with tb
as
(
select blocking_session_id,
session_id,db_name(database_id) as dbname,text from master.sys.dm_exec_requests a
CROSS APPLY master.sys.dm_exec_sql_text(a.sql_handle)
),
tb1 as
(
select a.,login_time,program_name,client_interface_name,login_name,cpu_time,memory_usage8 as 'memory_usage(KB)',
total_scheduled_time,reads,writes,logical_reads
from tb a inner join master.sys.dm_exec_sessions b
on a.session_id=b.session_id
)
select a.*,connect_time,client_tcp_port,client_net_address from tb1 a inner join master.sys.dm_exec_connections b on a.session_id=b.session_id
--当前进程数
select * from master.dbo.sysprocesses
order by cpu desc
--查看当前活动的进程数
剩余6页未读,继续阅读
- 粉丝: 1
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C++标准程序库:权威指南
- Java解惑:奇数判断误区与改进方法
- C++编程必读:20种设计模式详解与实战
- LM3S8962微控制器数据手册
- 51单片机C语言实战教程:从入门到精通
- Spring3.0权威指南:JavaEE6实战
- Win32多线程程序设计详解
- Lucene2.9.1开发全攻略:从环境配置到索引创建
- 内存虚拟硬盘技术:提升电脑速度的秘密武器
- Java操作数据库:保存与显示图片到数据库及页面
- ISO14001:2004环境管理体系要求详解
- ShopExV4.8二次开发详解
- 企业形象与产品推广一站式网站建设技术方案揭秘
- Shopex二次开发:触发器与控制器重定向技术详解
- FPGA开发实战指南:创新设计与进阶技巧
- ShopExV4.8二次开发入门:解决升级问题与功能扩展