1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【SQLserver】テーブル圧縮手順

Posted at

背景

長期間使っているシステムで、特定のトランザクションテーブルに対する読み込みの遅さや
テーブルのサイズの増加によって、ディスクを圧迫されるなどの課題が出てきた

原因

データの増加によるディスク読み込み量の増加

対策

テーブル圧縮を実施する

圧縮手順

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;

実行結果
スクリーンショット 2025-03-31 135744.png

2. ページ圧縮

下記のクエリでページ圧縮を実行する
(圧縮にはページレベルの圧縮と行レベルの圧縮があるが、一般的にページ圧縮のほうが圧縮率が高いらしい)

ALTER TABLE 
    [スキーマ名].[テーブル名] REBUILD PARTITION = ALL
WITH
    (DATA_COMPRESSION = PAGE)

3. 圧縮結果確認

テーブルサイズが圧縮されていることを確認する
スクリーンショット 2025-03-31 140004.png
ディスク上のサイズが75MBから46MBに圧縮されたため読み込み量が少なくなった

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?