原帖由 nocode 于 2007-11-20 11:45 发表
我刚接触内存数据库的时候也拿到过一大堆的性能对比报告,那时我一直在想一个问题,拿oracle来说,oracle本身提供将对象固定到内存的功能,如果将主要对象也都全部钉入内存后再跟内存数据库比会怎么样呢?速度可 ...
SGA是否越大越好?如何用statspack的报表来验证?
如果你有足够的内存,你会不会将SGA开得足够大?
有位朋友的物理内存16G,将SGA开到9G左右,实际上他的数据库才13G,
数据库几乎全被缓存到SGA中,但下边的人还是说慢,
statspack的报表显示如下:
Load Profile
~~~~~~~~~~~~
Per Second Per Transaction
--------------- ---------------
Redo size:
6,679.72
15,071.00
Logical reads:
80,724.11
182,132.26
Block changes:
23.75
53.58
Physical reads:
0.70
1.57
Physical writes:
1.48
3.34
Instance Efficiency Percentages (Target 100%)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Buffer Nowait %:100.00 Redo NoWait %:
100.00
BufferHit %:100.00In-memory Sort %:
100.00
Library Hit %: 99.74Soft Parse %:
99.93
Execute to Parse %: 31.87 Latch Hit %:
99.87
Parse CPU to Parse Elapsd %: 95.57 % Non-Parse CPU:
98.71
由于SGA足够的大,它的数据库中Buffer Hint是100%,其它的各项指标也非常好,
但在Load Profile项中可以看到Logical reads比较突出,
然后看statspack报表的TOP SQL部分,发现SQL的单次逻辑读都比较大,
通过优化SQL,系统速度明显提高,然后将SGA从9G依次调到3G,
通过报表观察,各项指标并没有显示下降,top 5 event也没有什么变化,
然后将SGA从3G调到1G这时,虽然Load profile及Instance Efficiency per
的各项指标没有明显下降,但top 5 event中等待事件的数量上升的较多.
从这也可以看出,运转良好的数据库,它的数据量与SGA有一定的比例关系,
如果数据量一定的情况下,SGA大大超过那个比例,系统的性能并不能有很大的提高.
随着业务及数据量的增加,数据库的性能应该是慢慢恶化,
如果性能调优的速度赶不上系统恶化的速度,那应用的速度就会让客户无法忍受
|