ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
エクステント (Extent) とは
エクステントは Oracle のストレージ単位の 1 つで、連続するデータブロックの集まりです。データ格納の最小割り当て単位として機能し、テーブルやインデックス (セグメント) が領域を必要とするときは、ブロック単位ではなくエクステント単位で割り当てられます。
Oracle のストレージ階層
| 階層 | 意味 | 典型サイズ |
|---|---|---|
| データベース | 最上位 | - |
| 表領域 | 論理グループ | GB 〜 TB |
| セグメント | 1 オブジェクト (テーブル等) のストレージ | MB 〜 GB |
| エクステント | 連続ブロックの集まり | 64KB 〜 MB |
| ブロック | I/O の最小単位 | 8KB (DB_BLOCK_SIZE) |
包含関係: 表領域 ⊃ セグメント ⊃ エクステント ⊃ ブロック
なぜエクステントが必要なのか
ブロック 1 つずつ割り当てると頻繁な管理オーバーヘッドと断片化が起きます。エクステント単位 (=複数ブロックをまとめて) 確保することで、
- 連続領域のためシーケンシャル I/O 性能が良い
- 領域管理のメタデータ量を削減
- 断片化を抑制
セグメントとエクステントの関係
セグメント (テーブルやインデックス) が作成されると最初のエクステント (INITIAL EXTENT) が割り当てられます。データが増えて領域が足りなくなると次のエクステント (NEXT EXTENT) が追加で割り当てられます。
[ セグメント (テーブル EMP) ]
├ エクステント1 (8 ブロック = 64KB)
├ エクステント2 (8 ブロック)
├ エクステント3 (8 ブロック)
└ ...
エクステント管理方式
| 方式 | 説明 | 採用状況 |
|---|---|---|
| LOCAL | 表領域のヘッダ部にあるビットマップで管理。高速 | 現代の標準 |
| DICTIONARY | データディクショナリの表で管理。古い方式 | Oracle 11g 以降は非推奨 |
新規作成では特別な理由がない限り LOCAL 管理を選びます。表領域作成 DDL では EXTENT MANAGEMENT LOCAL がデフォルト。
エクステント割り当てサイズ
| 指定 | 挙動 |
|---|---|
AUTOALLOCATE (推奨) | Oracle がセグメントの成長に応じてサイズを自動調整 (64KB → 1MB → 8MB → 64MB) |
UNIFORM SIZE n | 常に同じサイズで割り当て (例: 1M ずつ) |
-- AUTOALLOCATE (デフォルト)
CREATE TABLESPACE app_data
DATAFILE '/u01/.../app_data01.dbf' SIZE 500M
EXTENT MANAGEMENT LOCAL AUTOALLOCATE;
-- UNIFORM SIZE (DWH 等で予測可能なサイズに固定したい場合)
CREATE TABLESPACE app_uniform
DATAFILE '/u01/.../app_uniform01.dbf' SIZE 500M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;
セグメントごとのエクステント指定
CREATE TABLE 時のストレージ句でセグメントごとに調整可能 (ただし AUTOALLOCATE 表領域では無視される設定が多い)。
CREATE TABLE big_log (
log_id NUMBER,
msg VARCHAR2(4000),
ts TIMESTAMP
)
TABLESPACE app_data
STORAGE (
INITIAL 1M -- 最初のエクステント
NEXT 1M -- 以降のエクステント
MINEXTENTS 1 -- 作成時の最小エクステント数
MAXEXTENTS UNLIMITED -- 最大エクステント数
);
エクステント情報の確認 SQL
-- セグメントごとのエクステント数とサイズ
SELECT
owner,
segment_name,
segment_type,
extents,
blocks,
ROUND(bytes/1024/1024, 2) AS mb
FROM dba_segments
WHERE owner = 'APP_USER'
ORDER BY bytes DESC;
-- 特定セグメントのエクステント詳細
SELECT
extent_id,
file_id,
block_id,
blocks,
ROUND(bytes/1024, 1) AS kb
FROM dba_extents
WHERE owner = 'APP_USER'
AND segment_name = 'BIG_LOG'
ORDER BY extent_id;
-- 表領域の空きエクステント
SELECT tablespace_name,
COUNT(*) AS free_extents,
ROUND(SUM(bytes)/1024/1024, 1) AS free_mb,
ROUND(MAX(bytes)/1024/1024, 1) AS largest_mb
FROM dba_free_space
GROUP BY tablespace_name;
エクステントとブロックの関係
エクステントを構成するブロック数 = エクステントサイズ ÷ DB_BLOCK_SIZE。デフォルトの 8KB ブロックなら 64KB エクステント = 8 ブロックです。
| エクステントサイズ | ブロック数 (8KB ブロックの場合) |
|---|---|
| 64KB | 8 |
| 1MB | 128 |
| 8MB | 1,024 |
| 64MB | 8,192 |
断片化と再編成
エクステントが多数の領域に散らばると断片化が起こり、全表スキャンの効率が低下することがあります。対策として:
ALTER TABLE ... MOVEでテーブルを再構築ALTER INDEX ... REBUILDでインデックスを再構築- パーティション化で局所的に対処
- 表領域単位でUNIFORM SIZE に統一すると断片化が起きにくい (DWH で有効)
FAQ
Q: エクステント数が多くなりすぎると問題は?
A: 現代の LOCAL 管理では問題は小さい (ビットマップで O(1) 管理)。古い DICTIONARY 管理ではディクショナリ更新負荷が問題視された。
Q: AUTOALLOCATE と UNIFORM のどちらを選ぶ?
A: 通常は AUTOALLOCATE でよい。大規模 DWH やパーティション設計で予測可能なサイズにしたいときに UNIFORM。
Q: テーブルを TRUNCATE するとエクステントは?
A: TRUNCATE TABLE はデフォルトで最初のエクステントだけ残し、残りのエクステントは解放される。REUSE STORAGE 句を付けると全エクステントを保持する。
関連
- 表領域 — エクステントを束ねる論理ストレージ
- セグメント — 複数エクステントで構成される 1 オブジェクト
- データブロック — エクステントを構成する最小単位
- ASSM (Automatic Segment Space Management)
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- 【django】ログイン 認証機能 2026-09-08 03:22:09
- MySQL ERROR 1063 Incorrect column specifier for column|原因と直し方 2026-09-08 03:11:09
- 【PHPエラー】Object of class stdClass could not be converted to string 2026-09-07 07:46:04
- Julia Genie ローカル開発サーバ起動完全ガイド 2026-09-07 07:46:04
- Wi-Fi とは|規格と世代(Wi-Fi 4〜7)・周波数帯・CSMA/CA・WPA3 NEW 2026-09-07 07:45:13
- set コマンドでシェルオプションと位置パラメータを操作 | bash 2026-09-07 07:45:13
- JPEG(.jpg/.jpeg)画像形式の完全ガイド — 仕様・マジックナンバー・他形式との比較・EXIF 2026-09-07 07:45:13
- UE5 Get Overlapping Actorsで特定クラスだけ処理|Class Filter・Cast To 2026-09-07 07:45:13
- Linuxで特定拡張子のファイルを再帰削除|find -deleteの安全手順 2026-09-07 07:45:13
- Django CBVでテンプレートに値を渡す|get_context_data・extra_context 2026-09-07 07:45:13
- Linuxで複数ファイルの文字列を一括置換|find・sed・xargsの安全手順 2026-09-07 07:45:13
- Laravelルートグループ|prefix・middleware・nameで一括管理 2026-09-07 07:45:13
- Linux whichコマンドの使い方|絶対パス取得とtype・command -vの違い 2026-09-07 07:45:13
- Linux catコマンドの使い方|行番号表示・複数ファイル連結 2026-09-07 07:45:13
- unable to execute 'gcc': No such file or directory 2026-09-07 07:45:13
コメントを削除してもよろしいでしょうか?