SQL监控及性能优化.docx
- 文档编号:27246914
- 上传时间:2023-06-28
- 格式:DOCX
- 页数:84
- 大小:1.91MB
SQL监控及性能优化.docx
《SQL监控及性能优化.docx》由会员分享,可在线阅读,更多相关《SQL监控及性能优化.docx(84页珍藏版)》请在冰豆网上搜索。
SQL监控及性能优化
SQL性能监控及SQL语句优化
性能监控
作为SQL的数据库服务器,我们可以将其比作一个人,而SQL则是他的心脏,管理员就是他的大脑。
要监控心脏是否健康首先要看他这个人是否健康。
这两者是相辅相成的,少了一方都是不健康的。
数据库服务器的性能监视器
性能监视器
性能工具的介绍
性能监视器是一种简单而功能强大的可视化工具,用于实时收集系统状态并从日志文件中查看性能数据。
使用性能监视器可以:
获得对诊断系统问题和规划系统资源增长有用的性能数据、了解工作负载及其对系统资源的影响、观察工作负载和资源使用情况的变化和趋势,以便计划未来的升级、通过监视结果来测试配置变化、诊断问题并确定需要优化的组件或进程。
•
从“开始”菜单上选择“运行”。
•
在“打开”文本框中输入“perfmon”,然后单击“确定”。
•
在性能监视器工具中,在左侧窗格里选择SystemMonitor对象,然后右击“性能”图表。
•
选择“添加计数器”。
现在,可以开始选择这些对象和要监视的计数器了。
ASP.NET应用程序性能计数器有关ASP.NET应用程序性能计数器的大部分信息最近已被合并到一个题为“改善.NET应用程序的性能和伸缩性”的综合文档中。
下表描述了一些可用于监视和优化ASP.NET应用程序(包括ReportingServices)性能的重要计数器。
性能对象
计数器
实例
描述
Processor(处理器)
%ProcessorTime(处理器时间百分比)
__Total
“%ProcessorTime”监视运行Web服务器的计算机的CPU利用率。
低CPU利用率或者无法最大化CPU利用率(无论客户端负载为多少)都表明Web应用程序中存在对资源的争用或锁定。
Process(进程)
%ProcessorTime(处理器时间百分比)
aspnet_wp或w3wp(具体情况视IIS版本而定)
由ASP.NET工作进程所使用的处理器时间所占的百分比。
在将标准负载情况下的性能与先前捕获的基准进行对比时,如果此计数器的值出现下降,则说明降低了对处理器的需求,因此也提高了伸缩性。
Process(进程)
WorkingSet(工作集)
aspnet_wp或w3wp(具体情况视IIS版本而定)
由ASP.NET主动使用的内存数量。
虽然应用程序开发人员对应用程序使用的内存数量拥有最大的控制权,但系统管理员也可通过调整会话的超时期限来显著影响这一点。
Process(进程)
PrivateBytes(专有字节)
aspnet_wp或w3wp(具体情况视IIS版本而定)
PrivateBytes是当前分配给该进程且不能由其他进程共享的内存数量(以字节计)。
不时出现的尖峰表明某些地方存在瓶颈,会导致工作进程继续持有不再需要的内存。
如果此计数器突然下降为接近0的值,则可能表示ASP.NET应用程序由于无法预料的问题进行了重启。
为了验证这一点,请监视“ASP.NETApplicationRestarts”计数器。
ASP.NETApplications(ASP.NET应用程序)
Requests/Sec(每秒的请求数)
__Total
允许您检验请求的处理速度是否于发送速度相适应。
如果每秒请求数的数值低于每秒产生的请求数,则会出现排队现象。
这通常意味着已经超过了最大请求速度。
ASP.NETApplications(ASP.NET应用程序)
ErrorsTotal(总错误数)
__Total
在执行HTTP请求期间发生的错误总数。
包括任何分析器、编译或运行时错误。
此计数器是“ErrorsDuringCompilation”(编译错误数)、“ErrorsDuringPreprocessing”(预处理错误数)和“ErrorsDuringExecution”(执行错误数)计数器的总和。
运转正常的Web服务器不应产生任何错误。
如果错误发生在ASP.NETWeb应用程序中,它们的存在可能会让实际的吞吐量结果产生偏差。
ASP.NET
RequestExecutionTime(请求执行时间)
显示了呈现所请求页面并将其传送给用户所需的时间(以毫秒计)。
跟踪此计数器通常要比跟踪页面呈现时间效果更好。
此计数器可以更全面地衡量从开始到结束的整个请求时间。
在与基准进行对比时,如果此计数器的平均值较低,则说明应用程序的伸缩性和性能均得到了改善。
ASP.NET
ApplicationRestarts(应用程序重新启动)
应用程序在Web服务器生存期间发生重新启动的次数。
每次发生Application_OnEnd事件时,应用程序的重新启动次数都会增加。
应用程序进行重新启动的原因可能是:
更改了Web.config文件、更改了存储在应用程序的\bin目录下的程序集、或者WebForms页面中发生了太多的更改。
如果此计数器的值出现意料之外的增加,说明某些不可预知的问题导致Web应用程序被关闭。
在这种情况下,应该认真调查问题原因。
ASP.NET
RequestsQueued(排队的请求数)
在队列中等待服务的请求数。
如果此数字随着客户端负载的增加而呈现线性的增长,则说明Web服务器计算机已经达到了它能够处理的并发请求极限。
此计数器的默认最大值为5,000。
您可以在计算机的Machine.config文件中更改此设置。
ASP.NET
WorkerProcessRestarts(工作进程重新启动)
工作进程在服务器计算机上重新启动的次数。
如果出现意料之外的故障或者被有意回收,则工作进程会重新启动。
如果此计数器的值出现意料之外的增加,应认真调查问题原因。
除了上表中介绍的这些核心监视要素之外,在您试图诊断ASP.NET应用程序具有的特定性能问题时,下表中的性能计数器也可对您有所帮助。
性能对象
计数器
实例
描述
ASP.NETApplications(ASP.NET应用程序)
PipelineInstanceCount(管线实例计数)
__Total
指定ASP.NET应用程序的活动请求管线实例的数量。
由于只有一个执行线程可以在管线实例内运行,所以此数值反映了为特定应用程序处理的并发请求的最大数量。
大多数情况下,在存在负载的情况下此数值较低为佳,这表明处理器得到了很好的利用。
.NETCLRExceptions(.NETCLR异常)
#ofExcepsThrown(引发的异常数)
显示应用程序中引发的异常数。
如果此数值出现意料之外的增加,说明可能存在性能问题。
如果仅仅存在异常,则并不需要担心,因为异常对于某些代码路径来说是正常工作的一部分。
例如,HttpResponse.Redirect方法通过引发一个不可捕获的异常ThreadAbortException来完成工作。
同样,对ASP.NET应用程序跟踪此计数器也更加有用。
使用“ErrorsTotal”计数器确定该异常是否将导致应用程序出现意料之外的错误。
System(系统)
ContextSwitches/sec(每秒的上下文切换次数)
测量Web服务器计算机上所有处理器切换线程上下文的速度。
如果此计数器的值很高,可能表示对锁的争用频繁发生,或者在线程的用户模式和内核模式之间切换频繁。
使用采样优化程序和其他工具执行进一步调查可证实上述猜测。
ReportingServices性能计数器ReportingServices包括一组它自己的性能计数器,用于收集有关报告处理和资源消耗方面的信息。
可通过Windows性能监视器工具中出现的两个对象来监视实例和组件的状态和活动:
MSRS2005WebService和MSRS2005WindowsService对象。
MSRS2005WebService性能对象包括一组用来跟踪ReportServer处理过程的计数器,这些处理过程通常通过在线交互式报告浏览操作而引发。
这些计数器在ASP.NET停止该Web服务后被重设。
下表列出了可用于监视ReportServer性能的计数器,并描述了它们的目的。
性能对象:
RSWebService
计数器
描述
ActiveSessions(活动会话数)
活动会话的数量。
此计数器反映了尚未过期的所有浏览器会话总数。
这并不是同时处理的请求数,而是存储在ReportServerTempDB数据库中的会话数量。
CacheHits/Sec(每秒缓存命中次数)
每秒从目录中取得的报告请求的数量。
如果此值增加,而“MemoryCacheHits”的值不增加,则说明报告数据没有被重新处理,但是页面被重新呈现。
将此计数器与MemoryCacheHits/Sec计数器一同使用,可以确定用于缓存、磁盘或内存的资源是否充足。
CacheMisses/Sec(每秒缓存未命中数)
每秒未能从目录中(与内存中相对)返回报告的请求数量。
将此计数器与MemoryCacheMisses/Sec计数器一同使用,可以确定用于缓存、磁盘或内存的资源是否充足。
FirstSessionRequests/Sec(每秒的首次会话请求数)
每秒中从ReportServer缓存中启动的新的用户会话数量。
MemoryCacheHits/Sec(每秒内存缓存命中数)
每秒中从内存中的缓存里取得报告的次数。
内存中缓存是ReportingServices缓存的一部分,用于在内存或临时文件中保存已呈现过的报告。
这样可以为请求提供最佳的性能,因为无需执行任何处理工作。
如果使用内存中缓存,报告服务器将不会通过查询SQLServer来获得缓存的内容。
MemoryCacheMisses/Sec(每秒内存缓存未命中数)
每秒中未能从内存中的缓存里取得报告的次数。
NextSessionRequests/Sec(每秒的下一次会话请求)
每秒在现有会话中请求打开报告的次数。
ReportRequests(报告请求)
当前处于活动状态并且将由ReportServer进行处理的报告数量。
ReportsExecuted/Sec(每秒执行的报告数)
每秒成功执行的报告的数量。
此计数器提供了有关报告处理量的统计信息。
综合使用此计数器和Request/Sec,比较可从缓存中返回的报告请求的执行情况。
Requests/Sec(每秒的请求数)
每秒向ReportServer发出的请求数。
此计数器跟踪由ReportServer处理的所有类型的请求。
TotalCacheHits(缓存命中总数)
自服务启动以来,从缓存中获得报告的请求总数。
此计数器在ASP.NET停止该Web服务后被重设。
TotalCacheMisses(总的缓存未命中数)
自服务启动以来,不能从缓存中获得报告的总次数。
此计数器在ASP.NET停止该Web服务后被重设。
可使用此计数器确定磁盘空间和内存是否充足。
TotalMemoryCacheHits(总的内存缓存命中数)
自服务启动以来,从内存中缓存里返回的已缓存报告的总数。
此计数器在ASP.NET停止该Web服务后被重设。
内存中缓存是在CPU内存中存储报告的那部分缓存。
如果使用内存中缓存,报告服务器将不会通过查询SQLServer来获得缓存的内容。
TotalMemoryCacheMisses(总的缓存未命中数)
自服务启动以来,针对内存中缓存的缓存未命中总数。
此计数器在ASP.NET停止该Web服务后被重设。
TotalProcessingFailures(处理故障总数)
自服务启动以来,发生的所有报告处理故障的总数。
此计数器在ASP.NET停止该Web服务后被重设。
处理故障可能来自报告处理器,也可能来自任何扩展。
TotalReportsExecuted(执行的报告总数)
自服务启动以来得到成功执行的报告的总数。
TotalRequests(总请求数)
自服务启动以来,向ReportServer发送的所有请求的总数。
RSWindowsService性能对象包括一组用于跟踪报告处理过程的计数器,这些处理过程是通过预定操作而引发的。
预定操作可能包括订阅和交付、报告执行快照以及报告历史。
微软的工作负载中并不包含任何预定操作或交付操作,此处列出这些性能计数器仅是便于您进行参考。
可使用此性能对象监视ReportServerWindows服务。
如果您准备在一个横向伸缩配置中运行ReportServer,那么这些计数器应用于所选的服务器,而不是应用于横向伸缩配置整体。
这些计数器在应用程序域回收之时将被重设。
下表列出了可用于监视预定和交付操作的计数器,并描述了它们的目的。
性能对象:
RSWindowsService
计数器
描述
CacheFlushes/Sec(每秒缓存刷新次数)
每秒刷新缓存的次数。
CacheHits/Sec(每秒缓存命中数)
每秒获取到缓存报告的请求数量。
CacheMisses/Sec(每秒缓存未命中数)
每秒未能从缓存中获得报告的请求的数量。
Delivers/Sec(每秒交付数)
每秒从各种交付扩展交付的报告的数量。
Events/Sec(每秒事件数)
每秒处理的事件数量。
被监视的事件,包括SnapshotUpdated和TimedSubscription。
MemoryCacheHits/Sec(每秒内存缓存命中数)
每秒中从内存中的缓存里取得报告的次数。
MemoryCacheMisses/Sec(每秒内存缓存未命中数)
每秒中未能从内存中的缓存里取得报告的次数。
ReportRequests(报告请求数)
当前处于活动状态并且将由ReportServer进行处理的报告数量。
可使用此计数器评估缓存策略。
向特定呈现扩展提交的请求数。
请求的数量可能比执行的报告数量多许多。
ReportsExecuted/Sec(每秒执行的报告数)
每秒成功执行的报告的数量。
SnapshotUpdates/Sec(每秒快照更新数)
每秒报告执行快照的预定更新数量。
TotalAppDomainRecycles(应用程序域回收总数)
自服务启动以来回收的应用程序域总数。
TotalCacheFlushes(缓存刷新总数)
自服务启动以来,ReportServer的缓存更新总数。
TotalCacheHits(缓存命中总数)
自服务启动以来,从缓存中获得报告的请求总数。
TotalCacheMisses(总的缓存未命中数)
自服务启动以来,不能从缓存中获得报告的总次数。
可使用此计数器确定是否需要更多磁盘空间或内存。
TotalDeliveries(总交付数)
由SchedulingandDeliveryProcessor交付的报告总数(对于所有交付扩展)。
TotalEvents(总事件数)
自服务启动以来发生的事件的总数。
TotalMemoryCacheHits(总的内存缓存命中数)
自服务启动以来,从内存中缓存里返回的已缓存报告的总数。
TotalMemoryCacheMisses(总的缓存未命中数)
自服务启动以来,针对内存中缓存的缓存未命中总数。
TotalProcessingFailures(处理故障总数)
自服务启动以来,发生的所有报告处理故障的总数。
处理故障可能来自报告处理器,也可能来自任何扩展。
TotalRejectedThreads(被拒绝的线程总数)
拒绝执行异步处理后在同一线程中作为同步过程在以后进行处理的数据处理线程总数。
TotalReportExecutions(报告执行总数)
已执行报告的总数。
TotalRequests(请求总数)
自服务启动以来得到成功执行的报告的总数。
TotalSnapshotUpdates(快照更新总数)
自服务启动以来,报告执行快照进行更新的总数。
如果您打算排除ReportingServices存在的性能问题,记录以下性能计数器通常很有帮助:
ASP.NET、ASP.NETApplications、Process、System、Memory、PhysicalDisks、.NETExceptions、.NETMemory、.NETLoading、.NETCLRLocksandThreads以及.NETCLRData。
可选的ReportingServices性能计数器 以下列出了一些适用于RSWebService但在默认情况下并未安装的性能计数器。
但是,在执行性能优化工作时,可以通过这些计数器来改善您洞察性能的能力。
为实现这个目的,请在命令提示符中执行以下语句:
installutil.exe/uReportingServicesLibrary.dll然后再执行:
installutil.exeReportingServicesLibrary.dll为了成功执行该语句,您可能首先需要修改您的路径,在路径中包含Microsoft.NETFramework的安装目录。
在路径修改完毕后,请从包含ReportingServicesLibrary.dll文件的目录下执行先前语句。
默认情况下,该文件安装在C:
\ProgramFiles\MicrosoftSQLServer\MSSQL\MSSQL.instance\ReportingServices\ReportServer\bin目录下。
这些计数器没有进行彻底的本地化。
ActiveDatabaseConnections(活动数据库连接)
某个时间处于活动状态的数据库连接的数量。
只统计指向ReportServer目录的连接。
ActiveDatasourceConnections(活动数据源连接)
某个时间处于活动状态的数据库连接的数量。
只统计由当前运行的报告打开的数据源连接。
ActiveThreads(活动线程)
当前处于活动状态的线程数量。
在Web服务中,它包含一些为请求提供服务的线程。
在交付服务中,它包含工作线程以及维护和轮询线程。
Bytecount(字节计数)
对于上一次请求,在呈现当前报告时向客户端返回的字节数量。
这与对应的执行日志条目相类似。
RowCount(行计数)
对于上一次请求,由当前报告返回的行的数量。
这与对应的执行日志条目相类似。
TimeinCompression(压缩时间)
对于上一次请求,在快照和PDF报告压缩上花费的时间(以毫秒计)。
Timeindatasourceaccess(数据源访问时间)
对于上一次请求,在获取报告的数据源信息上花费的时间(以毫秒计)。
其中包括执行查询和取回结果所需的时间。
这与对应的执行日志条目相类似。
Timeindatabase(数据库时间)
对于上一次请求,在获取ReportServer目录信息上花费的时间(以毫秒计)。
Timeinprocessing(处理时间)
对于上一次请求,在报告处理上花费的时间(以毫秒计)。
这与对应的执行日志条目相类似。
Timeinrendering(呈现时间)
对于上一次请求,在呈现报告上花费的时间(以毫秒计)。
这与对应的执行日志条目相类似。
以上红色文字的性能指标为常用这里并不完全下面以OA数据库实例来说明。
Cpu使用监控
添加处理器(Processor)的计数器计数器中常用的是处理时间(processortime)右边的选项框中是处理器的实例。
processortime指处理器用来执行非闲置线程时间的百分比。
计算方法是,测量范例间隔内非闲置线程活动的时间,用范例间隔减去该值。
(每台处理器有一个闲置线程,该线程在没有其他线程可以运行时消耗周期)。
这个计数器是处理器活动的主要说明器,显示在范例间隔时所观察的繁忙时间平均百分比。
这个值是用100%减去该服务不活动的时间计算出来的。
服务器有多少cpu就有多少实例,编号从0至n-1。
OA为4核4线程cpu故有16个实例。
缓存使用监控
添加缓存(Cache)的计数器计数器中常用的是复制读取百分比(CopyReadHits)以及数据命中百分比(DataMapHits)它是指:
由于页面已经在物理内存中,可以不从磁盘上检索页面的情况下解析在文件系统缓存中的数据映射的百分比。
内存使用监控
PageReads/secPageWrites/secPageInput/secPageOutput/secPages/sec
这些值都正常都很小
SQL的事务监控
可以用来监控sql事务的量
SQL的锁监控
这里有两个计数器LockWaits/sec(每秒钟的锁数量)NumberofDeadlocks/sec(每秒钟的死锁数量)。
相信对sql锁关心的人也会注意到这两个计数器。
当然,SQL自身的监控可以捕获到有关锁的更加具体、清晰的信息。
物理磁盘的监控
这里常用的计数器是Avg.DiskQueueLength(读取和写入请求的平均数)Avg.Disksec/Read(指以秒计算的在此盘上读取数据的所需平均时间。
)Avg.Disksec/Write(指以秒计算的在此盘上写入数据的所需平均时间。
)这些事关乎到物理磁盘的性能,提供检测硬件的信息。
我们知道数据使用久了会产生索引碎片,这也是不容忽视的。
索引碎片在磁盘上的表现就是磁盘碎片多,当然磁盘碎片多还有其他原因,但作为数据库服务器来说,大多的碎片都是由数据产生的。
我们也可以使用微软自带的磁盘碎片整理工具,但是要特别注意,在生产环境上不要使用,或者热备份后转移,或者暂停服务(当然大多生产都是不能停机的)。
日志事件信息查询
在数据库服务器或者SQL实例出现问题的情况下如何去查看由服务器记录的日志事件等信息?
打开计算机管理,在系统工具中我们可以看到事件查看器、性能日志和警报这两栏。
在应用程序中可以看到右边很多警告、信息、审核失败等条目。
同事记录了发生的时间、来源、用户、事件等信息。
双击条目后展现出事件属性对话框。
如果你对于该时间不是很熟悉,你可以看事件的描述,还可以利用时间ID去网上寻找资源,这一点非常有用。
选择系统后可以看到记录的相关事件信息。
用同样的方法来查看明细,确保到每个细节。
而性能日志和警报栏里则显示的是监控保存的记录。
SQL的性能监控
在SQL的性
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SQL 监控 性能 优化
![提示](https://static.bdocx.com/images/bang_tan.gif)