** 数据库性能检查指导方案 ** ** **
** Author: Kamus **
** Date ** ** : ** ** 2004-9 **
在系统稳定之后,应该按照本指导方案每个月检查一次产品数据库。
该指导方案适用于 Oracle9i 数据库,因为有些脚本在 9i 中才可以运行。
检查方式均为以 sysdba 身份登录数据库以后在 SQLPLUS 中执行命令脚本(每小节的“检查方法”部分有详细的命令脚本)。
登陆数据库的命令:
sqlplus “sys/password as sysdba”
一. 内存性能评估
在内存性能评估的时候,我们使用内存性能指数( MPI, Memory Performance Index ),下表列出了 MPI 中的各项指数,这个评分系统并不意味着对内存的使用和分配的全方位评估,而只是代表一个晴雨表,反映当前系统内存的使用和分配状况。
** MPI ** ** 指数 **
** 分类 **
|
** 所需等级 **
|
** 最高分 **
缓冲区命中率( Buffer Cache )
|
>98%
|
30
数据字典命中率( Dictionary Cache )
|
>98%
|
30
库缓存命中率( Library Cache )
|
>98%
|
30
内存中的排序( Sort in Memory )
|
>98%
|
30
空闲的数据缓冲区比例
|
10-25%
|
30
使用最多的前 10 个 SQL 占用的内存
|
<5%
|
60
是否已经调整使用最多的前 25 个 SQL
|
是
|
30
是否尝试固定高速缓存中经常使用的对象
|
是
|
10
MPI 指数
|
总分
|
250
** 1. ** ** 缓冲区命中率 **
显示了对于数据总读取量而言,非磁盘读取(缓冲区命中)的百分比。当然,十分高的命中率并不代表数据库性能一定优良,也有可能是糟糕的 SQL 引起了大量的缓冲区读操作,只有在已经调整过首要的查询之后,这个命中率才能更好地反映数据库性能。
检查方法:
** select ** ( 1 - ( sum (decode( name , 'physical reads' , value , 0 )) /
( sum (decode( name , 'db block gets' , value , 0 )) +
sum (decode( name , 'consistent gets' , value , 0 ))))) * 100
"Hit Ratio"
from v$sysstat;
评估准则:
** 等级 **
|
** 分数 **
---|---
<90%
|
0
90-94%
|
10
95-98%
|
20
>98%
|
30
** 2. ** ** 数据字典命中率 **
显示了对数据字典和其它对象的内存读操作的百分比。
检查方法:
** select ** ( 1 - ( sum (getmisses) / sum (gets))) * 100 "Hit Ratio"
from v$rowcache;
评估准则:
** 等级 **
|
** 分数 **
---|---
<85%
|
0
86-92%
|
10
92-98%
|
20
>98%
|
30
** 3. ** ** 库缓存命中率 **
显示了对 SQL 和 PL/SQL 对象的内存读操作的百分比。同样注意,很高的命中率并不总是反映数据库性能优秀。
检查方法:
** select ** sum (pins) / ( sum (pins) + sum (reloads)) * 100 "Hit Ratio"
from v$librarycache;
评估准则:
** 等级 **
|
** 分数 **
---|---
<90%
|
0
90-94%
|
10
94-98%
|
20
>98%
|
30
** 4. ** ** 内存中的排序 **
根据初始化参数 PGA_AGGREGATE_TARGET 或者 SORT_AREA_SIZE 的值,用户的排序操作可能在内存中执行,也可能在临时表空间中执行。这个检查用以显示在内存中排序占总排序的百分比。
检查方法:
** select ** a. value "Disk Sorts",
b. value "Memory Sorts",
round(( 100 * b. value ) /
decode((a. value + b. value ), 0 , 1 , (a. value + b. value )),
2 ) "Pct Memory Sorts"
from v$sysstat a, v$sysstat b
where a. name = 'sorts (disk)'
and b. name = 'sorts (memory)' ;
评估准则:
** 等级 **
|
** 分数 **
---|---
<90%
|
0
90-94%
|
10
94-98%
|
20
>98%
|
30
** 5. ** ** 空闲的数据缓冲区比例 **
空闲的记录数除以 X$BH 表中的记录总数(即所分配的数据块缓冲区的总数)得到的空闲缓冲区百分比。同样注意,拥有众多空闲缓冲区的数据库不一定是最佳环境,因为可能是缓冲区设置过大,浪费内存。
检查方法:
** select ** decode(state,
0 ,
'FREE' ,
1 ,
decode(lrba_seq, 0 , 'AVAILABLE' , 'BEING USED' ),
3 ,
'BEING USED' ,
state) "Block Status",
<SPAN style="mso-spacer