Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Oracle Database Technology Night 96 kernel addr...

Avatar for oracle4engineer oracle4engineer PRO
January 29, 2026

Oracle Database Technology Night 96 kernel addressing memory history

Oracle Database Technology Night #96
Oracle Databaseカーネル大改造史 増補改訂版
2026/01/29開催 2時間

2025年5月23日開催のリアルイベントOracle Developer Day 2025で好評を博した「Oracle Databaseカーネル大改造史」の時間を拡大して内容を増補改訂します。 https://speakerdeck.com/oracle4engineer/devday2025-oracledatabase-kernel-addressing-history

Oracle Databaseは世界最初の商用リレーショナル・データベースとして世にでました。
リレーショナル・データベース(RDBMS)は表として抽象化されたデータの集合に対し、どういうデータを取り出すかの集合のみを定義するSQLによってアクセスします。
つまり、SQLをインターフェースとして、内部実装をユーザーに見せないように動作します。
RDBMSはアドレスの概念を排除したデータ操作空間です。
しかしそれを実装するにはアドレスの概念を持つストレージへのデータ配置のアドレッシングを行う必要があります。
データのアドレッシング・アーキテクチャが大量データを扱う処理の用途に大きな影響を与えます。

[増補改訂]
また、データベースは不揮発性デバイスであるハードディスクやフラッシュ・メモリーにデータを格納し、それを高速に処理するためにデータベース・サーバーのDRAMに一時的に格納します。
21世紀のハードウェアの進歩がデータベース・エンジンのアーキテクチャに与えてきた影響も踏まえて、データベース・エンジンの根幹にかかわるデータのアドレッシングやメモリー管理のアーキテクチャがどのように大胆な改造が行われてきたか、その歴史を振り返ります。

Avatar for oracle4engineer

oracle4engineer PRO

January 29, 2026
Tweet

Video

More Decks by oracle4engineer

