共计 4585 个字符,预计需要花费 12 分钟才能阅读完成。
本篇内容主要讲解“怎么理解 I / O 性能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让丸趣 TV 小编来带大家学习“怎么理解 I / O 性能”吧!
为了理解 I / O 性能,你必须要详细了解存储文件的存储层次信息。Oracle 提供了一组动态性能视国来显示文件到逻辑卷中间层到实际的物理设备之间的映射信息。使用这些动态性能视图,可以找到一个文件的任何数据块所内置的实际物理磁盘。Oracle 数据库使用一个名叫 FMON 的后台进程来管理映射信息。Oracle 提供了 PL/SQL dbms_storage_map 包来将映射操作填充到映射视图中。Oracle 数据库文件映射当映射 Oracle ASM 文件时不需要使用第三方的动态库。另外,Oracle 数据库支持在所有操作系统平台上对 Oracle ASM 文件的映射。
对 Oracle ASM 文件启用文件映射
为了启用文件映射,需要将参数 file_mapping 设置为 true。数据库实例不必关闭来设置这个参数。可以使用以下 alter system 语句来设置这个参数:
SQL alter system set file_mapping=true scope=both sid= *
System altered.
执行合适的 dbms_storage_map 映射过程
. 在冷启动情况下,Oracle 数据库在刚刚启动时没有映射操作被调用。可以执行 dbms_storage_map.map_all 过程来为数据库相关的整个 I / O 子系统来构建映射信息。例如,下面的命令构建映射信息并且提供 10000 事件:
SQL execute dbms_storage_map.map_all(10000);
PL/SQL procedure successfully completed.
. 在暖启动情况下,Oracle 数据库已经构建了映射信息,可以选择执行 dbms_storage_map.map_save 过程来将映射信息保存在数据字典中。缺省情况下这个过程将被 dbms_storage_map.map_all 过程调用,这将强制 SGA 中的所有映射信息被刷新到磁盘。缺省情况下 dbms_storage_map.map_save 过程将被 dbms_storage_map.map_all()。在重启数据库后,使用 dbms_storage_map.restore()过程来还原映射信息到 SGA 中。如果需要,dbms_storage_map.map_all()可以用来刷新映射信息。
由 dbms_storage_map 包生成的映射信息会被捕获到动态性能视图中。这些视图包括 v$map_comp_list,v$map_element,v$map_ext_element,v$map_file,v$map_file_extent,v$map_file_io_stack,v$map_library 与 v$map_subelement。
可以使用 v$map_file 来查询文件映射信息:
SQL select file_map_idx, substr(file_name,1,45), file_type, file_structure from v$map_file;
FILE_MAP_IDX SUBSTR(FILE_NAME,1,45) FILE_TYPE FILE_STRU
------------ ------------------------------------------------------------------------------------------ ----------- ---------
0 +DATA/CS/DATAFILE/system.272.970601831 DATAFILE ASMFILE
1 +DATA/CS/DATAFILE/sysaux.273.970601881 DATAFILE ASMFILE
2 +DATA/CS/DATAFILE/undotbs1.274.970601905 DATAFILE ASMFILE
3 +DATA/CS/4700A987085B3DFAE05387E5E50A8C7B/DAT DATAFILE ASMFILE
4 +DATA/CS/4700A987085B3DFAE05387E5E50A8C7B/DAT DATAFILE ASMFILE
5 +DATA/CS/DATAFILE/users.275.970601909 DATAFILE ASMFILE
6 +DATA/CS/4700A987085B3DFAE05387E5E50A8C7B/DAT DATAFILE ASMFILE
7 +DATA/CS/DATAFILE/undotbs2.284.970602381 DATAFILE ASMFILE
8 +DATA/CS/DATAFILE/test.326.976211663 DATAFILE ASMFILE
9 +DATA/CS/DATAFILE/jy.331.976296525 DATAFILE ASMFILE
10 +DATA/CS/6C61AD7B443C2CD2E053BE828A0A2A74/DAT DATAFILE ASMFILE
11 +DATA/CS/6C61AD7B443C2CD2E053BE828A0A2A74/DAT DATAFILE ASMFILE
12 +DATA/CS/6C61AD7B443C2CD2E053BE828A0A2A74/DAT DATAFILE ASMFILE
13 +DATA/CS/ONLINELOG/group_2.277.970601985 LOGFILE ASMFILE
14 +DATA/CS/ONLINELOG/group_1.278.970601985 LOGFILE ASMFILE
15 +DATA/CS/ONLINELOG/group_3.285.970602759 LOGFILE ASMFILE
16 +DATA/CS/ONLINELOG/group_4.286.970602761 LOGFILE ASMFILE
17 +DATA/CS/ONLINELOG/redo05.log LOGFILE ASMFILE
18 +DATA/CS/ONLINELOG/redo06.log LOGFILE ASMFILE
19 +DATA/CS/ONLINELOG/redo07.log LOGFILE ASMFILE
20 +DATA/CS/ONLINELOG/redo08.log LOGFILE ASMFILE
21 +DATA/CS/ONLINELOG/redo09.log LOGFILE ASMFILE
22 +DATA/CS/ONLINELOG/redo10.log LOGFILE ASMFILE
23 +DATA/CS/TEMPFILE/temp.279.970602003 TEMPFILE ASMFILE
24 +DATA/CS/67369AA1C9AA3E71E053BE828A0A8262/TEM TEMPFILE ASMFILE
25 +DATA/CS/6C61AD7B443C2CD2E053BE828A0A2A74/TEM TEMPFILE ASMFILE
26 +DATA/arch/1_222_970601983.dbf ARCHIVEFILE ASMFILE
27 +DATA/arch/1_223_970601983.dbf ARCHIVEFILE ASMFILE
28 +DATA/arch/2_277_970601983.dbf ARCHIVEFILE ASMFILE
29 +DATA/arch/2_278_970601983.dbf ARCHIVEFILE ASMFILE
30 +DATA/arch/2_279_970601983.dbf ARCHIVEFILE ASMFILE
31 +DATA/CS/CONTROLFILE/current.276.970601979 CONTROLFILE ASMFILE
31 rows selected.
可以使用 dbms_storage_map PL/SQL 包中的过程来控制映射操作。例如,可以使用 dbms_storage_map.map_object 过程通过指定对象名,所有者与类型来对数据库对象来构建映射信息。在 dbms_storage_map.map_object 过程运行之后,那么可以通过查询 map_object 视图来查询映射信息
SQL execute dbms_storage_map.map_object( T1 , C##TEST , TABLE
PL/SQL procedure successfully completed.
SQL select io.object_name o_name, io.object_owner o_owner, io.object_type o_type,
2 mf.file_name, me.elem_name, io.depth,
3 (sum(io.cu_size * (io.num_cu - decode(io.parity_period, 0, 0,
4 trunc(io.num_cu / io.parity_period)))) / 2) o_size
5 from map_object io, v$map_element me, v$map_file mf
6 where io.object_name = T1
7 and io.object_owner = C##TEST
and io.object_type = TABLE
8 9 and me.elem_idx = io.elem_idx
10 and mf.file_map_idx = io.file_map_idx
11 group by io.elem_idx, io.file_map_idx, me.elem_name, mf.file_name, io.depth,
12 io.object_name, io.object_owner, io.object_type
13 order by io.depth;
O_NAME O_OWNER O_TYP FILE_NAME ELEM_NAME DEPTH O_SIZE
-------------------- -------------------- ----- -------------------------------------------------- -------------------- ---------- ----------
T1 C##TEST TABLE +DATA/CS/DATAFILE/users.275.970601909 +/dev/asmdisk04 0 64
到此,相信大家对“怎么理解 I / O 性能”有了更深的了解,不妨来实际操作一番吧!这里是丸趣 TV 网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!