Oracle的SGA调整经历
上个月,数据库开始出现问题,负载低,但查询很慢,尤其是在应用程序启动,加载预置数据的时候,以前启动加载数据只需要不到1分钟就可以完成,但当时启动服务却用了1个小时,后来经过分析和测试,找到了3个问题,其中一个问题是是硬件和JVM之间的,可以看海东的<Xeon3.0·RedHat9·JVM>;另一个问题是数据库IO高的问题,这是应用的问题,目前没有太好的解决方式;最后一个问题就是数据库的SGA配置问题,我在ITPUB上发了帖子Oracle 9i 的性能问题,经过高手的指点,重新配置了SGA,从SQLPLUS的表现可以感觉到明显的效果,先把这个总结一下,便于以后查找 :)
首先推荐ITPUT上几篇文章,感觉很有收获:
Oracle是如何工作的:这篇文章通过一个生动的例子,解释了Oracle各部分是如何协调工作的,尤其是对于SGA在其中的作用。
关于SGA设置的一点总结 和关于2G内存的SGA的参数优化的问题
主要原因是当前的数据库SGA配置中的db_cache设置太小,这个在ITPUB上遭到了大家的猛烈批判 :),下面是修改前的情况:
SQL>SELECTNAME,VALUE
FROMv$parameter
WHERENAMEIN
('sga_max_size','db_cache_size',
'shared_pool_size','shared_pool_reserved_size','large_pool_size','java_pool_size',
'db_block_size','db_block_buffers','log_buffer','sort_area_size','sort_area_retained_size',
'hash_area_size','sessions','open_cursors'
)ORDERBYNAME;
NAMEVALUE
--------------------------------------
db_block_buffers0
db_block_size4096
db_cache_size33554432
hash_area_size1048576
java_pool_size67108864
large_pool_size117440512
log_buffer524288
open_cursors300
sessions225
sga_max_size437327188
shared_pool_reserved_size10066329
shared_pool_size201326592
sort_area_retained_size0
sort_area_size524288
14rowsselected.
SQL>showsga
TotalSystemGlobalArea437327188bytes
FixedSize451924bytes
VariableSize402653184bytes
DatabaseBuffers33554432bytes
RedoBuffers667648bytes
Variable Size表示MAX_SGA中除去db_cache后剩余的部分。
按照大家的建议,我做了如下修改
shared_pool_size=184800000(180M)
db_block_size=8192
db_cache_size=204800000(200M)
log_buffer=1024000(1M)
large_pool_size=51200000(50M)
java_pool_size=51457280(50M)
sort_area_size=524288(512K)
sort_area_retained_size=8192
调大了db_cache,减小了large_pool.
OS AS3U4
MEM 4GB
CPU 2×2.8GB
还有Configuring Linux kernel parameters
[etc][sysctl.conf]
kernel.msgmnb = 65535
kernel.msgmni = 2878
fs.file-max = 524288
kernel.sem = 256 64000 256 256
kernel.shmmax = 3098693632
[etc][security][limits.conf]
* soft nofile 4096
* hard nofile 65536
* soft nproc 16384
* hard nproc 16384
* soft nproc unlimited
* hard nproc unlimited
[etc][profile]
ulimit -u 16384 -n 65536
仅供参考
我在OCS的压力测试中,针对1000个并发用户在10g中的配置:
SQL> show sga
Total System Global Area 1677721600 bytes
Fixed Size 779628 bytes
Variable Size 384047764 bytes
Database Buffers 1291845632 bytes
Redo Buffers 1048576 bytes
---------------------
db_block_buffers = 0
db_block_size = 8192
db_cache_size = 419430400
hash_area_size = 131072
java_pool_size = 134217728
large_pool_size = 0
log_buffer = 1048576
open_cursors = 2000
sessions = 1200
sga_max_size = 1677721600
shared_pool_reserved_size = 10905190
shared_pool_size = 218103808
sort_area_retained_size = 0
sort_area_size = 65536
仅供参考