Transcript

  1. Oracle AI Databaseカーネル大改造史 増補改訂版 予告から 2025年5月23日開催のリアルイベントOracle Developer Day 2025で好評を博した「Oracle Databaseカーネル大改造史」の時間を拡大して内容

    を増補改訂します。 https://speakerdeck.com/oracle4engineer/devday2025-oracledatabase-kernel-addressing-history Oracle Databaseは世界最初の商用リレーショナル・データベースとして世にでました。 リレーショナル・データベース(RDBMS)は表として抽象化されたデータの集合に対し、どういうデータを取り出すかの集合のみを定義するSQLによってアクセスし ます。 つまり、SQLをインターフェースとして、内部実装をユーザーに見せないように動作します。 RDBMSはアドレスの概念を排除したデータ操作空間です。 しかしそれを実装するにはアドレスの概念を持つストレージへのデータ配置のアドレッシングを行う必要があります。 データのアドレッシング・アーキテクチャが大量データを扱う処理の用途に大きな影響を与えます。 [増補改訂] また、データベースは不揮発性デバイスであるハードディスクやフラッシュ・メモリーにデータを格納し、それを高速に処理するためにデータベース・サーバーの DRAMに一時的に格納します。 21世紀のハードウェアの進歩がデータベース・エンジンのアーキテクチャに与えてきた影響も踏まえて、データベース・エンジンの根幹にかかわるデータのアドレッシ ングやメモリー管理のアーキテクチャがどのように大胆な改造が行われてきたか、その歴史を振り返ります。 2 Copyright © 2026, Oracle and/or its affiliates
  2. Oracle Databaseカーネル大改造史 増補改訂版 前半 前振り リレーショナル・データベースとSQLのモデル トランザクション系と分析系の共存 Oracle Databaseカーネル大改造史 -

    アドレッシング 抽象データ空間からファイルへのアドレッシング 索引とパーティショニング ファイルからストレージ・デバイスへのアドレッシング ファイルシステムと論理ボリューム・マネージャ Automatic Storage Management Exadata XRMEM 後半 Oracle Databaseカーネル大改造史 - メモリー管理 キャッシュ・メモリー CPUアーキテクチャ Non Uniform Memory Access (NUMA)最適化 32bit vs 64bit LRU キャッシュのバイパス Exadata Smart Scan キャッシュ vs インメモリ Real Application Clusters 3 Copyright © 2026, Oracle and/or its affiliates
  3. 入力と出力の対応関係の定義 SQL Copyright © 2026, Oracle and/or its affiliates 5

    出力 SELECT ename, dname, job, empno, hiredate, loc FROM emp, dept WHERE emp.deptno = dept.deptno 入力 論理データ構造
  4. 入力と出力の対応関係の定義 SQL Copyright © 2026, Oracle and/or its affiliates 6

    出力 SELECT ename, dname, job, empno, hiredate, loc FROM emp, dept WHERE emp.deptno = dept.deptno 入力 論理データ構造 SQL : データの集合の定義 SQL実行計画 : SQLが定義する集合を導出するアルゴリズム
  5. 入力と出力の対応関係の定義 SQL Copyright © 2026, Oracle and/or its affiliates 7

    出力 入力 論理データ構造 対応関係の定義 インターフェース SQL : データの集合の定義 SQL実行計画 : SQLが定義する集合を導出するアルゴリズム SELECT ename, dname, job, empno, hiredate, loc FROM emp, dept WHERE emp.deptno = dept.deptno ORDER BY ename 何を取り出すかの定義であって、どうやって 導出するかのアルゴリズムは記述されていない
  6. 入力と出力の対応関係の定義 SQL Copyright © 2026, Oracle and/or its affiliates 8

    出力 入力 論理データ構造 A B C D E 同じ出力になるアルゴリズムは複数存在する
  7. 入力と出力の対応関係の定義 SQL Copyright © 2026, Oracle and/or its affiliates 9

    出力 入力 論理データ構造 処理時間 アルゴリズム A B C D E A B C D E 最も処理時間が短いアルゴリズムを採用したい
  8. インターフェースとアルゴリズム実装の分離 SQLの結果集合を導出するアルゴリズムは自動生成される Copyright © 2026, Oracle and/or its affiliates 11

    入力 出力 対応関係の定義 インターフェース SQL実行計画 SQL実行計画探索 アルゴリズム 全体最適化問題 値の分布統計 物理データ構造 ハードウェア・リソース 論理データ構造
  9. インターフェースとアルゴリズム実装の分離 データベース・エンジン実装が目指すところ Copyright © 2026, Oracle and/or its affiliates 12

    出力 対応関係の定義 インターフェース SQL実行計画 SQL実行計画探索 アルゴリズム 全体最適化問題 値の分布統計 物理データ構造 ハードウェア・リソース 入力 論理データ構造 論理データ構造の定義とインターフェース(SQL)を 変更せずにアルゴリズム実装が改良される
  10. アプリケーションの論理データ構造とそのデータ操作 アプリケーション開発で注力すべきところ Copyright © 2026, Oracle and/or its affiliates 13

    入力 論理データ構造 出力 対応関係の定義 インターフェース SQL実行計画 SQL実行計画探索 アルゴリズム 全体最適化問題 値の分布統計 物理データ構造 ハードウェア・リソース 論理データ構造の定義とインターフェース(SQL)を 変更せずにアルゴリズム実装が改良される
  11. 処理の性質が異なると、適切な物理データ構造が異なる 分析系 ↓ トランザクション系 • 低レイテンシ • 行指向 • 索引

    • キャッシュ • 細粒度排他制御 • … 分析系 • 高スループット • 列指向 • パーティショニング • 圧縮 • 並列化 • … トランザクション系→ Copyright © 2026, Oracle and/or its affiliates 16
  12. 性質が異なる最適化を1つの表に共存して実装するのが難しい 分析系 ↓ トランザクション系 • 低レイテンシ • 行指向 • 索引

    • キャッシュ • 細粒度排他制御 • … 分析系 • 高スループット • 列指向 • パーティショニング • 圧縮 • 並列化 • … トランザクション系→ 共存が難しい Copyright © 2026, Oracle and/or its affiliates 17
  13. よくあるシステム構成 - 処理の性質ごとにデータベースを分ける 物理データ構造ごとに入れ物を分ける トランザクション系→ 分析系 ↓ トランザクション系 • 低レイテンシ

    • 行指向 • 索引 • キャッシュ • 細粒度排他制御 • … 分析系 • 高スループット • 列指向 • パーティショニング • 圧縮 • 並列化 • … データの複製 レプリケーション ETL ETL: Extract - Transform - Load 共存が難しい Copyright © 2026, Oracle and/or its affiliates 18
  14. よくあるシステム構成 - 処理の性質ごとにデータベースを分ける 物理データ構造ごとに入れ物を分ける トランザクション系→ 分析系 ↓ トランザクション系 • 低レイテンシ

    • 行指向 • 索引 • キャッシュ • 細粒度排他制御 • … 分析系 • 高スループット • 列指向 • パーティショニング • 圧縮 • 並列化 • … データの複製 レプリケーション ETL ETL: Extract - Transform - Load 共存が難しい HTAP: Hybrid Transactional Analytical Processing トランザクション処理と分析処理を共存させるのが難しい というところから出てきた共存させる概念 リレーショナル・データベースにおけるマルチ・ワークロード対応 最近では Translytical Database (Transactional + Analytical) Copyright © 2026, Oracle and/or its affiliates 19
  15. マルチ・ワークロード対応データベース? 「1つのデータベースがトランザクション系と分析系どちらにも対応できます」 トランザクション系→ 分析系 ↓ トランザクション系 • 低レイテンシ • 行指向

    • 索引 • キャッシュ • 細粒度排他制御 • … 分析系 • 高スループット • 列指向 • パーティショニング • 圧縮 • 並列化 • … データの複製 共存が難しい Copyright © 2026, Oracle and/or its affiliates 20
  16. マルチ・ワークロード対応データベース? 「1つのデータベースがトランザクション系と分析系どちらにも対応できます」 トランザクション系→ 分析系 ↓ トランザクション系 • 低レイテンシ • 行指向

    • 索引 • キャッシュ • 細粒度排他制御 • … 分析系 • 高スループット • 列指向 • パーティショニング • 圧縮 • 並列化 • … データの複製 共存が難しい Copyright © 2026, Oracle and/or its affiliates 21 (異なる表としてであれば) トランザクション系と分析系が共存できる
  17. Oracle Databaseのマルチ・ワークロード対応 「1つの表がトランザクション系と分析系どちらにも対応できます」 トランザクション系→ 分析系 ↓ トランザクション系 • 低レイテンシ •

    行指向 • 索引 • キャッシュ • 細粒度排他制御 • … 分析系 • 高スループット • 列指向 • パーティショニング • 圧縮 • 並列化 • … 共存 Copyright © 2026, Oracle and/or its affiliates 22
  18. Oracle Databaseのマルチ・ワークロード対応 「1つの表がトランザクション系と分析系どちらにも対応できます」 トランザクション系→ 分析系 ↓ トランザクション系 • 低レイテンシ •

    行指向 • 索引 • キャッシュ • 細粒度排他制御 • … 分析系 • 高スループット • 列指向 • パーティショニング • 圧縮 • 並列化 • … 共存 Copyright © 2026, Oracle and/or its affiliates 23 速いアルゴリズムの生成は DBMSエンジンの役割
  19. Oracle Databaseカーネル大改造史 マルチ・ワークロードに対応するには? トランザクション系→ 分析系 ↓ トランザクション系 • 低レイテンシ •

    行指向 • 索引 • キャッシュ • 細粒度排他制御 • … 分析系 • 高スループット • 列指向 • パーティショニング • 圧縮 • 並列化 • … 共存 Copyright © 2026, Oracle and/or its affiliates 24 速いアルゴリズムの生成は DBMSエンジンの役割
  20. kernel / shell 植物の種子からきている言葉 25 Copyright © 2026, Oracle and/or

    its affiliates kernel : 仁(じん) ソフトウェア処理の中心核 shell : 殻 外部との境界 kernel shell
  21. データベース・ソフトウェアのkernel / shell 26 Copyright © 2026, Oracle and/or its

    affiliates kernel : 仁(じん) ソフトウェア処理の中心核 shell : 殻 外部との境界 kernel SQL • SQL実行計画 • データのアドレッシング • メモリー管理 • データ空間の隔離 • … SQLインターフェース
  22. データベース・ソフトウェアのkernel / shell 27 Copyright © 2026, Oracle and/or its

    affiliates kernel : 仁(じん) ソフトウェア処理の中心核 shell : 殻 外部との境界 kernel SQL • SQL実行計画 • データのアドレッシング • メモリー管理 • データ空間の隔離 • … SQLインターフェース データのアドレッシング メモリー管理
  23. 表(TABLE)の概念 アドレスの概念の有無 29 Copyright © 2026, Oracle and/or its affiliates

    スプレッド・シート リレーショナル・データベース 何行目、何列目のアドレスでセルのデータを指定 何行目、何列目というアドレスの概念が「ない」
  24. 表(TABLE)の概念 アドレスの概念の有無 30 Copyright © 2026, Oracle and/or its affiliates

    スプレッド・シート リレーショナル・データベース 何行目、何列目のアドレスでセルのデータを指定 列の名前とその値で行を特定 SELECT * FROM table1 WHERE C1=value1
  25. SELECT文の出力もまた表(TABLE) リレーショナル・データベースの表(TABLE)は順序がない行の集合 32 Copyright © 2026, Oracle and/or its affiliates

    出力 入力 論理データ構造 (順序がない)行の集合 (順序がない)行の集合 SELECT ename, dname, job, empno, hiredate, loc FROM emp, dept WHERE emp.deptno = dept.deptno
  26. SELECT文が返す行の順序は不定 リレーショナル・データベースの表(TABLE)は順序がない行の集合 33 Copyright © 2026, Oracle and/or its affiliates

    出力 入力 論理データ構造 (順序がない)行の集合 (順序がない)行の集合 SELECT ename, dname, job, empno, hiredate, loc FROM emp, dept WHERE emp.deptno = dept.deptno SELECT文の返す行の順序は不定 順序が必要な場合は明示的に指定(ORDER BY)
  27. 抽象データ空間 リレーショナル・データベースの表(TABLE)は順序がない行の集合 35 Copyright © 2026, Oracle and/or its affiliates

    出力 入力 論理データ構造 RDBMSとSQLは「アドレス」の概念を排除した コンピュータ上に実装するには「アドレス」の 概念を持つデバイスを扱う必要がある
  28. 抽象化されたデータ空間のストレージ: 表領域(TABLESPACE) 37 Copyright © 2026, Oracle and/or its affiliates

    表(TABLE) 表領域(TABLESPACE) CREATE TABLE 表A (…) TABLESPACE 表領域α 表(TABLE) → 表領域(TABLESPACE)
  29. 抽象化されたデータ空間のストレージ: 表領域(TABLESPACE) 38 Copyright © 2026, Oracle and/or its affiliates

    表(TABLE) 表領域(TABLESPACE) データファイル CREATE TABLE 表A (…) TABLESPACE 表領域α CREATE TABLESPACE 表領域α DATAFILE … 表(TABLE) → 表領域(TABLESPACE) 表領域(TABLESPACE) → データファイル
  30. 抽象化されたデータ空間からファイルへのアドレッシング 表領域(TABLESPACE)がその境界 39 Copyright © 2026, Oracle and/or its affiliates

    アドレスの概念がない抽象データ空間 アドレスの概念がある物理データ構造 表(TABLE) 表領域(TABLESPACE) データファイル
  31. アドレスのある概念にデータを格納 - Oracleデータ・ブロック 固定サイズのブロックにデータが格納される 41 Copyright © 2026, Oracle and/or

    its affiliates データファイル データベース・バッファ・キャッシュ チェックポイント メモリー → ファイル キャッシュ・ミス ファイル → メモリー メモリーにOracleデータ・ブロックをキャッシュ
  32. アドレスの概念がない抽象データ空間 アドレスの概念がある物理データ構造 行(ROW)にアドレスがある - ROWID疑似列 42 Copyright © 2026, Oracle

    and/or its affiliates 表(TABLE) 表領域(TABLESPACE) #FILE #BLOCK #ROW データファイル ROWID 何番目のファイルの、何ブロック目の、何行目、をエンコードしたもの ≒データファイル上のアドレス ROWID(#FILE, #BLOCK, #ROW)
  33. ROWIDアドレッシング(FILE#, BLOCK#, ROW#)の変更 43 Copyright © 2026, Oracle and/or its

    affiliates Bigfile TABLESPACE (Oracle Database 10g) Smallfile TABLESPACE Bigfile TABLESPACE 1つの表領域を複数のデータファイルで構成 1つの表領域を1つの巨大なデータファイルで構成 データブロック個数 4M データファイル数 1K データブロック個数 4G データファイル数 1 総データブロック数 4M×1K → 4G個 総データブロック数 4G×1 → 4G個 • Automatic Storage Managementと同時に導入 • ユーザーが個別のファイル操作をすることから隠蔽する
  34. 指定した値を持つ行アドレス(ROWID)を短時間で特定したい 44 Copyright © 2026, Oracle and/or its affiliates 表(TABLE)

    表領域(TABLESPACE) #FILE #BLOCK #ROW データファイル C1列値 ROWID C1列 SELECT * FROM table1 WHERE C1=value1 列の名前とその値から、データファイル上の位置を特定したい
  35. 指定した値を持つ行アドレス(ROWID)を短時間で特定したい 表フル・スキャン → 表セグメントの全データ・ブロックをスキャン 45 Copyright © 2026, Oracle and/or

    its affiliates 表(TABLE) 表領域(TABLESPACE) #FILE #BLOCK #ROW データファイル C1列値 ROWID C1列 • 全データ・ブロック・スキャン • 探索コストO(n) SELECT * FROM table1 WHERE C1=value1
  36. B*Tree索引 - 指定した値を持つROWIDを短時間で特定する 列(COLUMN)の値と行アドレスROWIDのペア(Oracle Version5) 46 Copyright © 2026, Oracle

    and/or its affiliates 表(TABLE) 表領域(TABLESPACE) #FILE #BLOCK #ROW データファイル C1列値 ROWID C1列 C1列のB*Tree索引 • C1列の値を昇順にソート済み平衡木 • 探索コストO(logn) 行のC1列の値とROWIDをペアで保持
  37. PRIMARY KEY/UNIQUE制約を索引で実装する 47 Copyright © 2026, Oracle and/or its affiliates

    value1 ROWID C1列のB*Tree索引 • C1列の値を昇順にソート済み平衡木 • 探索コストO(logn) 行のC1列の値とROWIDをペアで保持 索引は C1=value1 が既に存在するかを短時間で判定できる
  38. ヒープ表と索引構成表(Index Organization Table) Oracle Databasedではヒープ表が標準 48 Copyright © 2026, Oracle

    and/or its affiliates ヒープ表(TABLE) C1列のB*Tree索引 ROWID ポインタ C1列のプライマリ・キー索引 ヒープ表(TABLE)とB*Tree索引 索引構成表(Index Organization Table) • ヒープ表とB*Tree索引は独立したオブジェクト • B*Tree索引から表の行アドレスへのポインタ • 表の行アドレスは索引の物理配置と独立 • プライマリ・キー列のB*Tree索引と表が一体 • プライマリ・キー列にそれ以外の列も付随する • 行の物理配置がプライマリ・キー列に強く依存する C1列 ※Oracle Database以外ではクラスタ化表(Clustered Table)と呼ばれることもある
  39. ヒープ表とB*Tree索引 列の値とROWIDのペア 49 Copyright © 2026, Oracle and/or its affiliates

    ヒープ表(TABLE) C1 C2 ROWID ポインタ C1列のB*Tree索引 index1
  40. ヒープ表とB*Tree索引 すべての索引が対等な構造 50 Copyright © 2026, Oracle and/or its affiliates

    ヒープ表(TABLE) C1 C2 ROWID ポインタ ROWID ポインタ C1列のB*Tree索引 index1 C2列のB*Tree索引 index2
  41. ヒープ表とB*Tree索引 すべての索引が対等な構造 - PRIMARY KEY制約の索引も他と同じ 51 Copyright © 2026, Oracle

    and/or its affiliates ヒープ表(TABLE) C1 C2 C1列のB*Tree索引 index1 ROWID ポインタ C2列のB*Tree索引 index2 ROWID ポインタ SQL> ALTER TABLE table1 ADD CONSTRAINT PRIMARY KEY USING INDEX index1 ; SQL> CREATE UNIQUE INDEX index1 ON table1(C1) ; • 先に索引を作成してそれを後でPRIMARY KEY制約に指定できる • PRIMARY KEYの必要条件はUNIQUEかつ NOT NULLの索引を作成できること
  42. データの物理配置を絞り込む構造 索引とパーティショニング 52 Copyright © 2026, Oracle and/or its affiliates

    ヒープ表(TABLE) C1列のB*Tree索引 ROWID ポインタ ヒープ表(TABLE)とB*Tree索引 • ヒープ表とB*Tree索引は独立したオブジェクト • ごく少数の行の位置を特定するのに適している • オンライン・トランザクション処理 C1列
  43. データの物理配置を絞り込む構造 索引とパーティショニング 53 Copyright © 2026, Oracle and/or its affiliates

    ヒープ表(TABLE) C1列のB*Tree索引 ROWID ポインタ ヒープ表(TABLE)とB*Tree索引 パーティショニング • ヒープ表とB*Tree索引は独立したオブジェクト • ごく少数の行の位置を特定するのに適している • オンライン・トランザクション処理 • パーティション・キー列の値でサブ領域に分割 • 多くの行の範囲を特定するのに適している • 分析・集計処理 • シェアード・ナッシング・アーキテクチャのデータ割り当て パーティション表(Partition TABLE) パーティション1 パーティション2 パーティション3 C1列 partkey1列
  44. パーティション表 - アクセスする範囲を限定する効果 パーティション・キー列の値によって行を格納する領域を特定 54 Copyright © 2026, Oracle and/or

    its affiliates partkey1列 パーティション p1 パーティション p2 パーティション pn f(partkey1) パーティション・キー列 partkey1 の値に よってパーティションを特定する関数 • RANGE • HASH • LIST • … 表フル・スキャンの処理でも 特定パーティションだけにアクセス 表フル・スキャン
  45. パーティショニング実装1 : パーティション・ビュー(Partition VIEW) 複数の表(TABLE)をビュー(VIEW)で仮想的に1つに見せる (Oracle7.3) 56 Copyright © 2026,

    Oracle and/or its affiliates VIEW v1 (1) CHECK制約でパーティション・キー列(partkey1)の値の範囲を指定 partkey1列 (2) 複数の異なる表を連結するパーティション・ビュー v1 表 t1 表 t2 表 tn やろうとしていること ↓ RANGEパーティション
  46. パーティショニング実装1 : パーティション・ビュー(Partition VIEW) 複数の表(TABLE)をビュー(VIEW)で仮想的に1つに見せる (Oracle7.3) 57 Copyright © 2026,

    Oracle and/or its affiliates VIEW v1 (1) CHECK制約でパーティション・キー列(partkey1)の値の範囲を指定 partkey1列 (2) 複数の異なる表を連結するパーティション・ビュー v1 表 t1 表 t2 表 tn CREATE VIEW v1 AS SELECT * FROM t1 WHERE partkey1 between 'Jan-01-1995' and 'Mar-31-1995' UNION ALL SELECT * FROM t2 WHERE partkey1 between 'Apr-01-1995' and 'Jun-30-1995' UNION ALL : SELECT * FROM tn WHERE partkey1 between 'Oct-01-1995' and 'Dec-31-1995'; パーティション・キー列(partkey1)の異なる範囲を持つ表をUNION ALLで連結
  47. パーティショニング実装1 : パーティション・ビュー(Partition VIEW) 複数の表(TABLE)をビュー(VIEW)で仮想的に1つに見せる (Oracle7.3) 58 Copyright © 2026,

    Oracle and/or its affiliates SELECT * FROM v1 WHERE partkey1 BETWEEN value1 AND value2 (1) CHECK制約でパーティション・キー列(partkey1)の値の範囲を指定 partkey1列 (2) 複数の異なる表を連結するパーティション・ビュー v1 (3) SQLはパーティション・ビューv1にパーティション・ キー列partkey1を指定 (4) partkey1列の値に合致する表にのみアクセス 表 t1 表 t2 表 tn VIEW v1
  48. 索引の暗黙の制限 1つの索引は1つの表にしかアドレッシングできない 59 Copyright © 2026, Oracle and/or its affiliates

    C1列値 ROWID C1列のB*Tree索引 行のC1列の値とROWIDをペアで保持 1つの索引は異なる複数の表の アドレッシングはできない 表 t1 表 t2 C1列
  49. パーティショニング実装1 : パーティション・ビュー(Partition VIEW) パーティション・ビューに索引を作るには 60 Copyright © 2026, Oracle

    and/or its affiliates (1) 索引がアドレッシングできるのは1つの表に対してのみ partkey1列 表 t1 表 t2 表 tn 異なる表を論理的に1つに見せる実装だと表パーティションに 閉じた索引(ローカル・パーティション索引)しか作成できない
  50. パーティショニング実装1 : パーティション・ビュー(Partition VIEW) パーティション・ビューにUNIQUE索引を作るには 61 Copyright © 2026, Oracle

    and/or its affiliates (1) 索引がアドレッシングできるのは1つの表に対してのみ partkey1列 表 t1 表 t2 表 tn (2) 1つの索引内でならUNIQUE制約の判定が可能
  51. パーティショニング実装1 : パーティション・ビュー(Partition VIEW) パーティション・ビューにUNIQUE索引を作るには 62 Copyright © 2026, Oracle

    and/or its affiliates VIEW v1 (1) 索引がアドレッシングできるのは1つの表に対してのみ 別の表パーティションに存在する値を判定できない 表 t1 表 t2 表 tn (3) パーティション・ビューv1はパーティション・キー列 (partkey1)でどの表にアクセスするか判断する (2) 1つの索引内でならUNIQUE制約の判定が可能 どの表パーティションに値が存在するかを特定できるのは パーティション・キー列(partkey1)のみ partkey1列
  52. パーティショニング実装1 : パーティション・ビュー(Partition VIEW) パーティション・ビューにUNIQUE索引を作るには 63 Copyright © 2026, Oracle

    and/or its affiliates VIEW v1 (1) 索引がアドレッシングできるのは1つの表に対してのみ 別の表パーティションに存在する値を判定できない 表 t1 表 t2 表 tn (3) パーティション・ビューv1はパーティション・キー列 (partkey1)でどの表にアクセスするか判断する (2) 1つの索引内でならUNIQUE制約の判定が可能 UNIQUE制約を持たせるには表パーティション・キー列を含んでいなければならない どの表パーティションに値が存在するかを特定できるのは パーティション・キー列(partkey1)のみ partkey1列 PRIMARY KEY索引の列は表のパーティション・キー定義に拘束される
  53. ローカル・パーティション索引しか持つことのできないパーティション実装 表パーティション・キー列を含んでいれば表パーティションを特定できる 64 Copyright © 2026, Oracle and/or its affiliates

    VIEW v1 表 t1 表 t2 表 tn 表パーティション・キー partkey1列 SELECT * FROM v1 WHERE partkey1 BETWEEN value1 AND value2 表パーティション・キー列(partkey1)を 含んでいれば表パーティションを特定で きる
  54. ローカル・パーティション索引しか持つことのできないパーティション実装 表パーティション・キー列を含んでいなければ表パーティションを特定できない 65 Copyright © 2026, Oracle and/or its affiliates

    VIEW v1 表 t1 表 t2 表 tn 表パーティション・キー partkey1列 SELECT * FROM v1 WHERE C2 BETWEEN value1 AND value2 表パーティション・キー列(partkey1)を 含んでいなければ表パーティションを特 定できない C2列 全パーティションを探索
  55. パーティショニング実装2 : パーティション表/パーティション索引 1つの表(TABLE)と索引(INDEX)の内部を複数領域に分割する (Oracle8 Partitioning) 66 Copyright © 2026,

    Oracle and/or its affiliates VIEW v1 partkey1 表 t1 表 t2 表 tn Oracle7 パーティション・ビュー(Partition VIEW) 複数の表をビューで仮想的に1つに見せる partkey1 表パーティション p1 表パーティション p2 表パーティション pn Oracle8 パーティション表(Partition TABLE) 1つの表を内部的に複数のセグメントに分割する Table T1
  56. パーティショニング実装2 : パーティション表 1つの索引が1つのパーティション表のすべての表パーティションをアドレッシングできる 67 Copyright © 2026, Oracle and/or

    its affiliates 1 partkey1 C1 C2 表パーティション p1 表パーティション p2 表パーティション pn パーティション表(Partition TABLE) 1つの表を内部的に複数のセグメントに分割する C1列のB*Tree索引 ROWID ポインタ 索引(INDEX) 1つの索引ツリーからすべての表パーティションをアドレッシング可能
  57. パーティショニング実装2 : パーティション表 索引からのアドレッシング方式の改造 68 Copyright © 2026, Oracle and/or

    its affiliates partkey1 C1 C2 表パーティション p1 表パーティション p2 表パーティション pn パーティション表(Partition TABLE) 1つの表を内部的に複数のセグメントに分割する C1列のB*Tree索引 C2列のB*Tree索引 ROWID ポインタ ROWID ポインタ 索引(INDEX) 1つの索引ツリーからすべての表パーティションをアドレッシング可能
  58. パーティショニング実装2 : パーティション表 索引からのアドレッシング方式の改造 69 Copyright © 2026, Oracle and/or

    its affiliates partkey1 C1 C2 表パーティション p1 表パーティション p2 表パーティション pn パーティション表(Partition TABLE) 1つの表を内部的に複数のセグメントに分割する C1列のB*Tree索引 C2列のB*Tree索引 ROWID ポインタ ROWID ポインタ 索引(INDEX) 1つの索引ツリーからすべての表パーティションをアドレッシング可能 任意の列に索引を作るのに表のパーティション・キー列 (partkey1)が含まれるか考慮しなくてもよい
  59. パーティショニング実装2 : パーティション表 索引からのアドレッシング方式の改造 70 Copyright © 2026, Oracle and/or

    its affiliates partkey1 C1 C2 表パーティション p1 表パーティション p2 表パーティション pn パーティション表(Partition TABLE) 1つの表を内部的に複数のセグメントに分割する C1列のB*Tree索引 C2列のB*Tree索引 ROWID ポインタ ROWID ポインタ 索引(INDEX) 1つの索引ツリーからすべての表パーティションをアドレッシング可能 トランザクション (索引) 分析 (パーティショニング)
  60. パーティショニング実装2 : パーティション表 索引からのアドレッシング方式の改造 71 Copyright © 2026, Oracle and/or

    its affiliates partkey1 C1 C2 表パーティション p1 表パーティション p2 表パーティション pn パーティション表(Partition TABLE) 1つの表を内部的に複数のセグメントに分割する C1列のB*Tree索引 C2列のB*Tree索引 ROWID ポインタ ROWID ポインタ 索引(INDEX) 1つの索引ツリーからすべての表パーティションをアドレッシング可能 トランザクション (索引) 分析 (パーティショニング) 性質の異なるアクセス・パターンへの最適化が共存できる
  61. パーティショニング実装2 : パーティション表/パーティション索引 表パーティション・キー列とは独立した索引パーティション・キー列で索引もパーティショニング可能 72 Copyright © 2026, Oracle and/or

    its affiliates partkey1 C1 C2 表パーティション p1 表パーティション p2 表パーティション pn パーティション表(Partition TABLE) 1つの表を内部的に複数のセグメントに分割する C1列でパーティショニングしたB*Tree索引 ROWID ポインタ 索引パーティション p1 索引パーティション pm パーティション索引(Partition INDEX) 表パーティション・キー(partkey1)列と独立した索引定義
  62. ファイルへのI/O API概略 メモリーのアドレスとファイルのアドレス間でデータのコピー 76 Copyright © 2026, Oracle and/or its

    affiliates ファイルI/O API概略 ローカル・メモリーとファイルのアドレスを指定 io_api(fd, *buf_addr, *file_addr, size) *buf_addr :メモリー・アドレス *file_addr :ファイル・アドレス fd : ファイル識別子 size : コピーするデータ量
  63. ファイルへのI/O API概略 メモリーのアドレスとファイルのアドレス間でデータのコピー 77 Copyright © 2026, Oracle and/or its

    affiliates ファイルI/O API概略 ローカル・メモリーとファイルのアドレスを指定 io_api(fd, *buf_addr, *file_addr, size) *buf_addr :メモリー・アドレス *file_addr :ファイル・アドレス fd : ファイル識別子 メモリー → ファイル write() ファイル → メモリー read()
  64. ファイルへのI/O 78 Copyright © 2026, Oracle and/or its affiliates *buf_addr

    :メモリー・アドレス *file_addr :ファイル・アドレス プロセス ファイルシステムのファイル • デバイス・ファイルの中からサイズ変更が容易な領域を割り当てたファイル アプリケーション・プロセス • ファイルにI/Oリクエストを発行するOSプロセス (1) プロセスはファイルのアドレスを指定してI/Oシステム・コール発行 ファイルシステム・ファイル
  65. ファイルへのI/O 79 Copyright © 2026, Oracle and/or its affiliates プロセス

    ファイルシステムのファイル • デバイス・ファイルの中からサイズ変更が容易な領域を割り当てたファイル アプリケーション・プロセス • ファイルにI/Oリクエストを発行するOSプロセス (1) プロセスはファイルのアドレスを指定してI/Oシステム・コール発行 物理デバイス・ファイル • 1つの物理ストレージ・デバイスをファイルに抽象化したもの • 固定サイズの巨大なファイル • 例: /dev/sda (2) ファイルからデバイス・ファイルへのアドレス変換 ファイルシステム ファイルシステム・ファイル 物理デバイス・ファイル
  66. 物理デバイス・ファイル 物理デバイス・ファイル ファイルへのI/O 80 Copyright © 2026, Oracle and/or its

    affiliates プロセス ファイルシステムのファイル • デバイス・ファイルの中からサイズ変更が容易な領域を割り当てたファイル アプリケーション・プロセス • ファイルにI/Oリクエストを発行するOSプロセス (1) プロセスはファイルのアドレスを指定してI/Oシステム・コール発行 (2) ファイルからデバイス・ファイルへのアドレス変換 論理ボリューム・ファイル • 物理デバイス・ファイルを再編成したデバイス・ファイル • ストライピングやミラーリングの付加機能 物理デバイス・ファイル • 1つの物理ストレージ・デバイスをファイルに抽象化したもの • 固定サイズの巨大なファイル • 例: /dev/sda (3) 論理ボリューム・ファイルから物理デバイス・ファイルへのアドレス変換 論理ボリューム・ファイル ファイルシステム・ファイル ファイルシステム 論理ボリューム・マネージャ
  67. ユーザー空間 OSカーネル空間 物理デバイス・ファイル 物理デバイス・ファイル ファイルシステムから下はOSカーネルの一部として動作 81 Copyright © 2026, Oracle

    and/or its affiliates プロセス ファイルシステムのファイル • デバイス・ファイルの中からサイズ変更が容易な領域を割り当てたファイル アプリケーション・プロセス • ファイルにI/Oリクエストを発行するOSプロセス (1) プロセスはファイルのアドレスを指定してI/Oシステム・コール発行 (2) ファイルからデバイス・ファイルへのアドレス変換 論理ボリューム・ファイル • 物理デバイス・ファイルを再編成したデバイス・ファイル • ストライピングやミラーリングの付加機能 物理デバイス・ファイル • 1つの物理ストレージ・デバイスをファイルに抽象化したもの • 固定サイズの巨大なファイル • 例: /dev/sda (3) 論理ボリューム・ファイルから物理デバイス・ファイルへのアドレス変換 論理ボリューム・ファイル ファイルシステム・ファイル ファイルシステム 論理ボリューム・マネージャ
  68. デバイス・ ファイル Oracle Automatic Storage Management(ASM) Oracle Database専用のファイルシステム兼ボリューム・マネージャ (Oracle Database

    10g) ファイル構造 Oracle構造 POSIXファイルシステム ボリューム・マネージャ ファイルシステム 表、索引 表領域 ファイル ASM ASM 表、索引 表領域 ボリューム・マネージャ ファイルシステム ファイル Copyright © 2026, Oracle and/or its affiliates 83
  69. ASMディスクグループ: 物理デバイス・ファイルを束ねた巨大なストレージ 84 Copyright © 2026, Oracle and/or its affiliates

    表領域(TABLESPACE) データファイル (ASMファイル) 表(TABLE) CREATE TABLE 表A (…) TABLESPACE 表領域α CREATE TABLESPACE 表領域α DATAFILE ‘+DATA’ 表は表領域をストレージに指定する 表領域はファイルをストレージに指定する
  70. ASMディスクグループ: 物理デバイス・ファイルを束ねた巨大なストレージ 85 Copyright © 2026, Oracle and/or its affiliates

    表領域(TABLESPACE) データファイル (ASMファイル) 表(TABLE) ASMディスクグループ DATA CREATE DISKGROUP DATA DISK ‘/dev/…’ ASMディスクグループはデバイス・ファイルを ストレージに指定する CREATE TABLE 表A (…) TABLESPACE 表領域α CREATE TABLESPACE 表領域α DATAFILE ‘+DATA’ 表は表領域をストレージに指定する 表領域はファイルをストレージに指定する ※ASMディスクグループ名を指定すると ファイル・パスが自動生成される 物理ストレージ・デバイス
  71. ASMディスクグループ: 物理デバイス・ファイルを束ねた巨大なストレージ 86 Copyright © 2026, Oracle and/or its affiliates

    CREATE TABLE 表A (…) TABLESPACE 表領域α CREATE TABLESPACE 表領域α DATAFILE ‘+DATA’ 表領域(TABLESPACE) データファイル (ASMファイル) 表(TABLE) ASMディスクグループ DATA 表は表領域をストレージに指定する 表領域はファイルをストレージに指定する ASMディスクグループはデバイス・ファイルを ストレージに指定する ※ASMディスクグループ名を指定すると ファイル・パスが自動生成される ASM ファイルシステム兼ボリューム・マネージャ 物理ストレージ・デバイス
  72. ASMディスクグループ DATA ASMファイル ASMのファイル配置コンセプト Stripe And Mirror Everything (S.A.M.E.) 87

    Copyright © 2026, Oracle and/or its affiliates 物理ストレージ・デバイス ファイルを分割し、すべてのストレージ・デバイスに • Stripeすることでどのファイルへのアクセスも全デバイスの性能を引き出す • Mirrorすることで冗長性を持たせる • ストレージ・デバイスが増減してもその性質を維持する
  73. ASMファイル ASMのファイル配置コンセプト1: Stripe Everything Stripe And Mirror Everything (S.A.M.E.) 88

    Copyright © 2026, Oracle and/or its affiliates 物理ストレージ・デバイス extent extent extent extent ファイルをエクステントに分割し、すべてのストレージ・デバイスにストライプすることですべてのデバイスの性能を引き出す ASMファイル ASMエクステント
  74. データのストレージへのレイアウト1 : パーティションごとにストレージ・デバイスを固定 89 Copyright © 2026, Oracle and/or its

    affiliates ストレージ・デバイスの性能がスケールするには partkey1 p1 p2 p4 p3 p1 p2 p3 p4 パーティション表 ストレージ・デバイス パーティションごとにストレージ・デバイスを固定
  75. データのストレージへのレイアウト1 : パーティションごとにストレージ・デバイスを固定 90 Copyright © 2026, Oracle and/or its

    affiliates ストレージ・デバイスの性能がスケールするには partkey1 p1 p2 p4 p3 p1 p2 p3 p4 パーティション表 ストレージ・デバイス パーティションごとにストレージ・デバイスを固定
  76. データのストレージへのレイアウト1 : パーティションごとにストレージ・デバイスを固定 91 Copyright © 2026, Oracle and/or its

    affiliates ストレージ・デバイスの性能がスケールするには partkey1 p1 p2 p4 p3 p1 p2 p3 p4 パーティション表 ストレージ・デバイス SQL1 SQL1 SQL1 SQL1 すべてのパーティションに均質なアクセス分布 すべてのストレージにアクセスが分散 (ストレージ性能がスケールする) パーティションごとにストレージ・デバイスを固定
  77. データのストレージへのレイアウト1 : パーティションごとにストレージ・デバイスを固定 92 Copyright © 2026, Oracle and/or its

    affiliates ストレージ・デバイスの性能がスケールするには partkey1 p1 p2 p4 p3 p1 p2 p3 p4 パーティション表 ストレージ・デバイス SQL2 特定のパーティションに偏るアクセス分布 一部のストレージにアクセスが偏る (ストレージ性能がスケールしない) パーティションごとにストレージ・デバイスを固定
  78. データのストレージへのレイアウト1 : パーティションごとにストレージ・デバイスを固定 93 Copyright © 2026, Oracle and/or its

    affiliates ストレージ・デバイスの性能がスケールするには partkey1 p1 p2 p4 p3 p1 p2 p3 p4 パーティション表 ストレージ・デバイス SQL2 特定のパーティションに偏るアクセス分布 一部のストレージにアクセスが偏る (ストレージ性能がスケールしない) パーティションごとにストレージ・デバイスを固定 パーティショニングの想定から外れたアクセス・パターンに弱い
  79. データのストレージへのレイアウト2 : Stripe Everything 94 Copyright © 2026, Oracle and/or

    its affiliates ストレージ・デバイスの性能がスケールするには partkey1 p1 p2 p4 p3 p1 p2 p3 p4 パーティション表 ストレージ・デバイス すべてのパーティションをすべてのストレージ・デバイスにストライプ
  80. データのストレージへのレイアウト2 : Stripe Everything 95 Copyright © 2026, Oracle and/or

    its affiliates ストレージ・デバイスの性能がスケールするには partkey1 p1 p2 p4 p3 p1 p2 p3 p4 パーティション表 ストレージ・デバイス すべてのパーティションをすべてのストレージ・デバイスにストライプ SQL1 SQL1 SQL1 SQL1 すべてのパーティションに均質なアクセス分布 すべてのストレージにアクセスが分散 (ストレージ性能がスケールする)
  81. データのストレージへのレイアウト2 : Stripe Everything 96 Copyright © 2026, Oracle and/or

    its affiliates ストレージ・デバイスの性能がスケールするには partkey1 p1 p2 p4 p3 p1 p2 p3 p4 パーティション表 ストレージ・デバイス すべてのパーティションをすべてのストレージ・デバイスにストライプ SQL2 特定のパーティションに偏るアクセス分布 すべてのストレージにアクセスが分散 (ストレージ性能がスケールする) どのパーティションへのアクセス・パターンでもストレージ性能がスケール
  82. ASMファイル ASMのファイル配置コンセプト2: Mirror Everything Stripe And Mirror Everything (S.A.M.E.) 97

    Copyright © 2026, Oracle and/or its affiliates FAILGROUP 3 extent extent extent extent ファイルをエクステントに分割し、1つのエクステントを複数のストレージ・デバイスにミラーすることで冗長性を持たせる ASMファイル ASMエクステント FAILGROUP 2 FAILGROUP 1 FAILGROUP n • FAILGROUPは複数の物理デバイスをグループ化したもので、物理ストレージ筐体を想定 • 1つのASMエクステントを異なるFAILGROUPのデバイスにミラーする → 1つのFAILGROUPにアクセスできなくなったとしても他のFAILGROUPにミラーが存在する
  83. ASMファイル ASMのファイル配置コンセプト3: 動的リバランス Stripe And Mirror Everything (S.A.M.E.) 98 Copyright

    © 2026, Oracle and/or its affiliates FAILGROUP 3 extent extent extent extent ASMディスクグループにストレージ・デバイスが増減しても、S.A.M.E.を維持するようにエクステントを移動させる ASMファイル ASMエクステント FAILGROUP 2 FAILGROUP 1 FAILGROUP n
  84. ASMファイル エクステント・マップの管理: ASMインスタンス Oracleインスタンスを改造したプロセス群 99 Copyright © 2026, Oracle and/or

    its affiliates FAILGROUP 3 extent extent extent extent ASMファイル ASMエクステント FAILGROUP 2 FAILGROUP 1 FAILGROUP n ASMインスタンス • Oracleインスタンスを改造したプロセス群 • ASMファイルのエクステントの配置マッピングの管理 → ファイルシステム兼ボリューム・マネージャ
  85. ASMインスタンス: Oracleインスタンスを改造したもの エクステント・マップの管理 100 Copyright © 2026, Oracle and/or its

    affiliates [oracle@ptvm36 ~]$ ps -efH | grep asm_ | grep -v grep grid 17977 1 0 4月28 ? 00:01:24 asm_pmon_+ASM1 grid 17981 1 0 4月28 ? 00:01:02 asm_clmn_+ASM1 grid 17987 1 0 4月28 ? 00:03:21 asm_psp0_+ASM1 grid 18138 1 1 4月28 ? 04:11:34 asm_vktm_+ASM1 grid 18145 1 0 4月28 ? 00:02:06 asm_gen0_+ASM1 grid 18151 1 0 4月28 ? 00:00:33 asm_mman_+ASM1 grid 18160 1 0 4月28 ? 00:01:38 asm_gen1_+ASM1 grid 18185 1 0 4月28 ? 00:10:52 asm_diag_+ASM1 grid 18193 1 0 4月28 ? 00:02:14 asm_ping_+ASM1 grid 18197 1 0 4月28 ? 00:01:58 asm_pman_+ASM1 grid 18214 1 0 4月28 ? 01:06:57 asm_dia0_+ASM1 grid 18217 1 0 4月28 ? 00:17:53 asm_lmon_+ASM1 grid 18222 1 0 4月28 ? 00:28:10 asm_lmd0_+ASM1 grid 18224 1 0 4月28 ? 00:36:59 asm_lms0_+ASM1 grid 18229 1 0 4月28 ? 00:20:59 asm_lmhb_+ASM1 grid 18234 1 0 4月28 ? 00:00:40 asm_lck1_+ASM1 grid 18238 1 0 4月28 ? 00:00:34 asm_dbw0_+ASM1 grid 18242 1 0 4月28 ? 00:00:43 asm_lgwr_+ASM1 grid 18246 1 0 4月28 ? 00:01:38 asm_ckpt_+ASM1 grid 18250 1 0 4月28 ? 00:00:29 asm_smon_+ASM1 … • asm_で始まるプロセス群 • エクステント配置更新をトランザクショナルに処理 • クラスタ環境では複数ノードのASMインスタンス同士が通信して エクステント配置の整合性を維持 • クラスタ・ファイルシステム兼クラスタ・ボリューム・マネージャ
  86. OSファイルシステムのI/Oモデル OracleインスタンスのプロセスがOSにシステム・コールを発行する 101 Copyright © 2026, Oracle and/or its affiliates

    ファイルシステム 論理ボリューム・マネージャ ファイル プロセス 物理デバイス・ファイル システム・コール OSファイルシステム Oracleインスタンス OSカーネル
  87. ASMのI/Oモデル - 誤 OracleインスタンスのプロセスがASMインスタンスにI/Oコールを発行する - のではない 102 Copyright © 2026,

    Oracle and/or its affiliates ファイルシステム 論理ボリューム・マネージャ ファイル プロセス 物理デバイス・ファイル システム・コール ファイルシステム 論理ボリューム・マネージャ ASMファイル プロセス 物理デバイス・ファイル I/Oコール システム・コール ASMインスタンス OSファイルシステム ASM (誤) Oracleインスタンス OSカーネル Oracleインスタンス OSカーネル
  88. ASMのI/Oモデル - 正 OracleインスタンスのプロセスがOS管理の物理デバイス・ファイルに対してシステム・コールを発行する 103 Copyright © 2026, Oracle and/or

    its affiliates ファイルシステム 論理ボリューム・マネージャ ファイル プロセス 物理デバイス・ファイル システム・コール Oracleインスタンス OSカーネル ファイルシステム 論理ボリューム・マネージャ ASMファイル プロセス 物理デバイス・ファイル I/Oコール Oracleインスタンス OSカーネル システム・コール OSファイルシステム ASM (正)
  89. ASMのI/Oモデル - 正 OracleインスタンスのプロセスがOSにI/Oコールを発行する 104 Copyright © 2026, Oracle and/or

    its affiliates プロセス I/Oコール Oracleインスタンス システム・コール ASMファイル プロセス ASMインスタンス extent extent extent 物理デバイス・ファイル エクステント・マップ管理 ファイルシステム 論理ボリューム・マネージャ ASMファイル エクステント・マップ ASMインスタンスが作成したエクステント・マップを使って、Oracleインスタンスのプロセスがデバイス・ファイルにI/Oを発行 OSカーネル
  90. 例: OracleプロセスのASMディスク・グループへの書き込み Oracleインスタンスのプロセスが複数のデバイス・ファイルへI/O発行 105 Copyright © 2026, Oracle and/or its

    affiliates io_submit(0x7f697e08f000, 3, [ {aio_data=0x7f69789a2970, aio_lio_opcode=IOCB_CMD_PWRITE, aio_fildes=257, aio_buf="¥1¥"¥0¥0¥251¥n¥5¥0(¥0¥0¥0¥20¥200¥t¥¥<¥2¥0¥0¥5¥0¥0¥0¥304¥260&¥0¥1¥0¥0¥0"..., aio_nbytes=1024, aio_offset=605377024}, {aio_data=0x7f697dfa42b0, aio_lio_opcode=IOCB_CMD_PWRITE, aio_fildes=256, aio_buf="¥1¥"¥0¥0¥251¥n¥5¥0(¥0¥0¥0¥20¥200¥t¥¥<¥2¥0¥0¥5¥0¥0¥0¥304¥260&¥0¥1¥0¥0¥0"..., aio_nbytes=1024, aio_offset=18401808896}, {aio_data=0x7f6978a14a28, aio_lio_opcode=IOCB_CMD_PWRITE, aio_fildes=258, aio_buf="¥1¥"¥0¥0¥251¥n¥5¥0(¥0¥0¥0¥20¥200¥t¥¥<¥2¥0¥0¥5¥0¥0¥0¥304¥260&¥0¥1¥0¥0¥0"..., aio_nbytes=1024, aio_offset=18385031680} ]) = 3 io_submit: 非同期I/Oをリクエスト・キューに発行 3つのI/Oリクエスト 異なる3つのファイル・ディスクリプタ IOCB_CMD_PWRITE: 書き込み 3つのI/O リクエスト
  91. ファイルシステム & ボリューム・マネージャ 抽象データ空間からストレージ・デバイスへのアドレッシング 一般的にはファイル・アドレスから物理デバイス・アドレスへの変換はOSカーネルの役割 106 Copyright © 2026, Oracle

    and/or its affiliates 表(TABLE) 表領域(TABLESPACE) ファイル 抽象データ空間 ↓ ファイル・アドレス ファイル・アドレス ↓ 物理デバイス・アドレス 物理デバイス・ファイル アドレスの概念がない抽象データ空間 アドレスの概念がある物理データ構造 ストレージの抽象概念 ストレージの物理デバイス ユーザー空間のDBMSプロセス OSカーネル空間
  92. ファイルシステム & ボリューム・マネージャ 抽象データ空間からストレージ・デバイスへのアドレッシング Oracle Databaseは1プロセス内でのストレージ・デバイスまでのアドレッシング能力を獲得した 107 Copyright © 2026,

    Oracle and/or its affiliates 表(TABLE) 表領域(TABLESPACE) ファイル ファイル・アドレス ↓ 物理デバイス・ファイル・アドレス 物理デバイス・ファイル アドレスの概念がない抽象データ空間 アドレスの概念がある物理データ構造 ストレージの抽象概念 ストレージの物理デバイス 抽象データ構造 ↓ ファイル・アドレス 抽象データ空間 ↓ ファイル・アドレス ↓ 物理デバイス・アドレス ASMの実装で2段階のアドレス変換が Oracleインスタンスの1プロセス内で完結
  93. ストレージ・ノードのスケール・アウト コンピュート・ノードのスケール・アウト RAC + ASM コンピュート・ノードとストレージ・ノードの増減が独立 108 Copyright © 2026,

    Oracle and/or its affiliates 全コンピュート・ノードが Automatic Storage Management Real Application Clusters 全ストレージ・デバイスにアクセス データの永続化ストレージ CPU+データ・キャッシュ用メモリー
  94. ストレージ・ノードのスケール・アウト コンピュート・ノードのスケール・アウト Oracle Exadata Database Machine 汎用ハードウェアをソフトウェアでインテグレート 110 Copyright ©

    2026, Oracle and/or its affiliates 全コンピュート・ノードが Automatic Storage Management Real Application Clusters 全ストレージ・デバイスにアクセス データの永続化ストレージ + データベース処理の協調動作 CPU+データ・キャッシュ用メモリー
  95. ストレージ・ノード コンピュート・ノード Exadataのストレージ構成 ASMの機能でストレージ・デバイスをStripe And Mirror Everything 111 Copyright ©

    2026, Oracle and/or its affiliates • ストレージ・ノードは12個の3.5inch ハード・ディスクを搭載 • SCSIコントローラ・チップのRAID機能を使わずに、12個の ストレージ・デバイスとしてASMの機能でStripe And Mirror • SQL処理の一部をストレージ・ノードにオフロード 1台あたり12デバイス
  96. ストレージ・ノード コンピュート・ノード Exadataのストレージ構成 ASMの機能でストレージ・デバイスをStripe And Mirror Everything 112 Copyright ©

    2026, Oracle and/or its affiliates • 1台のストレージ・ノードの12個のデバイスを1つのASM FAILGROUPとしてグループ化 • Exadataストレージのデバイスとは専用プロトコルで通 信するためデバイス・ファイル(/dev/*)としては現れない • ストレージ・ノードは12個の3.5inch ハード・ディスクを搭載 • SCSIコントローラ・チップのRAID機能を使わずに、12個の ストレージ・デバイスとしてASMの機能でStripe And Mirror • SQL処理の一部をストレージ・ノードにオフロード FAILGROUP 1 1台あたり12デバイス
  97. ストレージ・ノード コンピュート・ノード Exadataのストレージ構成 ASMの機能でストレージ・デバイスをStripe And Mirror Everything 113 Copyright ©

    2026, Oracle and/or its affiliates 1つのASMディスクグループあたり12デバイス×n台 FAILGROUP 1 FAILGROUP 2 FAILGROUP n 1台あたり12デバイス ×n台
  98. Exadataのストレージ構成 ASMのストレージ構成はSELECT文で参照可能 114 Copyright © 2026, Oracle and/or its affiliates

    SQL> select group_number,disk_number,failgroup,name from v$asm_disk order by group_number,disk_number; GROUP_NUMBER DISK_NUMBER FAILGROUP NAME ------------ ----------- -------------- ---------------------------- 1 0 FUJICEL01 DATAC1_CD_00_FUJICEL01 1 1 FUJICEL01 DATAC1_CD_01_FUJICEL01 1 2 FUJICEL01 DATAC1_CD_02_FUJICEL01 1 3 FUJICEL01 DATAC1_CD_03_FUJICEL01 1 4 FUJICEL01 DATAC1_CD_04_FUJICEL01 1 5 FUJICEL01 DATAC1_CD_05_FUJICEL01 1 6 FUJICEL01 DATAC1_CD_06_FUJICEL01 1 7 FUJICEL01 DATAC1_CD_07_FUJICEL01 1 8 FUJICEL01 DATAC1_CD_08_FUJICEL01 1 9 FUJICEL01 DATAC1_CD_09_FUJICEL01 1 10 FUJICEL01 DATAC1_CD_10_FUJICEL01 1 11 FUJICEL01 DATAC1_CD_11_FUJICEL01 1 12 FUJICEL02 DATAC1_CD_00_FUJICEL02 1 13 FUJICEL02 DATAC1_CD_01_FUJICEL02 : : : : FUJICEL01 DATAC1_CD_00_FUJICEL01 FUJICEL01 DATAC1_CD_01_FUJICEL01 FUJICEL01 DATAC1_CD_02_FUJICEL01 FUJICEL01 DATAC1_CD_03_FUJICEL01 FUJICEL01 DATAC1_CD_04_FUJICEL01 FUJICEL01 DATAC1_CD_05_FUJICEL01 FUJICEL01 DATAC1_CD_06_FUJICEL01 FUJICEL01 DATAC1_CD_07_FUJICEL01 FUJICEL01 DATAC1_CD_08_FUJICEL01 FUJICEL01 DATAC1_CD_09_FUJICEL01 FUJICEL01 DATAC1_CD_10_FUJICEL01 FUJICEL01 DATAC1_CD_11_FUJICEL01 FAILGROUP名 ストレージ・デバイス名 1つのFAILGROUPに 12個のストレージ・デバイス
  99. ストレージ・ノード コンピュート・ノード Exadata V2, X2 ~ X8 ストレージ・ノードにFlashメモリーを搭載し透過的なキャッシュ・メモリーとして使用 115 Copyright

    © 2026, Oracle and/or its affiliates 1つのASMディスクグループあたり12デバイス×n台 FAILGROUP 1 FAILGROUP 2 FAILGROUP n • PCIe接続のFlashメモリー・カードを透過的な キャッシュ・メモリーとして使用 キャッシュ・メモリー 1台あたり12デバイス
  100. ストレージ・ノード コンピュート・ノード Exadata X8M ~ ストレージ・ノードのメモリーにRDMAでアクセスし搭載し透過的なキャッシュ・メモリーとして使用 116 Copyright © 2026,

    Oracle and/or its affiliates 1つのASMディスクグループあたり12デバイス×n台 FAILGROUP 1 FAILGROUP 2 FAILGROUP n キャッシュ・メモリー • PCIe接続のFlashメモリー・カードを透過的な キャッシュ・メモリーとして使用 キャッシュ・メモリー • メモリーを透過的なキャッシュ・メモリーとして使用 • コンピュート・ノードからRDMAでアクセス 1台あたり12デバイス
  101. アドレスのある概念にデータを格納 - Oracleデータ・ブロック(再掲) 固定サイズのブロックに表データが格納される 117 Copyright © 2026, Oracle and/or

    its affiliates データファイル データベース・バッファ・キャッシュ チェックポイント メモリー → ファイル キャッシュ・ミス ファイル → メモリー データベース・バッファ・キャッシュにデータ・ブロックが キャッシュされていればそのデータでSQL実行
  102. アドレスのある概念にデータを格納 - Oracleデータ・ブロック(再掲) 固定サイズのブロックに表データが格納される 118 Copyright © 2026, Oracle and/or

    its affiliates データファイル データベース・バッファ・キャッシュ チェックポイント メモリー → ファイル キャッシュ・ミス ファイル → メモリー データベース・バッファ・キャッシュにデータ・ブロックが キャッシュされていればそのデータでSQL実行 データベース・バッファ・キャッシュにデータ・ブロックが キャッシュされていなければデータファイルから取得
  103. 0 1 10 100 1,000 10,000 100,000 1,000,000 10,000,000 100,000,000

    1.E+00 1.E+03 1.E+06 1.E+09 1.E+12 1.E+15 アクセス時間(ns) 容量(Byte) 階層が変わるとアクセス時間の桁が変わる デバイスのアクセス時間と容量 Copyright © 2026, Oracle and/or its affiliates 120 register 8B 0.5ns L1 Cache 32KB 1ns L2 Cache 2MB 4ns L3 Cache 20MB 10ns CPUチップ内 1GHzの1clock → 1 1K 1M 1G 1T 1P
  104. 0 1 10 100 1,000 10,000 100,000 1,000,000 10,000,000 100,000,000

    1.E+00 1.E+03 1.E+06 1.E+09 1.E+12 1.E+15 アクセス時間(ns) 容量(Byte) 階層が変わるとアクセス時間の桁が変わる デバイスのアクセス時間と容量 Copyright © 2026, Oracle and/or its affiliates 121 register 8B 0.5ns L1 Cache 32KB 1ns L2 Cache 2MB 4ns L3 Cache 20MB 10ns CPUチップ内 1GHzの1clock → 1 1K 1M 1G 1T 1P DRAM 64GB 100ns PMEM 128GB 300ns メモリー
  105. 0 1 10 100 1,000 10,000 100,000 1,000,000 10,000,000 100,000,000

    1.E+00 1.E+03 1.E+06 1.E+09 1.E+12 1.E+15 アクセス時間(ns) 容量(Byte) 階層が変わるとアクセス時間の桁が変わる デバイスのアクセス時間と容量 Copyright © 2026, Oracle and/or its affiliates 122 register 8B 0.5ns L1 Cache 32KB 1ns L2 Cache 2MB 4ns L3 Cache 20MB 10ns Flash Memory 6TB 20,000ns (20μs) HDD 20TB 5,000,000ns (5ms) ストレージ CPUチップ内 1GHzの1clock → 1 1K 1M 1G 1T 1P DRAM 64GB 100ns PMEM 128GB 300ns メモリー
  106. 0 1 10 100 1,000 10,000 100,000 1,000,000 10,000,000 100,000,000

    1.E+00 1.E+03 1.E+06 1.E+09 1.E+12 1.E+15 アクセス時間(ns) 容量(Byte) 階層が変わるとアクセス時間の桁が変わる デバイスのアクセス時間と容量 Copyright © 2026, Oracle and/or its affiliates 123 register 8B 0.5ns L1 Cache 32KB 1ns L2 Cache 2MB 4ns L3 Cache 20MB 10ns Flash Memory 6TB 20,000ns (20μs) HDD 20TB 5,000,000ns (5ms) ストレージ CPUチップ内 1GHzの1clock → 1 1K 1M 1G 1T 1P DRAM 64GB 100ns PMEM 128GB 300ns メモリー Flashメモリーよりも高速なデバイスを キャッシュとして使用
  107. ネットワーク・ストレージから1データブロックを取得するレイテンシ短縮 ストレージ・ノードのキャッシュ用デバイスの高速化 124 Copyright © 2026, Oracle and/or its affiliates

    X7 X8M X9M X10M X11M 250 µs 17 µs 19 µs 14 µs Exadataモデル Flashメモリー PMEM: Intel Optane Persistent Memory レイテンシ (小さいほど良い) PMEM DRAM <20μs
  108. 0 1 10 100 1,000 10,000 100,000 1,000,000 10,000,000 100,000,000

    1.E+00 1.E+03 1.E+06 1.E+09 1.E+12 1.E+15 アクセス時間(ns) 容量(Byte) 階層が変わるとアクセス時間の桁が変わる デバイスのアクセス時間と容量 Copyright © 2026, Oracle and/or its affiliates 125 register 8B 0.5ns L1 Cache 32KB 1ns L2 Cache 2MB 4ns L3 Cache 20MB 10ns Flash Memory 6TB 20,000ns (20μs) HDD 20TB 5,000,000ns (5ms) ストレージ CPUチップ内 1GHzの1clock → 1 1K 1M 1G 1T 1P DRAM 64GB 100ns PMEM 128GB 300ns メモリー データ・キャッシュ用デバイスのアクセス時間を 短縮すればよい?
  109. 一般的なEthernet/IP通信モデルの参考値 - pingコマンド リモート・ノードのOSカーネルに応答してもらうだけで約50μs 126 Copyright © 2026, Oracle and/or

    its affiliates # ping 192.168.20.91 -c 10 PING 192.168.20.91 (192.168.20.91) 56(84) bytes of data. 64 bytes from 192.168.20.91: icmp_seq=1 ttl=64 time=0.056 ms 64 bytes from 192.168.20.91: icmp_seq=2 ttl=64 time=0.055 ms 64 bytes from 192.168.20.91: icmp_seq=3 ttl=64 time=0.052 ms 64 bytes from 192.168.20.91: icmp_seq=4 ttl=64 time=0.046 ms 64 bytes from 192.168.20.91: icmp_seq=5 ttl=64 time=0.044 ms 64 bytes from 192.168.20.91: icmp_seq=6 ttl=64 time=0.055 ms 64 bytes from 192.168.20.91: icmp_seq=7 ttl=64 time=0.056 ms 64 bytes from 192.168.20.91: icmp_seq=8 ttl=64 time=0.051 ms 64 bytes from 192.168.20.91: icmp_seq=9 ttl=64 time=0.041 ms 64 bytes from 192.168.20.91: icmp_seq=10 ttl=64 time=0.044 ms --- 192.168.20.91 ping statistics --- 10 packets transmitted, 10 received, 0% packet loss, time 9212ms rtt min/avg/max/mdev = 0.041/0.050/0.056/0.005 ms ping OS OS ネットワーク・デバイス ネットワーク・デバイス アプリケーション・プロセス ping応答時間 約50μs
  110. 0 1 10 100 1,000 10,000 100,000 1,000,000 10,000,000 100,000,000

    1.E+00 1.E+03 1.E+06 1.E+09 1.E+12 1.E+15 アクセス時間(ns) 容量(Byte) 階層が変わるとアクセス時間の桁が変わる デバイスのアクセス時間と容量 Copyright © 2026, Oracle and/or its affiliates 127 register 8B 0.5ns L1 Cache 32KB 1ns L2 Cache 2MB 4ns L3 Cache 20MB 10ns Flash Memory 6TB 20,000ns (20μs) HDD 20TB 5,000,000ns (5ms) ストレージ CPUチップ内 1GHzの1clock → 1 1K 1M 1G 1T 1P DRAM 64GB 100ns PMEM 128GB 300ns メモリー データ・キャッシュ用デバイスのアクセス時間が 短縮しただけではネットワーク・ストレージの <20μsのレイテンシは達成できない
  111. 一般的なネットワーク・ストレージへのI/Oモデル ユーザー空間プロセスがI/OデバイスにアクセスするにはOSにシステム・コールを発行 129 Copyright © 2026, Oracle and/or its affiliates

    プロセス アプリケーション・プロセス ストレージ管理プロセス ストレージ・デバイス ネットワーク・デバイス ネットワーク・デバイス データ OS OS プロセス OS
  112. 一般的なネットワーク・ストレージへのI/Oモデル OSにシステム・コールを発行するとコンテキスト・スイッチが起こる 130 Copyright © 2026, Oracle and/or its affiliates

    プロセス OS OS プロセス ストレージ管理プロセス OS ストレージ・デバイス ネットワーク・デバイス ネットワーク・デバイス コンテキスト・スイッチ コンテキスト・スイッチ コンテキスト・スイッチ アプリケーション・プロセス コンテキスト・スイッチ
  113. I/OデバイスへのアクセスはOSに依頼 ユーザー・プロセスとOSカーネルの実行プログラム切り替え 132 Copyright © 2026, Oracle and/or its affiliates

    CPUスレッド1 時間 OSカーネル プロセス プロセス I/Oシステムコール発行 read() write() I/Oシステムコール応答
  114. コンテキスト・スイッチ プログラムの実行情報(コンテキスト)をメモリーに退避/復帰 133 Copyright © 2026, Oracle and/or its affiliates

    CPUスレッド1 時間 OSカーネル プロセス プロセス メモリー プログラムの実行情報 (コンテキスト)
  115. コンテキスト・スイッチ プログラムの実行情報(コンテキスト)をメモリーに退避/復帰 134 Copyright © 2026, Oracle and/or its affiliates

    CPUスレッド1 時間 OSカーネル プロセス プロセス メモリー コンテキスト・スイッチ時間 数千ns (数μs) プログラムの実行情報 (コンテキスト)
  116. 0 1 10 100 1,000 10,000 100,000 1,000,000 10,000,000 100,000,000

    1.E+00 1.E+03 1.E+06 1.E+09 1.E+12 1.E+15 アクセス時間(ns) 容量(Byte) 時間: メモリー < コンテキスト・スイッチ < ストレージ コンテキスト・スイッチはメモリーにアクセス Copyright © 2026, Oracle and/or its affiliates 135 register 8B 0.5ns L1 Cache 32KB 1ns L2 Cache 2MB 4ns L3 Cache 20MB 10ns Flash Memory 6TB 20,000ns (20μs) HDD 20TB 5,000,000ns (5ms) ストレージ CPUチップ内 1GHzの1clock → 1 1K 1M 1G 1T 1P DRAM 64GB 100ns PMEM 128GB 300ns メモリー コンテキスト・スイッチ時間 数千ns (数μs)
  117. 一般的なネットワーク・ストレージへのI/Oモデル OSにシステム・コールを発行するとコンテキスト・スイッチが起こる 136 Copyright © 2026, Oracle and/or its affiliates

    プロセス OS OS プロセス ストレージ管理プロセス OS ストレージ・デバイス ネットワーク・デバイス ネットワーク・デバイス コンテキスト・スイッチ コンテキスト・スイッチ コンテキスト・スイッチ アプリケーション・プロセス コンテキスト・スイッチ
  118. 一般的なネットワーク・ストレージへのI/Oモデル 階層をデータが移動するたびにメモリーからメモリーへのコピーが発生する 137 Copyright © 2026, Oracle and/or its affiliates

    プロセス OS OS プロセス ストレージ管理プロセス OS ストレージ・デバイス ネットワーク・デバイス ネットワーク・デバイス コンテキスト・スイッチ コンテキスト・スイッチ コンテキスト・スイッチ アプリケーション・プロセス プロセス OS OS プロセス ストレージ管理プロセス OS ストレージ・デバイス ネットワーク・デバイス ネットワーク・デバイス アプリケーション・プロセス コンテキスト・スイッチ データ・コピー
  119. 一般的なネットワーク・ストレージへのI/Oモデル キャッシュ用デバイスをDRAMに置き換えたとしてもそれ以外の時間が大半を占める 138 Copyright © 2026, Oracle and/or its affiliates

    プロセス OS OS プロセス ストレージ管理プロセス ネットワーク・デバイス ネットワーク・デバイス コンテキスト・スイッチ コンテキスト・スイッチ アプリケーション・プロセス プロセス OS OS プロセス ストレージ管理プロセス ネットワーク・デバイス ネットワーク・デバイス アプリケーション・プロセス DRAM DRAM コンテキスト・スイッチ データ・コピー
  120. ネットワーク・ストレージから1データブロックを取得するレイテンシ短縮 ストレージ・ノードのキャッシュ用デバイスの高速化 + アクセス方式の変更(RDMA) 139 Copyright © 2026, Oracle and/or

    its affiliates X7 X8M X9M X10M X11M 250 µs 17 µs 19 µs 14 µs Exadataモデル Flashメモリー PMEM: Intel Optane Persistent Memory レイテンシ (小さいほど良い) PMEM + RDMA DRAM + RDMA ストレージ・キャッシュへのアクセス方式変更 Remote Direct Memory Access (RDMA)
  121. Remote Direct Memory Access (RDMA) もともとはInfiniBandの技術 • のちにHyper Converged EthernetとしてEthernet拡張規格に取り込まれた

    • Exadataのインターコネクト・ネットワーク - V1 - X8 : InfiniBand - X8M - : Hyper Converged Ethernet Direct Memory Access (DMA) • I/OデバイスがCPUのソフトウェア処理を介さずにメモリーに直接アクセス可能なハードウェア機能 • 20世紀の8bit CPUでも使われている技術 140 Copyright © 2026, Oracle and/or its affiliates
  122. Direct Memory Access: DMA I/Oデバイスがメモリーに直接アクセス 141 Copyright © 2026, Oracle

    and/or its affiliates I/Oデバイス DRAM DMA CPU DMA Direct Memory Access: DMA • I/OデバイスがCPUのソフトウェア制御を介さずにメモリーに直接アクセス • 20世紀から広く使われていた技術
  123. Direct Memory Access: DMA I/Oデバイスがメモリーに直接アクセス 142 Copyright © 2026, Oracle

    and/or its affiliates RDMA対応HCA RDMA対応HCA DRAM DRAM CPU CPU Direct Memory Access: DMA • I/OデバイスがCPUのソフトウェア制御を介さずにメモリーに直接アクセス • 20世紀から広く使われていた技術 DMA DMA DMA Network
  124. Remote Direct Memory Access: RDMA リモート・マシンのメモリー・アドレスを指定して直接アクセス 143 Copyright © 2026,

    Oracle and/or its affiliates RDMA対応HCA RDMA対応HCA DRAM DRAM RDMA CPU CPU RDMA Direct Memory Access: DMA • I/OデバイスがCPUのソフトウェア制御を介さずにメモリーに直接アクセス • 20世紀から広く使われていた技術 Remote Direct Memory Access: RDMA • ローカル・マシンのメモリーからネットワーク越しのリモート・マシンのメモリー に直接アクセス • プロセスはコンテキスト・スイッチなしにリモート・マシンのメモリーにアクセス • ゼロ・コピー通信 • もともとはInfiniBandの技術 • RDMA over Converged Ethernet拡張 途中のデータ・コピーなし コンテキスト・スイッチなし Network
  125. Remote Direct Memory Access: RDMA ローカル・マシンとリモート・マシンのメモリー・アドレスを指定してメモリー間のデータ・コピー 144 Copyright © 2026,

    Oracle and/or its affiliates RDMA対応HCA RDMA対応HCA DRAM DRAM RDMA CPU CPU RDMA *local_addr :ローカル・マシンのメモリー・アドレス *remote_addr :リモート・マシンのメモリー・アドレス size : コピーするデータ量 RDMA API概略 ローカル・メモリーとリモート・メモリーのアドレスを指定 rdma_api(*id, *local_addr, *remote_addr, size) 途中のデータ・コピーなし コンテキスト・スイッチなし *id : 通信チャネル識別子 Network
  126. 指定したアドレス間でのデータ・コピー 145 Copyright © 2026, Oracle and/or its affiliates ファイルI/O

    API概略 ローカル・メモリーとリモート・メモリーのアドレスを指定 rdma_api(*id, *local_addr, *remote_addr, size) *local_addr :ローカル・マシンのメモリー・アドレス *remote_addr :リモート・マシンのメモリー・アドレス *id : 通信チャネル識別子 size : コピーするデータ量 RDMA API概略 ローカル・メモリーとファイルのアドレスを指定 io_api(fd, *buf_addr, *file_addr, size) *buf_addr :メモリー・アドレス *file_addr :ファイル・アドレス fd : ファイル識別子 size : コピーするデータ量
  127. ファイルシステム & ボリューム・マネージャ 抽象データ空間からストレージ・デバイスへのアドレッシング(再掲) Oracle Databaseは1プロセス内でのストレージ・デバイスまでのアドレッシング能力を獲得した 146 Copyright © 2026,

    Oracle and/or its affiliates 表(TABLE) 表領域(TABLESPACE) ファイル ファイル・アドレス ↓ 物理デバイス・ファイル・アドレス 物理デバイス・ファイル アドレスの概念がない抽象データ空間 アドレスの概念がある物理データ構造 ストレージの抽象概念 ストレージの物理デバイス 抽象データ構造 ↓ ファイル・アドレス 抽象データ空間 ↓ ファイル・アドレス ↓ 物理デバイス・アドレス ASMの実装で2段階のアドレス変換が Oracleインスタンスの1プロセス内で完結
  128. ファイルシステム & ボリューム・マネージャ Exadata RDMA Memory (XRMEM) Oracle Databaseは1プロセス内でのストレージ・デバイスまでのアドレッシング能力を獲得した 147

    Copyright © 2026, Oracle and/or its affiliates 表(TABLE) 表領域(TABLESPACE) ファイル ファイル・アドレス ↓ 物理デバイス・ファイル・アドレス ストレージ・ノードのメモリー アドレスの概念がない抽象データ空間 アドレスの概念がある物理データ構造 ストレージの抽象概念 ストレージの物理デバイス 抽象データ構造 ↓ ファイル・アドレス 抽象データ空間 ↓ ファイル・アドレス ↓ 物理デバイス・アドレス ASMの実装で2段階のアドレス変換が Oracleインスタンスの1プロセス内で完結 メモリー・アドレス
  129. Exadata RDMA Memory (XRMEM) コンピュート・ノードのOracleプロセスがストレージのデータ・キャッシュ用メモリーにRDMAでアクセス 148 Copyright © 2026, Oracle

    and/or its affiliates RDMA対応HCA RDMA対応HCA Oracleプロセス DRAM Exadata XRMEM CPU CPU RDMA oracle Oracleインスタンスの1プロセス内でアドレス変換完結 ファイルシステム & ボリューム・マネージャ 表(TABLE) 表領域(TABLESPACE) ファイル ファイル・アドレス ↓ 物理デバイス・ファイル・ ストレージ・ノードのメモリー 抽象データ構造 ↓ ファイル・アドレス 抽象データ空間 ↓ ファイル・アドレス ↓ 物理デバイス・アドレス メモリー・アドレス コンピュート・ノード ストレージ・ノード 途中のデータ・コピーなし コンテキスト・スイッチなし
  130. ストレージ・ノードのスケール・アウト コンピュート・ノードのスケール・アウト Exadata RDMA Memory (XRMEM) レイテンシ20μs未満 キャッシュ容量1TB超 のスケール・アウト・ストレージ 149

    Copyright © 2026, Oracle and/or its affiliates キャッシュ・ミス・レイテンシ <20μs Automatic Storage Management Real Application Clusters DRAMキャッシュ >1TB ×n台 CPU+データ・キャッシュ用メモリー RDMA >1TB データ・キャッシュ用メモリー
  131. ストレージ管理方式の変更 151 Copyright © 2026, Oracle and/or its affiliates FAILGROUP

    n FAILGROUP 2 FAILGROUP 1 ASMディスクグループ Exadata - ASM Exascale - Storage Vault Storage Vault • ASMディスクグループ - 巨大なストレージ・プール • エクステント・マップをASMインスタンスが管理 • ストレージ・デバイス構成がSELECT文で見える • ‘+’記号でASMディスクグループを表す • Storage Vault - 巨大なストレージ・プール • エクステント・マップをExadata Storageが管理 • ストレージ・デバイス構成はユーザーに見せない • ‘@’記号でStorage Vaultを表す CREATE TABLESPACE 表領域α DATAFILE ‘+Diskgroup’ CREATE TABLESPACE 表領域β DATAFILE ‘@Vault’
  132. エクステント・マップ管理 - Exadata Automatic Storage Management (ASM)インスタンスがエクステント・マップを管理 152 Copyright ©

    2026, Oracle and/or its affiliates ファイル ASMインスタンス extent extent エクステント・マップ管理 Oracleインスタンス アドレス変換 エクステント・マップ Exadata - ASMインスタンスが管理 ストレージ・ノード コンピュート・ノード
  133. エクステント・マップ管理 - Exascale Exadata Storage Software (ESS)がエクステント・マップを管理 - ASMとは異なる実装 153

    Copyright © 2026, Oracle and/or its affiliates ファイル ASMインスタンス extent extent エクステント・マップ管理 Oracleインスタンス アドレス変換 エクステント・マップ ファイル ASMインスタンス extent extent エクステント・マップ管理 Oracleインスタンス アドレス変換 ファイル ESS extent extent エクステント・マップ管理 Exadata - ASMインスタンスが管理 Exascale - ESSが管理 ストレージ・ノード コンピュート・ノード ストレージ・ノード コンピュート・ノード
  134. Oracle Databaseカーネル大改造史 - アドレッシング データベースの根幹にかかわるアドレッシング方式をインターフェース不変で大改造 154 Copyright © 2026, Oracle

    and/or its affiliates ファイルシステム & ボリューム・マネージャ 表(TABLE) 表領域(TABLESPACE) ファイル ファイル・アドレス ↓ 物理デバイス・アドレス Exadataストレージ・ノードのメモリー 抽象データ空間 ↓ ファイル・アドレス 索引(INDEX) ストレージ・デバイス Oracleバージョン 改造 5 B*Tree索引 O(logn)でROWIDを導出する平衡木 8 Partitioning パーティション表へのフラットな索引アドレッシング 10g Bigfile表領域 ROWIDエンコーディングを変更 Oracleバージョン 改造 10g Automatic Storage Management 抽象データ空間→ファイル・アドレス→物理デバイス・アドレス まで1プロセス内でアドレス変換 19c (Exadata X8M) XRMEM ストレージ・ノードのメモリーにRDMAでアクセス 23ai (Exascale) Storage Vault ファイルのエクステント・マップ管理方式をASMから改訂 抽象データ空間 → ファイル・アドレス ファイル・アドレス → 物理デバイス・アドレス
  135. Oracle Databaseカーネル大改造史 増補改訂版 前半 前振り リレーショナル・データベースとSQLのモデル トランザクション系と分析系の共存 Oracle Databaseカーネル大改造史 -

    アドレッシング 抽象データ空間からファイルへのアドレッシング 索引とパーティショニング ファイルからストレージ・デバイスへのアドレッシング ファイルシステムと論理ボリューム・マネージャ Automatic Storage Management Exadata XRMEM 後半 Oracle Databaseカーネル大改造史 - メモリー管理 キャッシュ・メモリー CPUアーキテクチャ Non Uniform Memory Access (NUMA)最適化 32bit vs 64bit LRU キャッシュのバイパス Exadata Smart Scan キャッシュ vs インメモリ Real Application Clusters 155 Copyright © 2026, Oracle and/or its affiliates
  136. データベースのメモリー管理 157 Copyright © 2026, Oracle and/or its affiliates 巨大なサイズのデータを高速に処理する

    メモリー (DRAM) データ処理 (CPU) 不揮発性ストレージ (フラッシュ・メモリー/HDD) 低速なストレージに格納されている大量のデータを高速なDRAMに移動
  137. 0 1 10 100 1,000 10,000 100,000 1,000,000 10,000,000 100,000,000

    1.E+00 1.E+03 1.E+06 1.E+09 1.E+12 1.E+15 アクセス時間(ns) 容量(Byte) 階層が変わるとアクセス時間の桁が変わる デバイスのアクセス時間と容量 Copyright © 2026, Oracle and/or its affiliates 158 register 8B 0.5ns L1 Cache 32KB 1ns L2 Cache 2MB 4ns L3 Cache 20MB 10ns Flash Memory 6TB 20,000ns (20μs) HDD 20TB 5,000,000ns (5ms) ストレージ CPUチップ内 1GHzの1clock → 1 1K 1M 1G 1T 1P DRAM 64GB 100ns PMEM 128GB 300ns メモリー
  138. キャッシュ・メモリー階層 159 Copyright © 2026, Oracle and/or its affiliates CPU演算パイプラインが休まないように命令とデータを供給したい

    Level1 キャッシュ Level2 キャッシュ Level3 キャッシュ DRAM コントローラ DRAM モジュール アクセス時間 容量 小 大 CPU演算パイプライン (CPUコア) CPUソケット
  139. キャッシュ・メモリー階層 - が前提としている性質: 局所参照性 160 Copyright © 2026, Oracle and/or

    its affiliates CPU演算パイプラインが休まないように命令とデータを供給したい Level1 キャッシュ Level2 キャッシュ Level3 キャッシュ DRAM コントローラ DRAM モジュール 局所参照性 - あるアドレスにアクセスしたとき • 時間的 - 近い時間に • 空間的 - そのアドレスに近いアドレスにアクセスする CPU演算パイプライン (CPUコア) CPUソケット
  140. キャッシュ・メモリー階層 - が前提としている性質: 局所参照性 161 Copyright © 2026, Oracle and/or

    its affiliates CPU演算パイプラインが休まないように命令とデータを供給したい Level1 キャッシュ Level2 キャッシュ Level3 キャッシュ DRAM コントローラ DRAM モジュール 局所参照性 - あるアドレスにアクセスしたとき • 時間的 - 近い時間に • 空間的 - そのアドレスに近いアドレスにアクセスする 望ましいアクセスパターン • なるべくアクセス時間が短い階層で済ます • アクセス時間が増える階層へのアクセスを減らす CPU演算パイプライン (CPUコア) CPUソケット
  141. マルチコアCPU 162 Copyright © 2026, Oracle and/or its affiliates CPUコアごとにLevel1&2キャッシュ、コア間でLevel3キャッシュを共有

    CPU演算パイプライン (CPUコア) Level1&2 キャッシュ インターフェース DRAM モジュール CPUソケット L1 L2 L1 L2 L3 CPUコア #1 CPUコア #2 インターコネクト I/O DRAM
  142. マルチコアCPUのマルチソケット構成 163 Copyright © 2026, Oracle and/or its affiliates CPUソケット間インターコネクトも内蔵

    DRAM モジュール CPUソケット #1 L1 L2 L1 L2 L3 CPUコア #1 CPUコア #2 インターコネクト I/O DRAM DRAM モジュール CPUソケット #2 L1 L2 L1 L2 L3 CPUコア #1 CPUコア #2 I/O DRAM インターコネクト
  143. マルチコアCPUのマルチソケット構成はNon Uniform Memory Access(NUMA) 164 Copyright © 2026, Oracle and/or

    its affiliates CPUコアからDRAMへのアクセス時間が異なる DRAM モジュール CPUソケット #1 L1 L2 L1 L2 L3 CPUコア #1 CPUコア #2 インターコネクト I/O DRAM DRAM モジュール CPUソケット #2 L1 L2 L1 L2 L3 CPUコア #1 CPUコア #2 I/O DRAM インターコネクト 近 遠
  144. プロセスを実行するCPUコアとメモリーは同じNUMAノードに配置 - NUMA最適化 165 Copyright © 2026, Oracle and/or its

    affiliates CPUコアからDRAMへのアクセス時間が異なる DRAM モジュール CPUソケット #1 L1 L2 L1 L2 L3 CPUコア #1 CPUコア #2 インターコネクト I/O DRAM DRAM モジュール CPUソケット #2 L1 L2 L1 L2 L3 CPUコア #1 CPUコア #2 I/O DRAM インターコネクト 遠 近 process
  145. Oracle DatabaseのNUMA最適化 166 Copyright © 2026, Oracle and/or its affiliates

    垂直方向スケーラビリティの改善 NUMAノード#2 NUMAノード#1 oracle1 PGA1 oracle2 PGA2 PGA(プロセスごとのSQL作業領域) • OracleプロセスとそのSQL作業領域メモリー(PGA) を同じNUMAノードに配置 • 高スループットでデータにアクセスするSQLパラレル実 行で高い効果 NUMAノード#2 NUMAノード#1 DBWR1 DBWR2 SGA(プロセス間共有メモリー領域) • SGAをNUMAノードの数に分割しバックグラウンド・ プロセスのハウスキーピング処理をNUMAノードごとに 実行 • メモリー・スキャンを行うDBWRプロセスで高い効果 SGA1 SGA2 CPU メモリー CPU メモリー
  146. マルチコアCPU - 21世紀になってから 167 Copyright © 2026, Oracle and/or its

    affiliates 最初のマルチコアCPUはIBM Power4 (2001年) CPU演算パイプライン (CPUコア) Level1&2 キャッシュ インターフェース DRAM モジュール CPUソケット L1 L2 L1 L2 L3 CPUコア #1 CPUコア #2 インターコネクト I/O DRAM
  147. 参考: Intel Xeonの複数ソケット構成 168 Copyright © 2026, Oracle and/or its

    affiliates Intel Xeon 5500 (2009年)以降はメモリー・コントローラとインターコネクトを1チップに統合 CPU#2 CPU#1 Intel Xeon 5400 (2007年) • Exadata V1のCPU • CPUとメモリー・コントローラが別のチップ • CPUがメモリー・コントローラを介して調停 • Uniform Memory Access CPU#2 CPU#1 Intel Xeon 5500 (2009年) • Exadata V2のCPU • CPUチップにメモリー・コントローラを統合 • CPU同士が直結 • Non Uniform Memory Access CPU メモリー CPU メモリー メモリー・コントローラ
  148. CPUアーキテクチャ変遷 169 Copyright © 2026, Oracle and/or its affiliates 32bit

    → 64bit 2001年 2003年 2005年 64bit 32bit 64bit SPARC Power PA-RISC Itanium x86 2013年 最初のマルチコアCPU IBM POWER 最初のx86-64 CPU AMD Opteron 最初のx86-64 マルチコアCPU AMD Opteron 最初の64bit OSのみサポート Oracle Database 12c Release 1 x86-64
  149. CPUアーキテクチャ 32bit vs 64bit 170 Copyright © 2026, Oracle and/or

    its affiliates アドレッシングできるメモリー・アドレスの大きさ 2^32 = 4Giga Byte 32bit 64bit 2^64 = 16Exa Byte • 2003年当時のIntel Xeon 32bitマシンでも4Gバ イト以上のDRAMを搭載することができた(※) • 1プロセスがアドレッシングできる上限が4GB • 2026年現在のマシンで16EバイトのDRAMを搭載 できるマシンは存在しない(※) • DRAM搭載量を増やせば増やすだけ使用できるメモ リー量が増える状況 ※ Physical Address Extension(PAE) 36bitのアドレス・バスを持ち2^36 = 64GバイトまでのDRAM搭載に 対応できた ※ DRAMモジュール1枚の容量から、Exaバイトのメモリーを1台のマシン に搭載することは現在では程遠いので、CPU内のアドレッシングは 48bit(256Tバイト)に省略されている
  150. x86 32bitプラットフォームでのメモリー管理チューニング 171 Copyright © 2026, Oracle and/or its affiliates

    Oracle9iのころ ユーザー空間 4Gバイトのアドレス空間をさらにユーザー 空間とOSカーネル空間に分割していた 2Gバイト 2Gバイト OSカーネル空間
  151. x86 32bitプラットフォームでのメモリー管理チューニング 172 Copyright © 2026, Oracle and/or its affiliates

    Oracle9iのころ ユーザー空間 2Gバイト 2Gバイト SGA最大 1.75GB OSカーネル空間 4Gバイトのアドレス空間をさらにユーザー 空間とOSカーネル空間に分割していた
  152. x86 32bitプラットフォームでのメモリー管理チューニング 1 173 Copyright © 2026, Oracle and/or its

    affiliates 3Giga Tuning (3GT) ユーザー空間 OSカーネル空間 2Gバイト 2Gバイト SGA最大 1.75GB ユーザー空間 OSカーネル空間 ユーザー空間が増えた分SGAを拡大可能 3Gバイト 1Gバイト SGA最大 2.75GB 4Gバイトのアドレス空間をさらにユーザー 空間とOSカーネル空間に分割していた 3Giga Tuning(3GT) OSカーネル空間を1Gバイトに減らしユーザー空間を3GBに増やす
  153. • SGAのデータベース・バッファ・キャッシュ領域の中を切り替えるウィンドウを設定 • 初期化パラメータUSE_INDIRECT_DATA_BUFFERS=TRUE ユーザー空間 OSカーネル空間 3Gバイト 1Gバイト SGA最大 2.75GB

    x86 32bitプラットフォームでのメモリー管理チューニング 2 174 Copyright © 2026, Oracle and/or its affiliates Address Windowing Extension (AWE) Physical Address Extension (PAE)で マシンは4Gバイト以上のメモリーを搭載可能 切り替えウィンドウ メモリ領域1 メモリ領域2 メモリ領域3 • データベース・バッファ・キャッシュのウィンドウ領域にマップして切り替え • ある瞬間にアクセスできるメモリ領域は1つだけ ⇒ 性能に問題あり
  154. CPUアーキテクチャ変遷 175 Copyright © 2026, Oracle and/or its affiliates 32bit

    → 64bit 2001年 2003年 2005年 64bit 32bit 64bit SPARC Power PA-RISC Itanium x86 2013年 最初のマルチコアCPU IBM POWER 最初のx86-64 CPU AMD Opteron 最初のx86-64 マルチコアCPU AMD Opteron 最初の64bit OSのみサポート Oracle Database 12c Release 1 x86-64
  155. 最近のx86-64 2ソケット・マシン1台の物量 176 Copyright © 2026, Oracle and/or its affiliates

    Exadata X11M (2023年)のデータベース・サーバー構成 CPU AMD EPYC 9J25 96コア ×2ソケット = 192コア DRAM 6400MT/s DDR5 • 512 GB (16x 32 GB DIMM) • 1.5 TB (24x 64 GB DIMM) • 2.25 TB (24x 96 GB DIMM) • 3 TB (24x 128 GB DIMM) CPU CPU DRAM
  156. キャッシュ・メモリーには全データは載りきらない 177 Copyright © 2026, Oracle and/or its affiliates キャッシュ容量

    < 全データ容量 キャッシュ・メモリー (DRAM) キャッシュ容量 全データ容量 ストレージ (フラッシュ・メモリー/HDD)
  157. キャッシュ・メモリーには全データは載りきらない 178 Copyright © 2026, Oracle and/or its affiliates キャッシュ容量

    < 全データ容量 キャッシュ・メモリー (DRAM) どのブロックをキャッシュから追い出す? 新しいブロックをキャッシュに格納する
  158. 単純なLeast Recently Used 179 Copyright © 2026, Oracle and/or its

    affiliates アクセスがあった順序をリストで管理 Most ブロックにアクセス Least LRUリストのMost側に連結 最も使用されなかったブロックを追い出す アクセス頻度を管理するリスト
  159. 分析系処理のアクセス対象データがキャッシュ・メモリーに載りきらない問題 180 Copyright © 2026, Oracle and/or its affiliates キャッシュ・メモリーに載せたデータが再利用されない

    キャッシュ・メモリー (DRAM) フル・スキャン対象データ量 最も使用されなかったブロックを追い出す キャッシュ容量 < フル・スキャン ストレージ (フラッシュ・メモリー/HDD)
  160. フル・スキャン処理を単純なLRUで管理すると 181 Copyright © 2026, Oracle and/or its affiliates アクセス頻度が高いブロックも追い出されてしまう

    Most Least 最も使用されなかったブロックを追い出す アクセス頻度を管理するリスト 新しくアクセスするブロックをMost側から入れる フル・スキャン ストレージ (フラッシュ・メモリー/HDD)
  161. 単純なLeast Recently Used 182 Copyright © 2026, Oracle and/or its

    affiliates アクセスがあった順序をリストで管理 Most ブロックにアクセス Least LRUリストのMost側に連結 最も使用されなかったブロックを追い出す アクセス頻度を管理するリスト Oracle Databaseの バッファ・キャッシュ管理は単純なLRUではない
  162. Oracle Databaseのバッファ・キャッシュ管理は単純なLRUリストではない 183 Copyright © 2026, Oracle and/or its affiliates

    アクセスした回数を数えてLRUリストを昇格 Most 1. 新規のブロックをバッファ・キャッシュに載せるのはLRUリストの途中 Least アクセス頻度を管理するリスト 2.ブロックにアクセスした回数が規定値を越えたらMost側に昇格する
  163. Oracle Databaseのバッファ・キャッシュ管理は単純なLRUリストではない 184 Copyright © 2026, Oracle and/or its affiliates

    性質の異なる処理を混在しても、使用頻度の高いブロックがキャッシュに残る Most 新規のブロックをバッファ・キャッシュに載せるのはLRUリストの途中 Least アクセス頻度を管理するリスト オンライン・トランザクション処理 分析処理 アクセス頻度の高いブロックはリストを 昇格してバッファ・キャッシュに残る アクセス頻度の低いブロックはリストを 降格してバッファ・キャッシュから落ちる
  164. 分析系処理のアクセス対象データがキャッシュ・メモリーに載りきらない問題 (再掲) 185 Copyright © 2026, Oracle and/or its affiliates

    キャッシュ・メモリーに載せたデータが再利用されない キャッシュ・メモリー (DRAM) フル・スキャン対象データ量 最も使用されなかったブロックを追い出す キャッシュ容量 < フル・スキャン ストレージ (フラッシュ・メモリー/HDD)
  165. 分析系処理のアクセス対象データがキャッシュ・メモリーに載りきらない問題 (再掲) 186 Copyright © 2026, Oracle and/or its affiliates

    キャッシュ・メモリーに載せたデータが再利用されない キャッシュ・メモリー (DRAM) フル・スキャン対象データ量 最も使用されなかったブロックを追い出す キャッシュ容量 < フル・スキャン フル・スキャン処理を考慮したメモリー管理 ストレージ (フラッシュ・メモリー/HDD)
  166. OSカーネルのブロック・デバイス層がストレージ・ブロックをキャッシュ 187 Copyright © 2026, Oracle and/or its affiliates DRAMに同じデータを2回キャッシュしてしまう

    キャッシュ・メモリー (DRAM) データベース・バッファ・キャッシュ ブロック・デバイス・キャッシュ OSファイルシステム Oracleインスタンス oracle Oracleプロセス ストレージ (フラッシュ・メモリー/HDD)
  167. OSカーネルのブロック・デバイス層がストレージ・ブロックをキャッシュするのを回避したい 188 Copyright © 2026, Oracle and/or its affiliates DRAMに同じデータを2回キャッシュしてしまうのを回避

    キャッシュ・メモリー (DRAM) データベース・バッファ・キャッシュ ブロック・デバイス・キャッシュ OSファイルシステム Oracleインスタンス oracle Oracleプロセス ストレージ (フラッシュ・メモリー/HDD)
  168. 20世紀のファイルシステム事情 189 Copyright © 2026, Oracle and/or its affiliates データベースで使用するのに課題を抱えていた

    20世紀のファイルシステム 21世紀のファイルシステム 新規ブロックのアロケーション 1ブロック単位でストレージ・デバイス上に確保する のでHDD上でランダムI/Oになりがち 1つのファイルのブロックをある程度連続領域(エクス テント)として確保するのでHDD上のシークが減る ジャーナリング OSがクラッシュして再起動すると、ファイルシステム の全ブロックを探索して確保済み/未使用ブロック の整合性をチェックするので、ファイルシステム・サイ ズに比例した起動時間がかかる OSがクラッシュして再起動すると、ファイルシステムの 変更をトランザクション化してジャーナル領域に記録 されている未完了トランザクションだけリカバリすれば よい サイズ制限 1ファイルのサイズ上限が小さい 1ファイルのサイズ上限が十分大きい 非同期I/O 未対応 対応 ダイレクトI/O 未対応 対応 • 20世紀のファイルシステム: キャッシュされる • 21世紀のファイルシステム: バイパス可能(ダイレクトI/O)
  169. 20世紀のファイルシステム事情、を回避するためのrawデバイス構成 190 Copyright © 2026, Oracle and/or its affiliates ストレージ・デバイス・ファイルをデータベースを構成するファイルと見立てる

    20世紀のファイルシステム 21世紀のファイルシステム 新規ブロックのアロケーション 1ブロック単位でストレージ・デバイス上に確保する のでHDD上でランダムI/Oになりがち 1つのファイルのブロックをある程度連続領域(エクス テント)として確保するのでHDD上のシークが減る ジャーナリング OSがクラッシュして再起動すると、ファイルシステム の全ブロックを探索して確保済み/未使用ブロック の整合性をチェックするので、ファイルシステム・サイ ズに比例した起動時間がかかる OSがクラッシュして再起動すると、ファイルシステムの 変更をトランザクション化してジャーナル領域に記録 されている未完了トランザクションだけリカバリすれば よい サイズ制限 1ファイルのサイズ上限が小さい 1ファイルのサイズ上限が十分大きい 非同期I/O 未対応 対応 ダイレクトI/O 未対応 対応 rawデバイス構成
  170. OSのストレージ・デバイスの扱い 191 Copyright © 2026, Oracle and/or its affiliates すべてのデバイスを「ファイル」として抽象化

    キャラクタ・デバイス ブロック・デバイス ファイルシステム 階 層 ストレージ・デバイス (フラッシュ・メモリ/HDD) アクセス粒度 バッファリング 通称 ブロック あり cookedデバイス 1 byte なし rawデバイス
  171. OSのストレージ・デバイスの扱い 192 Copyright © 2026, Oracle and/or its affiliates すべてのデバイスを「ファイル」として抽象化

    キャラクタ・デバイス ブロック・デバイス ファイルシステム 階 層 ストレージ・デバイス (フラッシュ・メモリ/HDD) アクセス粒度 バッファリング 通称 ブロック あり cookedデバイス 1 byte なし rawデバイス • 20世紀のファイルシステム: キャッシュされる • 21世紀のファイルシステム: バイパス可能(ダイレクトI/O)
  172. rawデバイス構成 193 Copyright © 2026, Oracle and/or its affiliates キャラクタ・デバイス・ファイルをデータベースのファイルとする構成

    キャラクタ・デバイス ブロック・デバイス ファイルシステム LVM 階 層 ストレージ・デバイス (フラッシュ・メモリ/HDD) アクセス粒度 バッファリング 通称 ブロック あり cookedデバイス 1 byte なし rawデバイス • Oracle Databaseは固定長サイズのファイルで構成可能 • ストレージ・ボリュームから都合の良いサイズのrawデバイス・ファイルを切り出すのに論理ボ リューム・マネージャ(Logical Volume Manager: LVM)が使用される
  173. ASMは21世紀のファイルシステムの機能を備える 194 Copyright © 2026, Oracle and/or its affiliates Oracleインスタンスのプロセスがストレージ・デバイスのアドレスまで変換

    20世紀のファイルシステム 21世紀のファイルシステム&ASM 新規ブロックのアロケーション 1ブロック単位でストレージ・デバイス上に確保する のでHDD上でランダムI/Oになりがち 1つのファイルのブロックをある程度連続(エクステン ト)して確保するのでHDD上のシークが減る ジャーナリング OSがクラッシュして再起動すると、ファイルシステム の全ブロックを探索して確保済み/未使用ブロック の整合性をチェックするので、ファイルシステム・サイ ズに比例した起動時間がかかる OSがクラッシュして再起動すると、ファイルシステムの 変更をトランザクション化してジャーナル領域に記録 されている未完了トランザクションだけリカバリすれば よい サイズ制限 1ファイルのサイズ上限が小さい 1ファイルのサイズ上限が十分大きい 非同期I/O 未対応 対応 ダイレクトI/O 未対応 対応 Oracle Database 10g Release 1(2003年)
  174. ストレージ構成変遷 195 Copyright © 2026, Oracle and/or its affiliates 2001年

    2003年 2008年 2009年 最初のマルチコアCPU IBM Power 最初のx86-64 CPU AMD Opteron Flashメモリーが普及しだした ASM rawデバイス RAC Oracle9i Database RAC Oracle Database 10g ASM Exadata V1 HDDのみ Exadata V2 HDD+Flashメモリー Linux 2.6 LVM2
  175. OSカーネルのブロック・デバイス層がストレージ・ブロックをキャッシュするのを回避したい 196 Copyright © 2026, Oracle and/or its affiliates DRAMに同じデータを2回キャッシュしてしまうのを回避

    キャッシュ・メモリー (DRAM) データベース・バッファ・キャッシュ ブロック・デバイス・キャッシュ OSファイルシステム Oracleインスタンス oracle Oracleプロセス ストレージ (フラッシュ・メモリー/HDD)
  176. パラレル実行 + フル・スキャン処理 197 Copyright © 2026, Oracle and/or its

    affiliates データベース・バッファ・キャッシュもバイパス(Direct Path Read) キャッシュ・メモリー (DRAM) データベース・バッファ・キャッシュ ブロック・デバイス・キャッシュ OSファイルシステム Oracleインスタンス oracle Oracleプロセス フル・スキャン フル・スキャン oracle メモリーに載りきらない量の データを高スループットで読む ストレージ (フラッシュ・メモリー/HDD)
  177. パラレル実行 + フル・スキャン処理 + Exadata Smart Scan 198 Copyright ©

    2026, Oracle and/or its affiliates Direct Path Readの延長 キャッシュ・メモリー (DRAM) データベース・バッファ・キャッシュ ブロック・デバイス・キャッシュ OSファイルシステム Oracleインスタンス oracle Oracleプロセス フル・スキャン oracle ストレージ・サーバーでフィルタ 済みのデータのストリーム フィルタ フィルタ フル・スキャン ストレージ (フラッシュ・メモリー/HDD)
  178. データベース・サーバーのメモリーにキャッシュしないほうが良い場合がある 199 Copyright © 2026, Oracle and/or its affiliates 暗黙の前提:

    1つの処理対象データ量がキャッシュ・メモリー容量を強く圧迫する ブロック・デバイス・キャッシュのバイパス • 単純なLRUではない • OLTPとOLAP混在でも再利用されるブロックを残すアルゴリズム • DRAMに同じデータを2回キャッシュしない • キャッシュ置換処理の省略 • 高スループットでキャッシュから追い出される • キャッシュ置換処理の省略 キャッシュ管理 キャッシュ置換アルゴリズム データベース・バッファ・キャッシュのバイパス ストレージ・サーバーへの処理オフロード • ストレージのデータをデータベース・サーバーのDRAMにキャッシュ • ストレージ・デバイスの近傍でフィルタリング • ネットワーク・ストレージからの通信量削減 ダイレクトI/O Direct Path Read Exadata Smart Scan
  179. データベース・サーバーのメモリーにキャッシュしないほうが良い場合がある 200 Copyright © 2026, Oracle and/or its affiliates 暗黙の前提:

    1つの処理対象データ量がキャッシュ・メモリー容量を強く圧迫する ブロック・デバイス・キャッシュのバイパス • 単純なLRUではない • OLTPとOLAP混在でも再利用されるブロックを残すアルゴリズム • DRAMに同じデータを2回キャッシュしない • キャッシュ置換処理の省略 • 高スループットでキャッシュから追い出される • キャッシュ置換処理の省略 キャッシュ管理 キャッシュ置換アルゴリズム データベース・バッファ・キャッシュのバイパス ストレージ・サーバーへの処理オフロード • ストレージのデータをデータベース・サーバーのDRAMにキャッシュ • ストレージ・デバイスの近傍でフィルタリング • ネットワーク・ストレージからの通信量削減 ダイレクトI/O Direct Path Read Exadata Smart Scan メモリーに載りきらない量のデータを高スループットで読む
  180. 最近のx86-64 2ソケット・マシン1台の物量 201 Copyright © 2026, Oracle and/or its affiliates

    Exadata X11M (2023年)のデータベース・サーバー構成 CPU AMD EPYC 9J25 96コア ×2ソケット = 192コア DRAM 6400MT/s DDR5 • 512 GB (16x 32 GB DIMM) • 1.5 TB (24x 64 GB DIMM) • 2.25 TB (24x 96 GB DIMM) • 3 TB (24x 128 GB DIMM) CPU CPU DRAM
  181. Oracle Database In-Memory (Oracle Database 12c) 202 Copyright © 2026,

    Oracle and/or its affiliates 行指向データブロックのキャッシュと分析処理に特化したインメモリの共存 Oracleインスタンス・メモリー(DRAM) ストレージ (フラッシュ・メモリー/HDD) データベース・バッファ・キャッシュ データベース・インメモリ 行指向データブロックをキャッシュ 列指向データをあらかじめロード
  182. Oracle Database In-Memory (Oracle Database 12c) 203 Copyright © 2026,

    Oracle and/or its affiliates 行指向データブロックのキャッシュと分析処理に特化したインメモリの共存 Oracleインスタンス・メモリー(DRAM) ストレージ (フラッシュ・メモリー/HDD) メモリーにロードするときに 行→列指向に変換 行指向のデータブロック データベース・バッファ・キャッシュ データベース・インメモリ 行指向データブロックをキャッシュ 列指向データをあらかじめロード
  183. Oracle Database In-Memory (Oracle Database 12c) 204 Copyright © 2026,

    Oracle and/or its affiliates SQL実行計画に応じてどちらのメモリーを使用するか決定 Oracleインスタンス・メモリー(DRAM) ストレージ (フラッシュ・メモリー/HDD) oracle Oracleプロセス メモリーにロードするときに 行→列指向に変換 行指向のデータブロック データベース・バッファ・キャッシュ データベース・インメモリ 行指向データブロックをキャッシュ 列指向データをあらかじめロード 列指向フル・スキャン処理 行指向トランザクション処理
  184. データベースのメモリー管理: キャッシュとインメモリ 205 Copyright © 2026, Oracle and/or its affiliates

    データベース・サーバー・メモリー (DRAM) ストレージ (フラッシュ・メモリー/HDD) キャッシュ インメモリ アクセスしたブロックをメモリーに格納 起動時に全データをメモリーに格納
  185. インメモリ・データベースのアイデアは20世紀からある 206 Copyright © 2026, Oracle and/or its affiliates 20世紀のキャッシュ型データベースの欠点

    データベース・サーバー・メモリー (DRAM) ストレージ (ハードディスク) キャッシュ インメモリ アクセスしたブロックをメモリーに格納 起動時に全データをメモリーに格納 キャッシュ・ミスのペナルティが大きい ハードディスク: >10ms キャッシュ置換もソフトウェア処理 メモリー排他制御コストが高い
  186. インメモリ・データベースのアイデアは20世紀からある 207 Copyright © 2026, Oracle and/or its affiliates 20世紀のキャッシュ型データベースの欠点の解消を目的とする

    データベース・サーバー・メモリー (DRAM) ストレージ (ハードディスク) キャッシュ インメモリ アクセスしたブロックをメモリーに格納 起動時に全データをメモリーに格納 キャッシュ置換もソフトウェア処理 メモリー排他制御コストが高い キャッシュ・ミスのペナルティが大きい ハードディスク: >10ms キャッシュ置換しない メモリー排他制御減 ハードディスクにアクセスしない
  187. データベースのメモリー管理: キャッシュとインメモリ 208 Copyright © 2026, Oracle and/or its affiliates

    暗黙の前提 データベース・サーバー・メモリー (DRAM) ストレージ (フラッシュ・メモリー/HDD) キャッシュ インメモリ アクセスしたブロックをメモリーに格納 起動時に全データをメモリーに格納 キャッシュ容量 < データベース容量 メモリー容量 > データベース容量
  188. データベースのメモリー管理: キャッシュとインメモリ 209 Copyright © 2026, Oracle and/or its affiliates

    暗黙の前提 データベース・サーバー・メモリー (DRAM) ストレージ (フラッシュ・メモリー/HDD) キャッシュ インメモリ アクセスしたブロックをメモリーに格納 起動時に全データをメモリーに格納 キャッシュ容量 < データベース容量 メモリー容量 > データベース容量 データ容量増 → メモリー容量増 データ容量の増大に対して物理マシン に搭載できるDRAM容量上限が小さい
  189. インメモリ・データベースのアイデアは20世紀からある 210 Copyright © 2026, Oracle and/or its affiliates 2001年

    2008年 2010年 Flashメモリー ハードディスク 2014年 Oracle Database 12c 12.1.0.2 Database In-Memory Big Data というキーワードの普及 Flashメモリーの普及 最初のマルチコアCPU IBM Power
  190. インメモリ・データベースのアイデアは20世紀からある 211 Copyright © 2026, Oracle and/or its affiliates インメモリ・データベースが主流になれなかった要因

    2001年 2008年 2010年 Flashメモリー ハードディスク Big Data というキーワードの普及 Flashメモリーの普及 DRAMキャッシュ・ミス・レイテンシ減 • ハードディスク: >10ms • Flashメモリー: <1ms 過去データを捨てない運用 • ストレージ・デバイスの容量増 • スケールアウト・ストレージの普及 キャッシュ型のペナルティ減 インメモリ型の不適合範囲増 最初のマルチコアCPU IBM Power 排他制御ペナルティ減 • チップ内通信 • メモリー・コントローラ統合 2014年 Oracle Database 12c 12.1.0.2 Database In-Memory
  191. Oracle Database In-Memory (Oracle Database 12c) 212 Copyright © 2026,

    Oracle and/or its affiliates 行指向データブロックのキャッシュと分析処理に特化したインメモリの共存 Oracleインスタンス・メモリー(DRAM) ストレージ (フラッシュ・メモリー/HDD) メモリーにロードするときに 行→列指向に変換 行指向のデータブロック データベース・バッファ・キャッシュ データベース・インメモリ 行指向データブロックをキャッシュ 列指向データをあらかじめロード
  192. Oracle Database In-Memory (Oracle Database 12c) 213 Copyright © 2026,

    Oracle and/or its affiliates インメモリ・データベースのメモリー要件を大きく緩和: 分析対象の列データだけメモリーに載ればよい Oracleインスタンス・メモリー(DRAM) ストレージ (フラッシュ・メモリー/HDD) データベース・バッファ・キャッシュ データベース・インメモリ 行指向データブロックをキャッシュ 列指向データをあらかじめロード 分析処理が対象とする • 特定表の • 特定パーティションの • 特定列 がメモリーに載ればよい かつ、 • 置き換え可能
  193. Oracle Database In-Memory (Oracle Database 12c) 214 Copyright © 2026,

    Oracle and/or its affiliates データベース・バッファ・キャッシュの更新がインメモリに反映される Oracleインスタンス・メモリー(DRAM) ストレージ (フラッシュ・メモリー/HDD) データベース・バッファ・キャッシュ データベース・インメモリ 行指向データブロックをキャッシュ 列指向データをあらかじめロード 分析処理が対象とする • 特定表の • 特定パーティションの • 特定列 がメモリーに載ればよい かつ、 • 置き換え可能 oracle Oracleプロセス 行指向トランザクション処理
  194. どのアクセス・パスでもトランザクション分離レベルの挙動まで不変 215 Copyright © 2026, Oracle and/or its affiliates インターフェースとアルゴリズム実装の分離

    バッファ・アクセス Direct Path Read Exadata Smart Scan Database In-Memory フィルタ 複数のユーザー・セッション 同じデータにアクセスする SQL実行計画 SQLインターフェース
  195. Oracle Real Application Clusters ノード・メモリー間の一貫性 DRAM (キャッシュ・メモリー) ユーザーからは透過的に複数CPU/複数ノードで処理可能 共有メモリー型マルチ・プロセッサ CPUキャッシュ・メモリー間の一貫性

    RACは共有メモリー型マルチ・プロセッサと同じくキャッシュ一貫性を維持 ノード1 (キャッシュ) ノード2 (キャッシュ) データベース (ストレージ上のファイル群) DRAM (キャッシュ・メモリー) キャッシュ一貫性 キャッシュ・メモリー キャッシュ・メモリー キャッシュ一貫性 CPU 1 CPU 2 SGA DRAM (メイン・メモリー) Copyright © 2026, Oracle and/or its affiliates 220
  196. Oracle Real Application Clusters すべてのRACノードはすべての抽象データ空間にアクセス可能 DRAM (キャッシュ・メモリー) ユーザーからは透過的に複数CPU/複数ノードで処理可能 共有メモリー型マルチ・プロセッサ すべてのCPUコアはすべてのメモリー・アドレス空間にアクセス可能

    何を共有しているのか ノード1 (キャッシュ) ノード2 (キャッシュ) データベース (ストレージ上のファイル群) DRAM (キャッシュ・メモリー) キャッシュ一貫性 キャッシュ・メモリー キャッシュ・メモリー キャッシュ一貫性 CPU 1 CPU 2 SGA DRAM (メイン・メモリー) Copyright © 2026, Oracle and/or its affiliates 221 メモリー・アドレス空間 抽象データ空間
  197. Oracleデータベース構成 222 Copyright © 2026, Oracle and/or its affiliates ストレージ上のファイル群

    データファイル PDB #1 データファイル PDB #n 制御ファイル データファイル ルート・コンテナ アプリケーション用のデータ 全体の構成管理 REDO UNDO Oracleインスタンス #1
  198. Real Application Clustersのデータベース構成 223 Copyright © 2026, Oracle and/or its

    affiliates REDOとUNDOのファイルをOracleインスタンスごとに「追加」 データファイル PDB #1 データファイル PDB #n 制御ファイル データファイル ルート・コンテナ アプリケーション用のデータ 全体の構成管理 REDO UNDO REDO UNDO Oracleインスタンス #1 Oracleインスタンス #n REDO & UNDO #1 REDO & UNDO #n
  199. Real Application Clustersのデータベース構成 224 Copyright © 2026, Oracle and/or its

    affiliates REDOとUNDOのファイルをOracleインスタンスごとに「追加」 データファイル PDB #1 データファイル PDB #n 制御ファイル データファイル ルート・コンテナ アプリケーション用のデータ 全体の構成管理 REDO UNDO REDO UNDO Oracleインスタンス #1 Oracleインスタンス #n アプリケーション用の抽象データ空間 と物理データ構造は変化しない REDO & UNDO #1 REDO & UNDO #n
  200. ストレージ・ノードのスケール・アウト コンピュート・ノードのスケール・アウト RAC + ASM コンピュート・ノードとストレージ・ノードの増減が独立 225 Copyright © 2026,

    Oracle and/or its affiliates 全コンピュート・ノードが Automatic Storage Management Real Application Clusters 全ストレージ・デバイスにアクセス データの永続化ストレージ CPU+データ・キャッシュ用メモリー
  201. ストレージ・ノードのスケール・アウト コンピュート・ノードのスケール・アウト RAC + ASM コンピュート・ノードとストレージ・ノードの増減、スキーマ構成と物理データ構造が独立 226 Copyright © 2026,

    Oracle and/or its affiliates Automatic Storage Management Real Application Clusters データの永続化ストレージ CPU+データ・キャッシュ用メモリー スキーマ構成と物理データ構造
  202. ここまでの話 227 Copyright © 2026, Oracle and/or its affiliates メモリー管理

    アドレッシング スケールアウト・クラスタ構成
  203. どの機能の組み合わせでもトランザクション分離レベルの挙動まで不変 228 Copyright © 2026, Oracle and/or its affiliates インターフェースとアルゴリズム実装の分離

    複数のユーザー・セッション 同じデータにアクセスする メモリー管理 アドレッシング スケールアウト・クラスタ構成 SQL実行計画 SQLインターフェース
  204. Translytical Database 229 Copyright © 2026, Oracle and/or its affiliates

    トランザクション系(Transactional)処理と分析系(Analytical)処理をデータを移動させずに処理可能 複数のユーザー・セッション メモリー管理 アドレッシング スケールアウト・クラスタ構成 SQL実行計画 SQLインターフェース トランザクション系 OLTP 分析系 OLAP
  205. インターフェースとアルゴリズム実装の分離 SQLの結果集合を導出するアルゴリズムは自動生成される Copyright © 2026, Oracle and/or its affiliates 230

    入力 出力 対応関係の定義 インターフェース SQL実行計画 SQL実行計画探索 アルゴリズム 全体最適化問題 値の分布統計 物理データ構造 ハードウェア・リソース 論理データ構造
  206. Oracle Databaseカーネル大改造史 マルチ・ワークロードに対応するには? トランザクション系→ 分析系 ↓ トランザクション系 • 低レイテンシ •

    行指向 • 索引 • キャッシュ • 細粒度排他制御 • … 分析系 • 高スループット • 列指向 • パーティショニング • 圧縮 • 並列化 • … 共存 Copyright © 2026, Oracle and/or its affiliates 231 速いアルゴリズムの生成は DBMSエンジンの役割
  207. Our mission is to help people see data in new

    ways, discover insights, unlock endless possibilities.