今天一定要给大家分享一下用友U8-erp软件运行的性能优化方案教程,以下方案来自用友软件官方维护工程师反馈在在处理客户问题的时候,有一类问题较为挠头,就是诸如用友U8服务器效率低下的问题。比如用友U8运行慢,卡住等,我们暂先不提用友U8软件代码、脚本层面本身的性能提升问题,我们只是基于现有用友U8软件版本,在客户现有环境下排查用友U8软件运行的性能瓶颈,并采取一定的技术手段进行性能调校。
本文将推荐一种利用Windows 性能监视器结合SQL Server Profiler(事件探查器)监控数据库性能,以及利用Windows 性能监视器监测系统各项资源。
一、Windows 性能监视器
Windows 性能监视器是一个用于分析系统性能的工具。仅从一个单独的控制台,即可实时监视应用程序和硬件性能,自定义要在日志中收集的数据,定义警报和自动操作的阈值,生成报告以及以各种方式查看过去的性能数据。
启动性能监视器的步骤
①单击“开始”,在“开始搜索”框中单击,键入 perfmon,然后按 Enter。
②在导航树中,打开“管理工具”,然后单击“性能监视器”。
系统预制了系统性能收集器,性能计数器也是预制好的,我们在系统菜单下可以找到该收集器,见下图。
收集器会生成一个报告,其中详细记录本地硬件资源的状态、系统响应时间和本地计算机上的进程。使用此信息可以识别性能问题的可能原因。本地 Administrators 组的成员身份(或同等身份)是运行此数据收集器集的最低要求。
当客户服务器性能存在瓶颈,但是又无法判断时,我们可以利用此收集器做一个系统性能的初步检测。接下来,我们开启此收集器。开启方法:选中此性能收集器,点击开启。系统默认收集一分钟的系统性能,收集完成后我们可以查看系统性能报告,其中详细记录本地硬件资源的状态。
二、创建跟踪SQL事件的数据收集器
①打开性能监视器,展开“数据收集器集”,右键单击“用户定义”,再单击“新建”、“数据收集器集”
键入数据收集器集的名称,选择“手动创建”,然后单击“下一步”。
②选择“性能计数器”,然后单击“下一步”。
③单击“添加”以添加计数器。在“可用计数器”列表中,选择要监视的性能对象。 SQL Server 默认实例的 SQL Server 性能对象名称以 SQL Server 开头,命名实例以 MSSQL$instanceName 开头。
④通常我们可以关注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% .
⑤添加其他重要计数器。添加SQLServer实例所需的所有计数器和其他重要值(例如处理器时间和磁盘时间),选择完成点击下一步,点击保存并关闭。
其中,设置“示例间隔”的值。 开始时使用适中的抽样间隔值(例如 5 分钟),然后在必要时调整间隔值。
三、将跟踪与Windows性能日志数据关联
SQL Server Profiler 可以将 Microsoft Windows 系统监视器计数器与 SQL Server 或 SSAS事件关联。 Windows 系统监视器将指定计数器的系统活动记录在性能日志中。
在 SQL Server Profiler中,打开保存的跟踪文件或跟踪表。 不能关联仍在收集事件数据的运行中的跟踪。 为实现与系统监视器数据的准确关联,跟踪必须同时包含 StartT+ime 和 EndT+ime 数据列。我们开启SQL Server Profiler跟踪一段时间内的运行脚本,使用默认模板,点击运行。
我们打开U8界面,对采购模块进行月结,注意,此时跟踪要开启,自定义的数据收集器要启动。当然,我们可以做更多复杂的操作,来收集更为详尽的信息。
收集大概五分钟左右的数据,我们将数据收集器停止
同时,我们将SQL Server Profiler跟踪停止,并将跟踪另存为跟踪文件。
此时,我们关闭SQL Server Profiler跟踪,再次启动SQL Server Profiler,并选择文件-打开,选择刚刚保存的跟踪文件。然后我们再点击文件-导入性能数据。导入的文件在哪里呢,是在我们刚刚设置的数据收集器的属性里
选择导入后,我们会得到如下的界面,我们可以在这个界面再次选择我们需要的计数器。
我们在刚才做的采购月结过程中,通过对比同一时间段的获取结果,在性能监视器图形中单击一个相关点。 将选中时间最接近的相应跟踪行。 若要扩大时间范围,请在性能监视器图形中按住并拖动鼠标指针。
比对发现,在月结操作时,主要是月结检查部分,计数器数值达到一个小高峰。详细的脚本分析就不在这里进行展开分析。
四、结论
我们将SQL Server Profiler 可以将 Microsoft Windows 系统监视器计数器与 SQL Server 事件关联,将sql脚本跟踪的结果与系统资源计数器结合,分析造成当前系统瓶颈的脚本和语句,一些问题是可以通过改善代码质量提高效率,一些问题则需要提高(或优化)系统硬件配置来改善效率,本文只是提高一种分析效率的问题方法和思路,更多的手段和技巧需要在实践中完善,希望此文对您有一定帮助。