不止是iPhone X,我也送你个牛X的U8性能优化方案!

编辑:周星全   来源:yonyou_klx   应用技术   2017-09-14 10:37:19

总部工程师反馈在在处理客户问题的时候,有一类问题较为挠头,就是诸如U8服务器效率低下的问题。暂不提U8代码、脚本层面本身的性能提升问题,我们只是基于现有U8版本,在客户现有环境下排查性能瓶颈,并采取一定的技术手段进行性能调校

本文将推荐一种利用Windows 性能监视器结合SQL Server Profiler(事件探查器)监控数据库性能,以及利用Windows 性能监视器监测系统各项资源

ps:感谢成成大神的无私奉献!

一、Windows 性能监视器

Windows 性能监视器是一个用于分析系统性能的工具。仅从一个单独的控制台,即可实时监视应用程序和硬件性能,自定义要在日志中收集的数据,定义警报和自动操作的阈值,生成报告以及以各种方式查看过去的性能数据。

启动性能监视器的步骤

① 单击“开始”,在“开始搜索”框中单击,键入 perfmon,然后按 Enter。

② 在导航树中,打开“管理工具”,然后单击“性能监视器”。

    系统预制了系统性能收集器,性能计数器也是预制好的,我们在系统菜单下可以找到该收集器,见下图。

图1、性能监视器界面

收集器会生成一个报告,其中详细记录本地硬件资源的状态、系统响应时间和本地计算机上的进程。使用此信息可以识别性能问题的可能原因。本地 Administrators 组的成员身份(或同等身份)是运行此数据收集器集的最低要求。

当客户服务器性能存在瓶颈,但是又无法判断时,我们可以利用此收集器做一个系统性能的初步检测。接下来,我们开启此收集器。开启方法:选中此性能收集器,点击开启。系统默认收集一分钟的系统性能,收集完成后我们可以查看系统性能报告,其中详细记录本地硬件资源的状态。

图2、性能报告界面

二、创建跟踪SQL事件的数据收集器

① 打开性能监视器,展开“数据收集器集”,右键单击“用户定义”,再单击“新建”、“数据收集器集”

图3、创建性能监视器

键入数据收集器集的名称,选择“手动创建”,然后单击“下一步”。

② 选择“性能计数器”,然后单击“下一步”。

图4、创建性能监视器

单击“添加”以添加计数器。在“可用计数器”列表中,选择要监视的性能对象。 SQL Server 默认实例的 SQL Server 性能对象名称以 SQL Server 开头,命名实例以 MSSQL$instanceName 开头。

图5、创建性能监视器

通常我们可以关注SQLSERVER实例本身的计数器,我选取了几项,含义如下:

    1.)SQLServer: Buffer Manager: Buffer cache hit ratio (SqlServer缓冲管理器:缓冲区高速缓存命中率 )高速缓存命中率计数器,表示SQL Server接受命令查询所需的数据页恰好在高速缓存中的概率,如果在高速缓存中查找不到,则数据页要重新到磁盘或者其它地方获取。这个数值越高,表示SQL Server能够从缓存中获得的数据概率越高,而不是再从磁盘读取。这个数值理论上是越高越好,接近到100.有了这100,100%的时间在SQL Server的内存中找到了需要的数据页,那么性能一直很高。如是是一个很低的数值可能表明内存方面有问题,最有可能是内存不足。

    2.)SQLServer: Buffer Manager: Page life expectancy (SqlServer缓冲管理器:页寿命)页寿命表示页在缓存中存放的时间。页面停留的时间越长在内存中,那么下一次查询时,如果所需的页面还在缓存中,SQL Server将不再需要从磁盘读取。页寿命根据不同的服务器的基值不同,和内存大小有一定的关系,我们应该观察这个计数器,以确定数据库环境中正常基线是什么。有人统计了一下,低于300(或5分钟),说明我们的服务器内存不足。

    3)SQLServer: SQL Statistics: SQL Re-Compilations/Sec(SqlServer的:SQL统计:重编译/秒 )有时因为一些重要的事件发生时,导致执行计划失效,SQL Server将重新编译它。该重编译/秒表示每秒钟重新编译执行计划的次数,和编译一样,都是代价高昂的操作,所以应尽量减少重新编译次数。理想情况下我们要保留这个计数器小于编译/秒(上面第4项)的10%  .

