** 存储性能评估 **
在存储性能评估的时候,我们使用磁盘性能指数( DPI, Disk Performance Index ),下表列出了 DPI 中的各项指数,这个评分系统并不意味着对磁盘的使用和分配的全方位评估,而只是代表一个晴雨表,反映当前磁盘的使用和分配上是否存在需要改进或者注意的地方。
** MPI ** ** 指数 ** ** **
** 分类 ** ** **
|
** 所需等级 ** ** **
|
** 最高分 ** ** **
调整表和索引
|
是
|
30
表的行连接问题
|
无
|
30
分离关键的 Oracle 文件
|
是
|
30
回滚段的平衡
|
|
30
临时段的平衡
|
|
30
使用最多的前 10 个 SQL 的磁盘使用率
|
<5%
|
60
是否已经调整使用磁盘最多的前 25 个 SQL
|
是
|
40
MPI 指数
|
总分
|
250
1. 调整表和索引
由于表和索引的数据块通常是被同时读取的,所以应该尽量将表和其相关联的索引放置在不同的磁盘上,以便减少文件的 I/O 冲突。
检查方法:
** select ** i.index_name, t.table_name, t.tablespace_name
from user_tables t, user_indexes i
where t.table_name = i.table_name
and t.tablespace_name = i.tablespace_name;
返回结果是创建在相同表空间中的表和相关联的索引。建议创建新的表空间用于专门存放索引,并将当前的索引 rebuild 到新创建的表空间中。
** alter ** index idx_name rebuild tablespace ts_name;
评估准则:
** 等级 ** ** **
|
** 分数 ** ** **
---|---
表和索引放在同一磁盘上
|
0
存储使用了磁盘阵列,没有进一步调整
|
20
存储使用了磁盘阵列,对于 RAID 类型已经作过调整
|
30
表和索引已经规划在不同磁盘上
|
30
2. 表的行链接问题
当更新一张表,而数据块中又没有足够的剩余空间来容纳所作的修改时,就会发生 “ 行链接 ” 现象,该记录被链接到另外一个有足够空间的数据块中,也就是一条记录跨越了多个数据块,这样在读取该记录的时候就会消耗更多的 I/O ,当数据库中有大量的 “ 行链接 ” 现象存在时,数据库的整体性能就会下降。
检查方法:
** sqlplus /nolog **
** connect app_user/password **
** SQL> @$ORACLE_HOME/rdbms/admin/utlchain.sql **
** SQL> analyze ** table
1<table_name> **list** **chained** **rows** ; ** **
2
3** SQL> select ** **count** (*) chained_rows, table_name
4**from** chained_rows
5**group** **by** table_name; ** **
6
7如果没有返回任何行,则表示没有 “ 行链接 ” 现象。否则将按照已经分析过的表显示每张表中有多少记录出现了 “ 行链接 ” 现象。
8
9“ 行链接 ” 现象的产生跟 PCTFREE 参数的设置不当有关系。 PCTFREE 值默认为 10% ,如果系统中存在大量行链接,表示这个参数指定的块保留空间过小,不足以容纳块中所有记录的更新操作。此时应该增大相应表的 PCTFREE 值。
10
11评估准则:
12
13** 等级 ** ** **
14
15|
16
17** 分数 ** ** **
18
19---|---
20
21存在行链接现象
22
23|
24
250
26
27不存在行链接现象
28
29|
30
3130
32
33**3.** **分离关键的** ** Oracle 文件 **
34
35无论是出于安全性的考虑还是性能的考虑,都建议将关键的 Oracle 文件分布在可用的独立磁盘上。
36
37首先在错误出现之后,用来被恢复的数据文件和用来恢复的控制文件,重作日志文件,归档日志文件应该分离存放。如果有可能,将下列各个关键文件分布在不同的磁盘上。
38
39系统表空间( SYSTEM ),临时表空间( TEMP ),回滚表空间( UNDO ),联机重作日志文件( REDO )和归档日志文件( ARCH ),经常访问的用户表空间,经常访问的用户索引表空间,操作系统盘, $ORACL_EBASE 中的关键 Oracle 软件文件。
40
41至少联机重作日志文件( REDO )和归档日志文件( ARCH )应该跟其它文件存放在不同的磁盘上,并且由于日志文件的大部分时间为只写属性,所以需要考虑 RAID5 在写方面的弱势,尽量不要将日志文件存放在 RAID5 的阵列组上。
42
43检查方法:
44
45** select ** file_name, tablespace_name, bytes
46**from** dba_data_files
47**union** **all**
48**select** file_name, tablespace_name, bytes
49**from** dba_temp_files
50**union** **all**
51**select** **name** file_name, **NULL** , **NULL**
52**from** v$controlfile
53**union** **all**
54**select** **member** file_name, to_char(a. **group** #) tablespace_name, b.bytes bytes
55**from** v$logfile a, v$log b
56**where** a. **group** # = b. **group** #
57**union** **all** ( **select** **value** file_name, **NULL** , **NULL**
58**from** v$parameter
59**where** **name** **like** 'log_archive_dest_%'
60**and** **value** **is** **not** **null**
61**minus**
62**select** **value** file_name, **NULL** , **NULL**
63**from** v$parameter
64**where** **name** **like** 'log_archive_dest_state%' );
65
66返回数据库中所有关键文件存储的位置,由 DBA 和 SA 考察返回的结果,确认已经对于关键文件的存储位置作过符合实际情况的调整。
67
68评估准则:
69
70** 等级 ** ** **
71
72|
73
74** 分数 ** ** **
75
76---|---
77
78没有调整,全部在单个磁盘上
79
80|
81
820
83
84没有调整,全部在 RAID 上
85
86|
87
8820
89
90已经调整
91
92|
93
9430
95
96**4.** **回滚段的平衡**
97
98在 Oracle 9i 和 Oracle9i 之前如果没有使用回滚段自动管理,那么对于回滚段的性能仍然是需要监控并且调整的。
99
100检查是否使用了回滚段自动管理:
101
102** select ** **name** , **value** **from** v$parameter **where** **name** **like** '%undo_%' ; ** **
103
104** **
105
106如果返回结果中 undo_management 的值是 AUTO ,则表示使用了回滚段自动管理,同时 undo_tablespace 值显示了自动管理使用的回滚表空间, undo_retention <SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Co</table_name>