对SQLSERVER进行性能监控

原文: 对SQLSERVER进行性能监控

对SQLSERVER进行性能监控

在上一篇文章《SQLSERVER性能监控级别步骤》里说到性能监控的步骤中有一步涉及到建立性能基线,但是没有说到有哪些计数器

可以用来进行监控的,这篇文章结合《企业级平台管理实践》的书本说一下监控SQLSERVER有哪些计数器可以用到的

3、建立性能基线
 
 当确定了性能监控中所涉及的资源、负载和目标后,开始进行监控,并建立性能基线与当前服务器性能进行比较。
 
性能基线是一个保证系统正常操作性能范围值,达到或超过这个范围,系统性能可能会显著下降。
 
应该对接近或超过性能基线的数字做进一步调查找出原因监控的周期是一段时间,而不是一两天。
 
其中应该包括数据库活动的峰值时间和非峰值时间,数据查询和批处理命令的响应时间、数据库备份和还原所需时间
 
建立服务器性能基线后,将基线统计与当前服务器性能进行比较。对高于或远低于基线的数字需要做进一步调查。
 
他们可能表明有需要调整或重新配置的区域。例如,执行一组查询的时间增加,检查这些查询以确定能否重新编写他们,
 
或者是否添加统计信息或索引

介绍

性能监视器 Performance Monitor

性能监视器是Windows的一个工具,在系统管理工具组里。默认里面就有很多Windows层面的性能计数器,可以监视系统的运行。

直接运行"perfmon",也可以打开他。这里以 WindowsXP/2003/2008的性能监视器为例。

Windows2008R2和Windows7的性能监视器界面有了比较大的变化,功能也有扩展,更加好用。同时也完全向前兼容。

后面谈到的功能都有包括

SQLSERVER自己开发了一些扩展的性能计数器。在安装SQLSERVER的时候,会注册到Windows里。

这样, Windows的性能监视器就能看到一些以“SQL”打头的计数器了。SQLSERVER在运行时,会统计这些计数器的值。

在性能监视器里能够看到:

默认性能监视器是用来实时检测系统的,在窗口里,用不同颜色的线条表示不同的计数器值。

当窗口画满以后,会从头覆盖前面的内容。所以默认只能看到最近一小段时间的值。

但是在现实的问题分析中,实时监测还是比较少的。更常见的场景是需要在问题发生之前,就要开启性能计数器的收集,

收集一段时间之后,或者问题重现之后,再离线地分析问题的现象和原因。

那么日志怎样收集呢?

通常可以使用下面这些步骤:

(1)在性能监视器左边的窗口,展开性能 日志和警告子树,点击“计数器日志” 在右边的窗口里,右键点击,

选择“新 日志设置”,他会弹出一个对话框,让你为新的日志记录配置命名。这里我们取名为Test,日志默认保存路径是

%systemdrive%\PerfLogs\Admin\Test

分享图片

(2)在接着弹出的对话框里,就可以配置DBA要搜集的信息要求了。首先要选择搜集哪些计数器,以及他们的取样时间间隔sample data every,

默认是15秒取一次,这个间隔能够满足大部分需求。

有说法讲在搜集和磁盘相关的性能日志时,间隔要设置短一点,最好是3到5秒。如果设置30秒以上,可能信息就不完整了。

所以15秒是大部分情况下比较好的选择

(3)选择添加对象,就可以选择要收集的性能监视器对象。对于非在线分析,问题可能还不清楚,很难确定哪些性能计数器有用,哪些没有用。

所以在这里,一定要多选一些。一般的SQL问题,可以选择下面这些对象

在memory,process,physicaldisk,processor,system对象下的所有计数器,以及他们的所有instance

所有以SQLSERVER:开头的性能监视对象

如果要监视CPU类问题,最好还包含thread下面的所有计数器,以及他所有的instance

有些DBA会担心,抓这麽多计数器会不会影响性能。

应该说根据经验,性能监视器对系统整体性能的影响几乎感觉不到。所以可以比较放心大胆地多收一些计数器。

基本工作原理是在.NET编译出的IL代码里放入钩子用来记录时间,然后通过直观的界面显示出哪部分代码耗能最大。

只是间隔可能还是选15秒比较安全

 

分享图片

分享图片

(4)设置文件的位置和最大大小 ,另一个重要配置,是日志文件存放在哪里,保存格式,以及最大大小。

日志文件的后缀是blg的二进制文件,需要使用性能监视器才能打开这个文件

如果性能日志文件大小超过1GB,可能有些机器打开会很慢。所以一定要注意其最大值可以设为200MB。

如果一个200MB的文件写满,性能监视器会自动创建一个新的。文件格式可以选二进制文件

日志搜集当然可以手动开始和终止。但是如果问题会发生在半夜,最好能让系统自动开启,自动关闭。性能监视器也可以帮DBA做到这一点

当得到一个性能日志后,可以在性能监视器里选择 查看 日志 数据

在数据源里添加日志文件

然后点击数据选项卡,就能看到在原来那台服务器上收集的性能计数器了

