启动后几个小时Oracle负载高峰
我们使用oracle作为产品的后端数据库。我已经在我们的系统上运行了一系列压力测试,并且我开始注意到在数据库重新启动后,oracle的速度要快得多。随着时间的推移(几个小时左右),数据库似乎变得越来越慢,我将看到数据库计算机承受更大的压力。
oracle重新启动后立即运行测试,我将看到1分钟的平均负载约为5,平均CPU约为10-15%。几个小时后,我发现平均负载为13,CPU为40-70%。 (这是Red Hat Linux 2x Quad Core Xeon,Raid 10 10k rpm sas驱动器)。
我首先想到的是数据库事务不会因为这些查询被缓存而变得更快吗?
我似乎无法找出问题所在。
编辑:
事实证明,由于设计不良,这在连接软件方面是一个问题。系统上的每个操作都会创建一个新的插入,删除和选择。随着所有这些唯一查询的生成,缓存的内容在不断变化。我正在谈论的高峰是查询缓存填满时。
解决方案
我们确定压力测试正在释放它使用的会话吗?会话的累积,然后这些会话的后续超时可能会产生这种行为。
将此查询从注释移至每个请求的答案正文...
select username, osuser, lockwait, status, sql_text from v$session, v$sqltext where username is not null and username not in ('SYSMAN','DBSNMP') and hash_value = sql_hash_value order by username, hash_value, piece;
我们正在运行什么版本的oracle?我们是否有statspack或者AWR设置?如果我们这样做,请检查这些内容以显示数据库随时间的推移。
数据库SGA交换到磁盘可能是一个问题。与RAM大小相比,检查SGA和PGA的大小。
我们需要提供有关Oracle和Red Hat版本的更多信息(例如,
我遇到了Oracle 9i和Red Hat Enterprise Linux 3.x的性能问题,RAM大小为4 GB或者更大,在升级到Red Hat 4.x和Oracle 10g时已经消失了)
我注意到,在Oracle 10g中,Oracle安排了一项工作,以每天自动计算统计信息。我们可能想查看数据库繁忙时的活动会话,并查看后台会话是否正在忙于计算表的统计信息。
因此,重新启动后性能又再次提高了,是删除数据还是保留数据?我们需要运行statspack / AWR / ADDM / OEM来获取有关正在发生的事情的更多信息。
由于我们尚未发布任何详细的诊断信息,因此,我们需要首先开始学习ABC。请参见《 Oracle 10.2性能调整指南》
在所需信息列表中添加以下内容:
我们是否在使用存档日志?
我们有多少个重做日志组?每个组中有多少个重做日志?
重做日志有多大?
我们如何重新启动Oracle?我们是否只是在执行关闭操作后立即启动?我们要重新启动服务器吗?
如果日志文件太小,则可能会进入等待状态,然后才能继续将重做日志写入存档日志的情况,可以通过增加重做日志的大小来帮助解决此问题。
关闭并重新启动oracle将导致重做日志全部都写入归档日志,并且在我们开始备份后就可以重新使用。然后,当它们充满重做信息时,我们就遇到了归档存档的瓶颈。
如果我们正在运行Oracle 10g,则AWR报告确实是最有用的。如果我们运行的是9i,则相当于statspack。
运行AWR报告
sqlplus <sys or system user>/<password><@SID>
登录到sqlplus
SQL> execute dbms_workload_repository.create_snapshot
创建一个"之前"的统计快照
运行特定性能/负载测试
SQL> execute dbms_workload_repository.create_snapshot
创建一个"之后"统计快照
SQL> start awrrpt
创建工作负载存储库报告
使用AWR报告,我们应该能够确定瓶颈所在。
段落数量不匹配