データベースの運用効率を高めるには、ストレージ管理の最適化が必要です。その中心となるのが セグメント管理。この記事では、初心者でも理解しやすいように、セグメント管理の基礎から実践的な応用方法までを図解とともに詳しく解説します。
リンク
リンク
リンク
1. セグメント管理とは?
Oracleデータベースにおける「セグメント」とは、表や索引などのデータが格納される物理的なストレージ単位を指します。
セグメントの構造
セグメントは以下の3つの要素で構成されます:
- セグメント(Segment): データベースオブジェクト全体の格納領域。
- エクステント(Extent): セグメントを構成する連続したデータブロックの集合。
- データブロック(Data Block): データベースの最小の記憶単位。
図解:セグメントの階層構造
cssコードをコピーする[セグメント]
├─ [エクステント1]
│ ├─ [データブロック1]
│ ├─ [データブロック2]
│ └─ ...
├─ [エクステント2]
│ ├─ [データブロック1]
│ ├─ [データブロック2]
│ └─ ...
└─ ...
2. セグメント管理の種類
Oracleデータベースでは、セグメント領域の管理方法として以下の2種類が用意されています。
自動セグメント領域管理(ASSM: Automatic Segment Space Management)
特徴
- 自動化された領域管理。
- Oracleデータベースの推奨設定で、ほとんどのシナリオで利用可能。
メリット
- PCTFREEやPCTUSEDの設定が不要。
- 同時トランザクションでも競合が少ない。
- パフォーマンス最適化のメンテナンスが容易。
設定例
表領域作成時に、SEGMENT SPACE MANAGEMENT AUTO
を指定します。
CREATE TABLESPACE example_tbs
DATAFILE '/u01/app/oracle/oradata/example01.dbf' SIZE 100M
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO;
手動セグメント領域管理(MSSM: Manual Segment Space Management)
特徴
- 手動で制御可能な領域管理。
- 主に従来のシステムや特殊な要件で利用。
メリット
- PCTFREEやPCTUSEDの詳細な設定が可能。
- 高度なカスタマイズが必要な場合に有効。
設定例
表領域作成時に、SEGMENT SPACE MANAGEMENT MANUAL
を指定します。
CREATE TABLESPACE example_tbs_manual
DATAFILE '/u01/app/oracle/oradata/example02.dbf' SIZE 100M
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT MANUAL;
図解:ASSMとMSSMの比較
+---------------------------+----------------------------+
| ASSM | MSSM |
+---------------------------+----------------------------+
| 自動的に領域を管理 | 手動で詳細に設定可能 |
| PCTFREEやPCTUSED不要 | PCTFREEとPCTUSEDを設定 |
| 複数トランザクションに強い| 高度なチューニングが可能 |
| 簡単で推奨 | 特殊な要件に適用 |
+---------------------------+----------------------------+
3. MSSMを支えるPCTFREEとPCTUSED
手動セグメント領域管理では、PCTFREE と PCTUSED の2つのパラメータが鍵を握ります。
PCTFREE: データ更新用の空き領域を確保
- データブロック内で更新用に予約する空き領域の割合。
- 例:
PCTFREE 10
は、データブロックの10%を将来の更新用に予約。
図解: PCTFREEの動作
[データブロック]
+----------------------+
| データ (90%) |
| +------------------+ |
| | 空き領域 (10%) | |
| +------------------+ |
+----------------------+
PCTUSED: データ挿入再開の閾値
- ブロックが再びデータ挿入可能になる最小使用率。
- 例:
PCTUSED 40
は、使用率が40%未満になると再びデータ挿入が可能に。
図解: PCTUSEDの動作
[データブロック]
+----------------------+
| 使用領域 (50%) | → 新規データ挿入不可
| |
+----------------------+
(データ削除)
[データブロック]
+----------------------+
| 使用領域 (30%) | → 新規データ挿入可能
| |
+----------------------+
4. 実践例:セグメント管理を試す
以下のSQLスクリプトで、MSSMの動作を確認できます。
表領域の作成
CREATE TABLESPACE example_tbs_manual
DATAFILE '/u01/app/oracle/oradata/example02.dbf' SIZE 100M
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT MANUAL;
表の作成
CREATE TABLE test_table (
id NUMBER,
data VARCHAR2(100)
)
TABLESPACE example_tbs_manual
PCTFREE 10
PCTUSED 40;
データの挿入と確認
BEGIN
FOR i IN 1..100 LOOP
INSERT INTO test_table VALUES (i, RPAD('A', 100, 'A'));
END LOOP;
COMMIT;
END;
表領域の使用状況確認
SELECT table_name, pct_free, pct_used, tablespace_name
FROM user_tables
WHERE table_name = 'TEST_TABLE';
5. 実際の運用での選択基準
ケース | 選択肢 | 理由 |
---|---|---|
標準的なデータベース運用 | ASSM | 簡単で効率的 |
更新頻度が高い | ASSM | 自動で競合を軽減 |
特殊なパフォーマンス要件 | MSSM | 手動で細かく調整可能 |
6. まとめ
セグメント管理を正しく理解し活用することで、以下のような効果が得られます:
- ASSMで効率化: 推奨設定でほとんどのケースに対応可能。
- MSSMで詳細制御: 特殊な要件に応じた高度なカスタマイズが可能。
- PCTFREEとPCTUSEDの理解: データブロックの管理を効果的に調整。
コメント