以下脚本可以用于收集Oracle Instance I/O 性能信息:
set linesize 80 pagesize 1400;
SELECT ios.filetype_name,
df.file_name,
df.tablespace_name,
ios.small_read_megabytes + ios.large_read_megabytes read_megabytes,
ios.small_write_megabytes + ios.large_write_megabytes write_megabytes,
ios.small_read_reqs + ios.large_read_reqs read_reqs,
ios.small_write_reqs + ios.large_write_reqs write_reqs,
ios.small_read_servicetime + ios.large_read_servicetime read_servicetime,
ios.small_write_servicetime + ios.large_write_servicetime write_servicetime,
ios.small_read_reqs,
ios.small_read_servicetime
FROM v$iostat_file ios, dba_data_files df
WHERE ios.filetype_name = 'Data File'
AND df.file_id = ios.file_no
UNION ALL
SELECT ios.filetype_name,
tf.file_name,
tf.tablespace_name,
ios.small_read_megabytes + ios.large_read_megabytes read_megabytes,
ios.small_write_megabytes + ios.large_write_megabytes write_megabytes,
ios.small_read_reqs + ios.large_read_reqs read_reqs,
ios.small_write_reqs + ios.large_write_reqs write_reqs,
ios.small_read_servicetime + ios.large_read_servicetime read_servicetime,
ios.small_write_servicetime + ios.large_write_servicetime write_servicetime,
ios.small_read_reqs,
ios.small_read_servicetime
FROM v$iostat_file ios, dba_temp_files tf
WHERE ios.filetype_name = 'Temp File'
AND tf.file_id = ios.file_no
UNION ALL
SELECT ios.filetype_name,
NULL file_name,
NULL tablespace_name,
ios.small_read_megabytes + ios.large_read_megabytes read_megabytes,
ios.small_write_megabytes + ios.large_write_megabytes write_megabytes,
ios.small_read_reqs + ios.large_read_reqs read_reqs,
ios.small_write_reqs + ios.large_write_reqs write_reqs,
ios.small_read_servicetime + ios.large_read_servicetime read_servicetime,
ios.small_write_servicetime + ios.large_write_servicetime write_servicetime,
ios.small_read_reqs,
ios.small_read_servicetime
FROM v$iostat_file ios
WHERE ios.filetype_name NOT IN ('Temp File', 'Data File')
/
SELECT function_name,
small_read_megabytes + small_write_megabytes + large_read_megabytes +
large_write_megabytes throughput_megabytes,
small_read_reqs + small_write_reqs + large_read_reqs +
large_write_reqs throughput_reqs,
number_of_waits,
wait_time
FROM v$iostat_function
/
SELECT * FROM v$iostat_file
/
col filetype_name format a14 heading "File Type"
col reads format 9,999,999 heading "Reads"
col writes format 9,999,999 heading "Writes"
col read_time_sec format 99,999 heading "Read Time|sec"
col write_time_sec format 99,999 heading "Write Time|sec"
col avg_sync_read_ms format 999.99 heading "Avg Sync|Read ms"
col total_io_seconds format 9\99,999,999 heading "Total IO|sec"
set lines 80
set pages 10000
set echo on
WITH iostat_file AS
(SELECT filetype_name,SUM(large_read_reqs) large_read_reqs,
SUM(large_read_servicetime) large_read_servicetime,
SUM(large_write_reqs) large_write_reqs,
SUM(large_write_servicetime) large_write_servicetime,
SUM(small_read_reqs) small_read_reqs,
SUM(small_read_servicetime) small_read_servicetime,
SUM(small_sync_read_latency) small_sync_read_latency,
SUM(small_sync_read_reqs) small_sync_read_reqs,
SUM(small_write_reqs) small_write_reqs,
SUM(small_write_servicetime) small_write_servicetime
FROM sys.v_$iostat_file
GROUP BY filetype_name)
SELECT filetype_name, small_read_reqs + large_read_reqs reads,
large_write_reqs + small_write_reqs writes,
ROUND((small_read_servicetime + large_read_servicetime)/1000)
read_time_sec,
ROUND((small_write_servicetime + large_write_servicetime)/1000)
write_time_sec,
CASE WHEN small_sync_read_reqs > 0 THEN
ROUND(small_sync_read_latency / small_sync_read_reqs, 2)
END avg_sync_read_ms,
ROUND(( small_read_servicetime+large_read_servicetime
+ small_write_servicetime + large_write_servicetime)
/ 1000, 2) total_io_seconds
FROM iostat_file
ORDER BY 7 DESC
/