Skip to content

投稿

SQL Azure のインデックス断片化、誰が知っていた!

2015年4月26日 • 3 分で読める

SQL Azure のインデックス断片化、誰が知っていた!

プロジェクトに1年以上携わっており、この1年間でアプリケーションとデータが大幅に成長しました。新機能の追加が絶え間なく続いています。コードのリファクタリングに戻ることはほとんどありませんでした。先週、データ量の多いページの読み込みが遅くなっていることに気づきました。最悪の場合、1つのビューの読み込みに最大30秒かかることもあります。最大読み込み時間の10倍です…

素朴かもしれませんが、SQL Azure のインデックス断片化を考慮していませんでした。クラウドです!オンプレミスの問題には免疫があるはずです…どうやらインデックス断片化はクラウドでも問題のようです。

MSDN ブログでいくつかのクエリを見つけました。これらは断片化されたインデックスを特定し、それらを再構築します。

インデックス断片化を表示する最初のクエリを実行した後、50% 以上の断片化を持つインデックスが見つかりました。記事によると、10% を超えるものは注意が必要です。

最初のクエリ インデックス断片化を表示

--Get the fragmentation percentage

SELECT
 DB_NAME() AS DBName
,OBJECT_NAME(ps.object_id) AS TableName
,i.name AS IndexName
,ips.index_type_desc
,ips.avg_fragmentation_in_percent
FROM sys.dm_db_partition_stats ps
INNER JOIN sys.indexes i
ON ps.object_id = i.object_id
AND ps.index_id = i.index_id
CROSS APPLY sys.dm_db_index_physical_stats(DB_ID(), ps.object_id, ps.index_id, null, 'LIMITED') ips
ORDER BY ps.object_id, ps.index_id

2番目のクエリ インデックスを再構築

--Rebuild the indexes
DECLARE @TableName varchar(255)

DECLARE TableCursor CURSOR FOR
(
 SELECT '[' + IST.TABLE_SCHEMA + '].[' + IST.TABLE_NAME + ']' AS [TableName]
 FROM INFORMATION_SCHEMA.TABLES IST
 WHERE IST.TABLE_TYPE = 'BASE TABLE'
 )

 OPEN TableCursor
 FETCH NEXT FROM TableCursor INTO @TableName
WHILE @@FETCH_STATUS = 0

 BEGIN
 PRINT('Rebuilding Indexes on ' + @TableName)
Begin Try
 EXEC('ALTER INDEX ALL ON ' + @TableName + ' REBUILD with (ONLINE=ON)')
End Try
Begin Catch
 PRINT('Cannot do rebuild with Online=On option, taking table ' + @TableName+' down for douing rebuild')
 EXEC('ALTER INDEX ALL ON ' + @TableName + ' REBUILD')
 End Catch
FETCH NEXT FROM TableCursor INTO @TableName
END

CLOSE TableCursor
DEALLOCATE TableCursor

ソース

Author: Chuck Conway is an AI Engineer with nearly 30 years of software engineering experience. He builds practical AI systems—content pipelines, infrastructure agents, and tools that solve real problems—and shares what he’s learning along the way. Connect with him on social media: X (@chuckconway) or visit him on YouTube and on SubStack.

著者: Chuck Conwayは、ソフトウェアエンジニアリングの経験が30年近くあるAIエンジニアです。彼は実用的なAIシステム(コンテンツパイプライン、インフラストラクチャエージェント、実際の問題を解決するツール)を構築し、学んだことを共有しています。ソーシャルメディアで彼とつながってください: X (@chuckconway) または YouTubeSubStack で彼を訪問してください。

↑ トップに戻る

こちらもおすすめ