数据库性能检查指导方案 - Part I

** 数据库性能检查指导方案 ** ** **


** 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

Published At
Categories with 数据库类
Tagged with
comments powered by Disqus