应用程序性能的监控与改善——性能设计

来源:互联网 发布:模拟退火算法改进 编辑:程序博客网 时间:2024/05/16 22:56

<span times="" new="" roman";="" mso-hansi-font-family:="" "times="" roman"""="" style="font-size: 12pt; font-family: 宋体; ">统计信息分为三部分:

1.操作系统统计信息:包括CPU、内存、磁盘和网络四部分。

2.数据库统计信息:包括Buffer Cache、Shared Pool和Wait Events三部分。

3.应用程序统计信息

 

收集统计信息:

收集操作系统统计信息的工具:sar、vmstat、mpstat、iostat和netstat等。

收集数据库统计信息的工具:Statspack、OEM和BSTAT/ESTAT脚本(推荐用statspack代替)。

应当在系统刚建立时和系统工作正常时收集统计信息,为系统保留历史统计信息和性能基线。

V$SYSSTAT视图中的USER COMMITS和REDO SIZE统计项可以给出数据库中的事务数和数据的改变量。另外‘session logical reads’可以在一定程度上表示系统查询的负载。但是当这个值发生变化并不一定意味着查询负载发生变化,还有很大可能是由于执行计划的改变导致了逻辑读发生了变化。

 

Oracle改进性能方法的步骤:

1.从客户得到公正的反馈。

2.收集操作系统、数据库和应用程序处于性能良好和性能较差两种状态的统计信息。如果无法收集到所有状态的统计信息,那么收集所有能收集到的。统计信息的缺失会给诊断问题带来很大的困难。

3.全面检查和当前性能问题有关的所有计算机的操作系统。检查硬件问题和系统资源的使用情况。

4.检查是否发生了Oracle数据库中10个最可能发生的一般性错误。

5.根据目前的症状作为线索,构造一个概念上的模型,来推断导致性能问题的原因。

6.给出一系列补救措施,并将它们按照有效性大小的顺序应用到系统中。最好的方法是每次只修改一个地方,然后观测修改后有什么不同。然而,现实中诸多限制可能无法允许多次的系统重新和过长的停机时间。那么如果同时修改多个地方,应该保证这些修改是彼此独立的。

7.验证这些改变是否能达到预期的效果,用户是否能感受到性能的提升。如果没有达到的话,继续寻找其他瓶颈并重定义概念模型,直到你对应用程序的理解更加的准确。

8.重复上面最后三步,知道性能问题解决或确认所要求的目标无法实现。

 

如何检查操作系统:

检查整个系统和每个CPU在user和kernel项上的CPU使用率;

确认没有分页和交换存在;

检查不同计算机间的网络延迟是否可接受;

检查磁盘是否存在较长的响应时间和队列;

确认不存在硬件错误。

 

一个性能概念模型的例子:

1.单用户模式在空闲服务器上运行任务,响应时间是否满足要求?

如果这种情况下都无法满足相应时间,则说明应用程序的设计存在问题,这时无论如何调优,在多用户模式下也不可能满足要求。这种情况应该收集应用程序内部统计信息,进行SQL TRACE检查SQL语句的执行计划。这时问题可能出在数据、索引、事务和SQL语句的设计上。

2.是否所有的CPU被使用?

如果kernel超过了40%,那么检查网络传输、分页、交换或进程瘫痪等。如果CPU的使用主要集中在user上,检查是否存在ORACLE数据库以外的其他进程消耗CPU资源。之后检查最消耗CPU资源的SQL语句。如果应用程序已经是优化的,不存在低效的SQL语句,考虑将部分工作放到非高峰时期或更换系统硬件。

3.如果性能没有达到要求,且CPU没有被重复利用。

检查等待事件,找出导致系统串行化的关键。如果不存在这种问题导致系统串行化,那么问题很有可能出在数据库之外。

 

Oracle系统中10个最容易犯的错误:

1.连接管理问题

2.没有重复利用游标、没有使用绑定变量导致的无法重用共享池的问题

3.数据库I/O配置错误

4.重做日志文件设置太小的问题

5.由于free lists、free list groups、transaction slots、rollback segment的设置较小导致cache中的data block串行使用问题。

6.长时间的全表扫描

7.磁盘排序

8.大量的系统递归SQL调用

9.方案移植时缺少索引或统计信息的错误和优化问题

10.使用非标准初始化参数的问题

原创粉丝点击