2011年12月24日土曜日

groovyとoracleでデータファイルごとのI/O回数・ブロック数を取得する

groovyとoracleでデータファイルごとのI/O回数・ブロック数を取得するには、以下のコードを実行します。
import groovy.sql.Sql

sql = Sql.newInstance(
  "jdbc:oracle:thin:@localhost:1521:orcl", 
   "system",
   "manager", 
   "oracle.jdbc.driver.OracleDriver")

query = '''
select
  to_char(current_timestamp, 'yyyy/mm/dd hh24:mi:ss') as ct,
  vt.name as tablespace_name,
  vd.name as filename,
  vfs.phyrds,  -- 実行された物理読取り数
  vfs.phywrts,  -- DBWRに書込みが必要となった回数
  vfs.phyblkrd,  -- 読み込まれた物理ブロックの数
  vfs.phyblkwrt  -- ディスクに書き込まれたブロックの数
from
  v$filestat vfs
  join v$datafile vd
    on (vfs.file# = vd.file#)
  join v$tablespace vt
    on (vd.ts# = vt.ts#)
'''
// ファイル毎のI/Oを表示
println "tablespace_name, filename, phyrds, phywrts, phyblkrd, phyblkwrt"
sql.eachRow(query){
  println "${it.ct}, ${it.tablespace_name}, ${it.filename}, " +
    "${it.phyrds}, ${it.phywrts}, " + 
    "${it.phyblkrd}, ${it.phyblkwrt}"
}

動作環境
groovy 1.8.4, JDK6 Update29, Oracle11g R2

0 件のコメント:

コメントを投稿