2010年1月1日金曜日

groovyとSQL Serverでインデックスの断片化情報を取得する

groovyとSQL Serverでインデックスの断片化情報を取得するには、以下のコードを実行します。

import groovy.sql.Sql

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

query = """
SELECT tab.name as table_name,
ind.name as index_name,
partition_number,
index_type_desc, alloc_unit_type_desc,
index_depth, avg_fragmentation_in_percent,
fragment_count, avg_fragment_size_in_pages,
avg_page_space_used_in_percent, record_count,
min_record_size_in_bytes, max_record_size_in_bytes,
avg_record_size_in_bytes
FROM sys.dm_db_index_physical_stats(DB_ID('test1'),
NULL, NULL, NULL, 'SAMPLED') ps
join sys.tables tab
on (ps.object_id = tab.object_id)
join sys.indexes ind
on ( ps.object_id = ind.object_id
and ps.index_id = ind.index_id)
"""
// インデックスの断片化情報を取得
sql.eachRow(query){
// テーブル名
println("table_name:${it.table_name}")
// インデックス名
println("index_name:${it.index_name}")
// パーティション番号
println("partition_number:${it.partition_number}")
// インデックスの種類の説明
println("index_type_desc:${it.index_type_desc}")
// インデックスレベルの数
println("index_depth:${it.index_depth}")
// インデックスの断片化
println("avg_fragmentation_in_percent:${it.avg_fragmentation_in_percent}")
// 断片化の数
println("fragment_count:${it.fragment_count}")
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

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

0 件のコメント:

コメントを投稿