热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

第三章——使用系统函数、存储过程和DBCCSQLPE

原文: 第三章——使用系统函数、存储过程和DBCC SQLPERF命令来监控SQLServer(1) 忘了说明:本系列文章出自《Mi


原文:

第三章——使用系统函数、存储过程和DBCC SQLPERF命令来监控SQLServer(1)

忘了说明:本系列文章出自《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



 


3、运行下面脚本,显示收集的服务器信息:



 

WITH cteStatistics
AS ( SELECT *
FROM [dbo].[tbl_ServerHealthStatistics]
)
SELECT Cur.TotalConnections AS CurrentConnections ,
Cur.StatDateTime AS CurrentStatDateTime ,
Prev.TotalConnections AS PreviousConnections ,
Prev.StatDateTime AS Previous_StatDateTime ,
Cur.TotalConnections - Prev.TotalConnections AS ConnectionsIncreamentedBy ,
DATEDIFF(millisecond, Prev.StatDateTime, Cur.StatDateTime) AS ConnectionsIncreamentedIn
FROM cteStatistics AS Cur
LEFT JOIN cteStatistics AS Prev ON Cur.ID = Prev.ID + 1



 


分析:


        上面例子中,先创建一个表

[dbo]


.


[tbl_ServerHealthStatistics]

,在创建之前,使用

OBJECT_ID()

函数来检查是否存在该表,如果存在则不创建,这是一个良好的编程习惯,建议在创建表(无论是实体表还是临时表)时使用。可以确保脚本可重复执行。



 


        步骤

2

的脚本中,通过

INSERT..SELECT

语句来收集数据并插入到表中。



 


        步骤

3

中,由于需要对比两行之间的数据,所以使用

CTE



2005

之前可以使用临时表)来暂时存放数据然后与目前数据做对比。



 


 


扩展信息:

 


下面是这些系统统计函数的简介,这些函数均返回从

SQLServer

启动以来的汇总值。



 



       


@@Connections:这个函数返回SQLServer自启动以来,尝试连接到SQLServer的连接数,是一个数值型结果。不管这些连接是否成功,均会记录在里面。




 


    @@MAX_CONNECTIONS:返回允许同时连接的最大连接数,这个数与使用sp_configure 来配置的Max Connections值相同。也和SQLServer的版本和应用程序、硬件的限制有关。



 


    @@TIMETICKS:返回一个微妙级别的计数点。这个值依赖于操作系统的时间系统。通常为31.50毫秒。

 


      

@@CPU_BUSY :返回自SQLServer服务启动以来的工作时间,结果为所有CPU事件的累计,所以可能会超出实际时间,乘以@@TIMETICKS即可换成为妙。注意:如果@@CPU_BUSY 或 @@IO_BUSY 中返回的时间超过累积的 CPU 时间约 49 天,则您将收到算术溢出警告。在这种情况下,@@CPU_BUSY、@@IO_BUSY 和 @@IDLE 变量值并不精确。




 


    @@IDLE:表示SQLServer空闲时的CPU时间。在多处理器情况下,返回值为所有CPU的汇总。



 


    @@IO_BUSY:返回SQLServer自启动以来执行输入输出操作的CPU总数。



 


    @@PACK_RECEIVED:返回SQLServer接收到的网络包总数。



 


    @@PACK_SENT:返回SQLServer发送的网络报总数。



 


    @@PACKET_ERRORS:返回SQLServer所遇到过的网络包错误的总数。



 


    @@TOTAL_READ:返回SQLServer所执行过的所有物理读操作总数。



 


    @@TOTAL_WRITE:返回所有物理写操作的总数。



 


    @@TOTAL_ERRORS:返回SQLServer遇到过的所有读写操作的错误总数。


 



注意



@@CPU_BUSY



@@IDLE



@@IO_BUSY

返回的值是基于

ticks

而不是毫秒或者微妙。如果想知道微妙值,可以乘以

@@timeticks





 


        本例中的脚本收集某个时间点的

SQLServer

信息,可以借助

SQLServer Agent

,来定期、自动收集,以便用于后续分析之用。



 


       另外,sp_monitor系统存储过程可以返回本例中的信息,但是返回的结果集比较多,可能需要做二次处理来获取。

 


第三章——使用系统函数、存储过程和DBCC SQLPERF命令来监控SQLServer(1)




推荐阅读
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • NotSupportedException无法将类型“System.DateTime”强制转换为类型“System.Object”
    本文介绍了在使用LINQ to Entities时出现的NotSupportedException异常,该异常是由于无法将类型“System.DateTime”强制转换为类型“System.Object”所导致的。同时还介绍了相关的错误信息和解决方法。 ... [详细]
  • 如何更改电脑系统的自动校时服务器地址?
    本文介绍了如何通过注册表编辑器更改电脑系统的自动校时服务器地址。通过修改注册表中的数值数据或新建字符串数值的方式,可以将默认的时钟同步服务器地址更改为自己所需要的域名或IP地址。详细步骤包括双击时间区域,点击internet时间,勾选自动校正域名设置定时等操作。 ... [详细]
author-avatar
Fabio_Ho_275
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有