SQL
罠①: 断片化率と page_count の見方
出典: 業務 SE が SQL Server INDEX 断片化に手を出す前に見る 3 箇所 — REBUILD / REORGANIZE / 放置の判断軸 — 罠①: 断片化率と page_count の見方
-- 全 INDEX の断片化を一発で返す (SAMPLED モード)
SELECT
OBJECT_NAME(ps.object_id) AS table_name,
si.name AS index_name,
si.type_desc AS index_type,
ps.avg_fragmentation_in_percent AS frag_pct,
ps.avg_page_space_used_in_percent AS page_used_pct,
ps.page_count,
ps.fragment_count,
-- 判断ヒント列
CASE
WHEN ps.page_count < 1000 THEN '放置 (ROI 不足)'
WHEN ps.avg_fragmentation_in_percent < 5 THEN '放置'
WHEN ps.avg_fragmentation_in_percent < 30 THEN 'REORGANIZE'
ELSE 'REBUILD'
END AS suggested_action
FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, 'SAMPLED') ps
JOIN sys.indexes si
ON si.object_id = ps.object_id AND si.index_id = ps.index_id
WHERE si.name IS NOT NULL
AND ps.page_count > 0
ORDER BY ps.avg_fragmentation_in_percent DESC;
▸ 実行ボタンで結果を表示
Source収録記事
この snippet は記事の「罠①: 断片化率と page_count の見方」セクションに登場する。コードの前後の文脈・ハマりどころの解説は記事本文で。
同じ記事から
3 件-- 現在のロック保持状況 (Sch-M / Sch-S を含む) SELECT request_session_id AS session_id, resource_type,
▶ 実行可
罠 2-c: Sch-M ロックは ONLINE でも瞬間発生する
#20036fe3c264
-- 全 INDEX の fill factor 現状 SELECT OBJECT_NAME(i.object_id) AS table_name, i.name AS index_name,
▶ 実行可
fill factor の現状確認 SQL
#ace9ba4117bf
-- 更新多い INDEX を REBUILD + fill factor 85% で再構築 ALTER INDEX [IX_Orders_OrderDate] ON [dbo].[Orders] REBUILD WITH (未収録
REBUILD と一緒に fill factor を変える書き方
#9b242fc587e9