图6、计数器的选择

⑤ 添加其他重要计数器。添加 SQL Server 实例所需的所有计数器和其他重要值(例如处理器时间和磁盘时间),选择完成点击下一步,点击保存并关闭。

图7、计数器的选择

其中,设置“示例间隔”的值。 开始时使用适中的抽样间隔值(例如 5 分钟),然后在必要时调整间隔值。

图8、数据收集器的保存

三、将跟踪与 Windows 性能日志数据关联

SQL Server Profiler 可以将 Microsoft Windows 系统监视器计数器与 SQL Server 或 SSAS事件关联。 Windows 系统监视器将指定计数器的系统活动记录在性能日志中。

在 SQL Server Profiler中,打开保存的跟踪文件或跟踪表。 不能关联仍在收集事件数据的运行中的跟踪。 为实现与系统监视器数据的准确关联,跟踪必须同时包含 StartTime 和 EndTime 数据列。我们开启SQL Server Profiler跟踪一段时间内的运行脚本,使用默认模板,点击运行。

图9 、打开sqlserver profile

我们打开U8界面,对采购模块进行月结,注意,此时跟踪要开启,自定义的数据收集器要启动。当然,我们可以做更多复杂的操作,来收集更为详尽的信息。

图10、运行U8

收集大概五分钟左右的数据,我们将数据收集器停止,如下图

图11、停止数据收集

同时,我们将SQL Server Profiler跟踪停止,并将跟踪另存为跟踪文件。

图12、保存SQL Server Profiler跟踪文件

此时,我们关闭SQL Server Profiler跟踪,再次启动SQL Server Profiler,并选择文件-打开,选择刚刚保存的跟踪文件。然后我们再点击文件-导入性能数据。导入的文件在哪里呢,是在我们刚刚设置的数据收集器的属性里,如图

图13、数据收集器报告文件

选择导入后,我们会得到如下的界面,我们可以在这个界面再次选择我们需要的计数器。

图14、导入数据收集器报告文件

我们在刚才做的采购月结过程中,通过对比同一时间段的获取结果,在性能监视器图形中单击一个相关点。 将选中时间最接近的相应跟踪行。 若要扩大时间范围,请在性能监视器图形中按住并拖动鼠标指针。

比对发现,在月结操作时,主要是月结检查部分,计数器数值达到一个小高峰。详细的脚本分析就不在这里进行展开分析。

四、结论

我们将SQL Server Profiler 可以将 Microsoft Windows 系统监视器计数器与 SQL Server 事件关联,将sql脚本跟踪的结果与系统资源计数器结合,分析造成当前系统瓶颈的脚本和语句,一些问题是可以通过改善代码质量提高效率,一些问题则需要提高(或优化)系统硬件配置来改善效率,本文只是提高一种分析效率的问题方法和思路,更多的手段和技巧需要在实践中完善,希望此文对您有一定帮助。

小编后记

  服务圈是聚合U8客户、服务顾问、授权商业合作伙伴分享解决方案的用友官方服务平台,可提供问题咨询、信息查询等服务。平台包含PC端和移动端,涵盖知识库搜索、服务商城,客服、问答、文库等系列服务产品。 

关注用友快立信智能云商服务号(jmklx-yonyou)会有更多惊喜等着你!

分享给更多的朋友们。

服务热线:6331666/6331777    销售热线:3693969
标签: 软件,性能,数据,计数器,收集,监视器,系统