背景
長期間使っているシステムで、特定のトランザクションテーブルに対する読み込みの遅さや
テーブルのサイズの増加によって、ディスクを圧迫されるなどの課題が出てきた
原因
データの増加によるディスク読み込み量の増加
対策
テーブル圧縮を実施する
圧縮手順
1. テーブルサイズの確認
下記のクエリで圧縮前テーブルサイズを確認できる
SELECT
t.name AS 'テーブル名',
SUM(p.rows) AS '行数',
SUM(a.total_pages) * 8 / 1024 AS '割り当て領域(MB)',
SUM(a.used_pages) * 8 / 1024 AS '使用済み領域(MB)',
(SUM(a.total_pages) - SUM(a.used_pages)) * 8 / 1024 AS '未使用領域(MB)'
FROM
sys.tables t
JOIN
sys.indexes i ON t.object_id = i.object_id
JOIN
sys.partitions p ON i.object_id = p.object_id AND i.index_id = p.index_id
JOIN
sys.allocation_units a ON p.partition_id = a.container_id
WHERE
t.name = 'テーブル名'
GROUP BY
t.name
ORDER BY
'未使用領域(MB)' DESC;
2. ページ圧縮
下記のクエリでページ圧縮を実行する
(圧縮にはページレベルの圧縮と行レベルの圧縮があるが、一般的にページ圧縮のほうが圧縮率が高いらしい)
ALTER TABLE
[スキーマ名].[テーブル名] REBUILD PARTITION = ALL
WITH
(DATA_COMPRESSION = PAGE)
3. 圧縮結果確認
テーブルサイズが圧縮されていることを確認する
ディスク上のサイズが75MBから46MBに圧縮されたため読み込み量が少なくなった