这时候再点击“源”选项卡,能看见性能日志文件所包含的那段时间。拉动滚动条,可以把时间段缩短到DBA最关心的那段时间

对收集到的日志,DBA可以进行分析

 

分享图片

分享图片

分享图片

分享图片

---------------------------------------华丽的分割线----------------------------------------------------------------------

一些性能监视器计数器
相关计数器


性能对象                                                 计数器
SQLSERVER:BUFFER MANAGER:    buffer cache hit ratio,lazy writes/sec,procedure cache pages,total pages
SQLSERVER:Cache Manager:    cache hit ratio,cache object counts,cache pages,cache use counts/sec
SQLSERVER:MEMORY MANAGER:    sql cache memory(kb)
SQLSERVER:SQL STATISTICS:    auto-param attmpts/sec,batch request/sec,failed auto-params/sec,safe autoparam/sec,sql compilations/sec,

sql re-compilations/sec,unsafe auto-params/sec

------------------------------------华丽的分割线--------------------------------------------------------

与内存有关的计数器

Windows与SQLSERVER系统使用内存情况和合理配置SQLSERVER内存 

性能监视器  perfmon --添加-》可用计数器-》Memory-》添加available MBytes和pages/sec

数据收集器集-》用户定义-》新建-》数据收集器集-》名称:SQLSERVER内存使用-》手动创建-》性能计数器-》 添加下面的性能计数器-》

时间间隔15秒-》保存路径:C:\Users\Administrator\Desktop\SQLSERVER内存使用-》 保存并关闭-》选中刚才创建的数据收集器-》启动-》变成

datacollector01   -》在用户定义下面 SQLSERVER内存使用 右键-》停止或者在空白的地方-》右键-》停止

可以右键-》在用户定义下面 SQLSERVER内存使用-》属性-》更改数据收集器保存路径

 计数器

committed bytes:整个Windows系统,包括Windows自身以及所有用户进程使用的内存总数

commit limit:整个Windows系统能够申请的最大内存数,其值等于物理内存加上文件缓存大小

available MBytes(重要):现在系统空闲的物理内存数。这个指标能够直接反映出Windows层面上有没有内存压力跑在Windows2000上会把空闲内存用完知道剩下4MB~10MB。跑在Windows2003或以上就会留给Windows多一点的物理内存

page file :%usage  page file:% peak usage :反应缓存文件使用量的多少,使用越多缓存,性能越差

pages /sec:每秒钟需要从磁盘上读取或写入的页面数目

soft page fault一般不会带来性能影响,因此一般不太关心

一个良好的系统,他要处理的数据应该比较长期地保存在物理内存里。如果频繁换页/换入换出势必影响性能,pages/sec不能长时间保持在一个比较高的值

对于一台SQL服务器,如果available MBytes长期小于10MB,说明物理内存不太够pages/sec 物理内存不足也会做成频繁换页/换入换出 pages/sec不能长时间保持在一个比较高的值

Windows系统自身内存使用情况

一个32位Windows系统,正常内存使用大概几百MB --64位Windows系统大概1GB~2GB

--如果发生内存泄漏(一般由硬件驱动造成),Windows会用到几个GB甚至十几GB,反过来挤压应用的内存

 

memory :cache bytes --系统的working set,也就是系统使用的物理内存数目,包括高速缓存,页交换区,可调页的ntoskrnl.exe 和驱动程序代码,

以及系统映射视图

cache bytes计数器是下面几个计数器的和:

system cache resident bytes,system driver resident bytes,system code resident bytes,pool paged resident bytes

system cache resident bytes:系统高速缓存消耗的物理内存。高速缓存的主要功能是提高文件读写的速度

pool paged resident bytes:页交互区消耗的物理内存

system driver resident bytes:可调页的设备驱动程序代码消耗的物理内存

system code resident bytes:ntoskrnl.exe中可调页代码消耗的内存

system pool 内存池  如果两个重要的内存池内存出现泄漏,或者空间用尽,Windows会出现奇怪不正常的行为, 进而影响SQL稳定运行。

所以需要检查这两个内存池

pool nonpaged bytes 非换页内存池

pool paged resident bytes 换页内存池

 

单个process使用情况

常见场景:available MBytes看出服务器的内存基本用尽,但是从cache bytes看Windows自己没有使用多少。

现在要开始分析应用程序的内存使用了

在选择对象的实例里面要每个进程都要添加进计数器里面,不要选择_Total SQL的进程是sqlservr

%processor time:是目标进程消耗的CPU资源数,包括用户态和核心态的时间

page faults/sec:是目标进程上发生的page faults的数目

handle count:目标进程handle(指向object指针)数目句柄数。如果进程内部有对象老是创建,不及时回收,就会发生handle leak

thread count:目标进程的线程数目。如果进程老是创建新线程,不释放老线程,就会发生thread leak

pool paged bytes:是目标进程所使用的paged pool大小

pool nonpaged bytes:是目标进程所使用的non-paged pool大小

working set:某个进程的地址空间,存放在物理内存的那一部分

