本系列文章出自《Microsoft SQL Server 2012 Performance Tuning Cookbook》,将会陆续推出译文,但是由于工作需要,没有按顺序贴出来。
本系列文章包含三部分:
1、使用系统统计函数(system statistical functions)来监控系统健康程度。
2、使用系统存储过程来监控SQLServer进程和会话。
3、使用DBCC SQLPERF命令来监控日志空间使用情况。
前言:
SQLServer提供了一些系统函数、系统存储过程和DBCC命令来分析SQLServer性能相关的问题,不过绝大部分这些工具所获得的信息都可以通过DMVs和DMFs来获得。很多人依旧使用本文的工具的原因是因为他们长期使用这些工具来监控SQLServer,已经成为了一个习惯,所以为了向后兼容,微软依旧保留这些工具,但是建议新入门的人尽可能从DMO(DMVs和DMFs的统称)中获取信息。
性能监控有很多工具,SQL Profiler、扩展事件、DMO及本系列文章提供的工具等,来获取信息,对于简单的性能问题,使用某一种即可,但是对于复杂的性能问题,往往需要多个工具协同使用。
下面先介绍使用系统统计函数来监控SQLServer的健康程度。
使用系统统计函数来监控SQLServer
SQLServer提供了一些列非常有用的系统统计函数来监控当前SQLServer的状态。这些函数用于检查和监控服务器的健康状态非常有效。
现在假设一个情况,在你的数据库环境中,一个web应用程序对数据集的操作是一行一行的。为了读取每一行,应用程序会在数据库中往返访问,导致经常需要开启新的连接。为了处理这个问题,需要经常监控SQLServer的连接数,下面将演示如何操作。
准备工作:
SQLServer提供了下面这些有用的系统函数:
@@CONNECTIONS @@TIMETICKS @@CPU_BUSY @@IDLE @@IO_BUSY @@PACK_RECEIVED @@PACK_SENT @@PACKET_ERRORS @@TOTAL_READ @@TOTAL_WRITE @@TOTAL_ERRORS |
本例子中将使用这些函数,并创建脚本来获取信息。
环境准备:
使用SQLServer2008企业版(本机只有企业版)和示例数据库AdventureWorks。
步骤:
1、打开SQLServer(这里使用SQLServer Management Studio后面简称SSMS),然后新开一个查询窗口(ctrl+m)。
2、在窗口上输入一下脚本:
--创建一个表来存储统计信息 IF OBJECT_ID('[dbo].[tbl_ServerHealthStatistics]') IS NULL BEGIN CREATE TABLE [dbo].[tbl_ServerHealthStatistics] ( ID INT IDENTITY(1, 1) , StatDateTime DATETIME DEFAULT GETDATE() , TotalConnections INT , TimeTicks INT , TotalCPUBusyTime INT , TotalCPUIdleTime INT , TotalIOBusyTime INT , TotalReceivedPackets INT , TotalSentPackets INT , TotalErrorsInNetworkPackets INT , TotalPhysicalReadOperations INT , TotalWriteOperations INT , TotalReadWriteErrors INT ) END GO --收集信息到表中 INSERT INTO [dbo].[tbl_ServerHealthStatistics] ( TotalConnections , TimeTicks , TotalCPUBusyTime , TotalCPUIdleTime , TotalIOBusyTime , TotalReceivedPackets , TotalSentPackets , TotalErrorsInNetworkPackets , TotalPhysicalReadOperations , TotalWriteOperations , TotalReadWriteErrors ) SELECT @@CONNECTIONS TotalConnections , @@TIMETICKS TimeTicks , @@CPU_BUSY TotalCPUBusyTime , @@IDLE TotalCPUIdleTime , @@IO_BUSY TotalIOBusyTime , @@PACK_RECEIVED TotalReceivedPackets , @@PACK_SENT TotalSentPackets , @@PACKET_ERRORS TotalErrorsInNetworkPackets , @@TOTAL_READ TotalPhysicalReadOperations , @@TOTAL_WRITE TotalWriteOperations , @@TOTAL_ERRORS TotalReadWriteErrors |