2010年1月13日水曜日

groovyとSQL ServerでデータファイルとログファイルのI/O統計を取得する

groovyとSQL ServerでデータファイルとログファイルのI/O統計を取得するには、以下のコードを実行します。

import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=test1",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

query = """
select
fs.database_id,
fs.file_id,
df.name,
fs.sample_ms,
fs.num_of_reads,
fs.num_of_bytes_read,
fs.io_stall_read_ms,
fs.num_of_writes,
fs.num_of_bytes_written,
fs.io_stall_write_ms,
fs.io_stall,
fs.size_on_disk_bytes,
fs.file_handle
from sys.dm_io_virtual_file_stats(DB_ID('test1'), NULL) fs
join sys.database_files df
on (fs.file_id = df.file_id)
"""
// データファイルとログファイルのI/O統計
sql.eachRow(query){
// データベースID
println("database_id:${it.database_id}")
// ファイルID
println("file_id:${it.file_id}")
// ファイル論理名
println("name:${it.name}")
// コンピュータ起動後の経過秒
println("sample_ms:${it.sample_ms}")
// 読み取りの数
println("num_of_reads:${it.num_of_reads}")
// 読み取ったバイト数
println("num_of_bytes_read:${it.num_of_bytes_read}")
// 読み取りを待機した総時間(ms)
println("io_stall_read_ms:${it.io_stall_read_ms}")
// 書き込みの数
println("num_of_writes:${it.num_of_writes}")
// 書き込んだバイト数
println("num_of_bytes_written:${it.num_of_bytes_written}")
// 書き込みを待機した総時間(ms)
println("io_stall_write_ms:${it.io_stall_write_ms}")
// I/O待機した総時間(ms)
println("io_stall:${it.io_stall}")
// ディスク上のバイト数
println("size_on_disk_bytes:${it.size_on_disk_bytes}")
// windowsファイルハンドル
println("file_handle:${it.file_handle}")
println "----"
}


動作環境
Groovy 1.6.5, JDK6 Update16, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
sys.dm_io_virtual_file_stats (Transact-SQL)

0 件のコメント:

コメントを投稿