virtual bytes:某个进程所申请的虚拟地址空间大小,包括reserved memory 和committed memory

private bytes:某个进程提交了的地址空间commited memory中,非共享部分

假设有processA 和processB,他们的虚拟地址空间都分成两部分,核心态和用户态 --核心态是由Windows控制,所有进程共享。

processA --committed memory :1,2,3,4,7 --reserved memory:8 --shared memory:通过特殊API申请的内存,processA和processB都能够访问

物理内存physical memory:1,3,4,d,7,9,b,c 缓存文件page file:2,y

系统核心态内存 system working set=x

检查计数器主要找到以下:

使用内存最多的进程

内存使用量在不断增长的进程

出现问题的那个时间段,内存使用数量发生过突变(增或降)的进程

这些可以通过working set  private bytes得到初步答案

 -------------------------------------------------华丽的分割线-------------------------------------------------------

上面这些都是《SQLSERVER企业级平台管理实践》读书笔记整理出来的一些常用SQLSERVER性能计数器,大家做性能基线的时候

都可以用来做参考

 

如有不对的地方,欢迎大家拍砖o(∩_∩)o

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


本篇内容主要讲解“sqlalchemy的常用数据类型怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“sqlalche...
今天小编给大家分享一下sqlServer实现分页查询的方式有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家
这篇文章主要介绍“sqlmap之osshell怎么使用”,在日常操作中,相信很多人在sqlmap之osshell怎么使用问题上存在疑惑,小编查阅了各式资料,整理出
本篇内容介绍了“SQL注入的知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧...
1. mssql权限sa权限:数据库操作,文件管理,命令执行,注册表读取等system。是mssql的最高权限db权限:文件管理,数据库操作等 users-administratorspublic权限:数据库操作 guest-users2、sql server注入执行命令查
sql执行计划如何查看?在SPL庞大的数据中我们不知道如何查看实际数据库中发生了什么事情,有必要定期进行查询优化和索引否则会影响我们后期的SQL的查询速度。那么针对这样的问题我们必须要知道SQL执行的计划,在本文中winwin7小编给大家分享下SQL执
SQL Server 是Microsoft 公司推出的关系型数据库管理系统。具有使用方便可伸缩性好与相关软件集成程度高等优点应用非常广泛。不过在使用中,我们会遇到非常多的错误,面对这么庞大的数据库环境,当然会有精确的错误代码的对照季,下面小编分享的
SQL Server本地账户无法登陆出现错误提示:error:40-Could not open a connenction to SQL Server的问题很常见,对于初学者来说可能不知道如何解决,一起来看看下面的解决方案。解决步骤如下:1、这种情况需要开启 SQL Server service
微软推出的SQL2008是一款非常好用的数据库软件,它稳定、功能强大,为众多企业提供了最佳的数据库解决方案,那么我们如何在Windows中安装它呢,一些朋友对SQL Server 2008的安装过程还不是很熟悉,下面就一起来看看SQL Server 2008详细安装图解...
本页概要如果您使用的是 SQL Server 2005备份和还原Sp_detach_db 和 Sp_attach_db 存储过程关于排序规则的说明导入和导出数据(在 SQL Server 数据库之间复
DBCC CHECKIDENT 检查指定表的当前标识值,如有必要,还对标识值进行更正。 语法 DBCC CHECKIDENT ( 'table_name' [ , { NORESEED
这里对 SQL Server 字符串函数进行分门别类地列出,便于查阅和记忆,相信大家都在其它方面有高深的编程基础,从字面上来说大家都知道这些函数的意义,就不对这些函数作过多的解释了,主要谈些经验,具体
查询及删除重复记录的方法 1、查找表(people)中多余的重复记录,重复记录是根据单个字段(peopleId)来判断select*frompeoplewherepeopleIdin(selectpe
微软发SQL Server 2008第二个CTP预览版from: http://news.csdn.net/n/20070807/107158.html8月7日消息,微软公司本周发布了SQL Serv
症状当您将数据库备份恢复到另一台服务器时,可能会遇到孤立用户的问题。SQL Server 联机丛书中的孤立用户疑难解答主题中没有讲述解决此问题的具体步骤。本文介绍了如何解决孤立用户问题。更多信息虽然术
当登录SQL Server 2005时可能碰到错误: 'No Process is on the Other End of the Pipe'。解决方法:(1)Open up SQL
概要本文描述如何映射标准登录和集成登录来解决在运行 SQL Server 的服务器之间移动数据库时的权限问题。更多信息当您将数据库从一个运行 SQL Server 的服务器移到另一个运行 SQL Se
----------------------------------------问题:该用户与可信的SQL SERVER 连接无关联使用sa用户或自建用户使用“SQL SERVER 身份认证”连接数据
更新日期: 2007 年 5 月 20 日 使用下表可以确定各种版本的 Microsoft SQL Server 2005 支持哪些功能。有关 SQL Server 2005 Enterprise E
当从Excel导入数据到Sql Sever中,可能会出现以下问题:
对于指定的缓冲区大小而言,源列的数据太大