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

DevDay2025-OracleDatabase-kernel-addressing-his...

 DevDay2025-OracleDatabase-kernel-addressing-history

2025年5月23日開催
Oracle Developer Day 2025
40分

[T1-1] Oracle Databaseカーネル大改造史

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

このセッションでは、Oracle Databaseカーネルのメモリー管理やI/Oサブシステムのうち、データベース・エンジンの根幹にかかわるデータのアドレッシング・アーキテクチャがどのように大胆な改造が行われてきたか、その歴史を振り返ります。

Avatar for oracle4engineer

oracle4engineer

May 23, 2025
Tweet

More Decks by oracle4engineer

Other Decks in Programming

Transcript

  1. kernel / shell 植物の種子からきている言葉 2 Copyright © 2025, Oracle and/or

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

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

    affiliates kernel : 仁(じん) ソフトウェア処理の中心核 shell : 殻 外部との境界 kernel SQL • SQL実行計画 • データのアドレッシング • メモリー管理 • データ空間の隔離 • … SQLインターフェース データのアドレッシング
  4. 入力と出力の対応関係の定義 SQL Copyright © 2025, Oracle and/or its affiliates 6

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

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

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

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

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

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

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

    入力 論理データ構造 出力 対応関係の定義 インターフェース SQL実行計画 SQL実行計画探索 アルゴリズム 全体最適化問題 値の分布統計 物理データ構造 ハードウェア・リソース 論理データ構造の定義とインターフェース(SQL)を 変更せずにアルゴリズム実装が改良される
  12. 表(TABLE)の概念 アドレスの概念の有無 15 Copyright © 2025, Oracle and/or its affiliates

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

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

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

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

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

    表(TABLE) 表領域(TABLESPACE) データファイル CREATE TABLE 表A (…) TABLESPACE 表領域α CREATE TABLESPACE 表領域α DATAFILE … 表(TABLE) → 表領域(TABLESPACE) 表領域(TABLESPACE) → データファイル
  18. 抽象化されたデータ空間からファイルへのアドレッシング リレーショナル・データベースの表(TABLE)は行の順序がない集合 24 Copyright © 2025, Oracle and/or its affiliates

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

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

    and/or its affiliates 表(TABLE) 表領域(TABLESPACE) #FILE #BLOCK #ROW データファイル ROWID 何番目のファイルの、何ブロック目の、何行目、をエンコードしたもの ≒データファイル上のアドレス ROWID(#FILE, #BLOCK, #ROW)
  21. 指定した値を持つ行アドレス(ROWID)を短時間で特定したい 28 Copyright © 2025, Oracle and/or its affiliates 表(TABLE)

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

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

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

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

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

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

    ヒープ表(TABLE) C1 C2 C1列のB*Tree索引 ROWID ポインタ C2列のB*Tree索引 ROWID ポインタ SQL> ALTER TABLE table1 ADD CONSTRAINT PRIMARY KEY USING INDEX index1 ; • ヒープ表をCREATE TABLEした後でPRIMARY KEY列を指定できる。 • PRIMARY KEYの必要条件はUNIQUEかつNOT NULLの索引を作成できること。 • すべての索引の構造は対等で、PRIMARY KEYの索 引が特別な構造を持っているわけではない。
  28. データの物理配置を絞り込む構造 索引とパーティショニング 36 Copyright © 2025, Oracle and/or its affiliates

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

    ヒープ表(TABLE) C1列のB*Tree索引 ROWID ポインタ ヒープ表(TABLE)とB*Tree索引 パーティショニング • ヒープ表とB*Tree索引は独立したオブジェクト • ごく少数の行の位置を特定するのに適している • オンライン・トランザクション処理 • パーティション・キー列の値でサブ領域に分割 • 多くの行の範囲を特定するのに適している • 分析・集計処理 • シェアード・ナッシング・アーキテクチャのデータ割り当て パーティション表(Partition TABLE) パーティション1 パーティション2 パーティション3 C1列 partkey1列
  30. パーティショニング実装1 : パーティション・ビュー(Partition VIEW) 複数の表(TABLE)をビュー(VIEW)で仮想的に1つに見せる (Oracle7.3) 39 Copyright © 2025,

    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で連結
  31. パーティショニング実装1 : パーティション・ビュー(Partition VIEW) 複数の表(TABLE)をビュー(VIEW)で仮想的に1つに見せる (Oracle7.3) 40 Copyright © 2025,

    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
  32. 索引の暗黙の制限 1つの索引は1つの表にしかアドレッシングできない 41 Copyright © 2025, Oracle and/or its affiliates

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

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

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

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

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

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

    and/or its affiliates VIEW v1 partkey1 表 t1 表 t2 表 tn パーティション・ビュー(Partition VIEW) 複数の表をビューで仮想的に1つに見せる partkey1 表パーティション p1 表パーティション p2 表パーティション pn パーティション表(Partition TABLE) 1つの表を内部的に複数のセグメントに分割する
  39. パーティショニング実装2 : パーティション表 1つの表(TABLE)と索引(INDEX)の内部を複数領域に分割する (Oracle8) 48 Copyright © 2025, Oracle

    and/or its affiliates VIEW v1 partkey1 表 t1 表 t2 表 tn パーティション・ビュー(Partition VIEW) 複数の表をビューで仮想的に1つに見せる partkey1 表パーティション p1 表パーティション p2 表パーティション pn パーティション表(Partition TABLE) 1つの表を内部的に複数のセグメントに分割する 表領域1 表領域2 表領域n パーティションごとに異なる 表領域への配置も可能 表領域1 表領域2 表領域n 表ごとに異なる 表領域への配置も可能
  40. パーティショニング実装2 : パーティション表 索引からのアドレッシング方式の改造 49 Copyright © 2025, Oracle and/or

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

    its affiliates partkey1 C1 C2 表パーティション p1 表パーティション p2 表パーティション pn パーティション表(Partition TABLE) 1つの表を内部的に複数のセグメントに分割する C1列のB*Tree索引 C2列のB*Tree索引 ROWID ポインタ ROWID ポインタ 表領域1 表領域2 表領域n パーティションごとに異なる 表領域への配置も可能 索引(INDEX) 1つの索引ツリーからすべての表パーティションをアドレッシング可能
  42. パーティショニング実装2 : パーティション表/パーティション索引 1つの索引が1つのパーティション表のすべての表パーティションをアドレッシングできる 51 Copyright © 2025, Oracle and/or

    its affiliates partkey1 C1 C2 表パーティション p1 表パーティション p2 表パーティション pn パーティション表(Partition TABLE) 1つの表を内部的に複数のセグメントに分割する C1列でパーティショニングしたB*Tree索引 ROWID ポインタ 表領域1 表領域2 表領域n パーティションごとに異なる 表領域への配置も可能 索引パーティション p1 索引パーティション pm パーティション索引(Partition INDEX) 表パーティション・キー(partkey1)列と独立した索引定義
  43. パーティショニング実装2 : パーティション表/パーティション索引 1つの索引が1つのパーティション表のすべての表パーティションをアドレッシングできる 52 Copyright © 2025, Oracle and/or

    its affiliates partkey1 C1 C2 表パーティション p1 表パーティション p2 表パーティション pn C1列のB*Tree索引 C2列のB*Tree索引 ROWID ポインタ ROWID ポインタ オンライン・トランザクション 集計・分析 パーティション表(Partition TABLE) 1つの表を内部的に複数のセグメントに分割する 索引(INDEX) 表パーティション・キー(partkey1)列と独立した索引定義
  44. パーティショニング実装2 : パーティション表/パーティション索引 1つの索引が1つのパーティション表のすべての表パーティションをアドレッシングできる 53 Copyright © 2025, Oracle and/or

    its affiliates partkey1 C1 C2 表パーティション p1 表パーティション p2 表パーティション pn C1列のB*Tree索引 C2列のB*Tree索引 ROWID ポインタ ROWID ポインタ オンライン・トランザクション 集計・分析 性質の異なるアクセス・パターンへの最適化が共存できる パーティション表(Partition TABLE) 1つの表を内部的に複数のセグメントに分割する 索引(INDEX) 表パーティション・キー(partkey1)列と独立した索引定義
  45. ファイルへのI/O API概略 メモリーのアドレスとファイルのアドレス間でデータのコピー 57 Copyright © 2025, Oracle and/or its

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

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

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

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

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

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

    10g) 64 Copyright © 2025, Oracle and/or its affiliates ファイル構造 Oracle構造 POSIXファイルシステム ボリューム・マネージャ ファイルシステム 表、索引 表領域 ファイル ASM ASM 表、索引 表領域 ボリューム・マネージャ ファイルシステム ファイル
  52. ASMディスクグループ: 物理デバイス・ファイルを束ねた巨大なストレージ 65 Copyright © 2025, 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ディスクグループ名を指定すると ファイル・パスが自動生成される 物理ストレージ・デバイス
  53. ASMディスクグループ: 物理デバイス・ファイルを束ねた巨大なストレージ 66 Copyright © 2025, Oracle and/or its affiliates

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

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

    © 2025, Oracle and/or its affiliates 物理ストレージ・デバイス extent extent extent extent ファイルをエクステントに分割し、すべてのストレージ・デバイスにストライプすることですべてのデバイスの性能を引き出す ASMファイル ASMエクステント
  56. ASMファイル ASMのファイル配置コンセプト2: Mirror Stripe And Mirror Everything (S.A.M.E.) 69 Copyright

    © 2025, 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にミラーが存在する
  57. ASMファイル ASMのファイル配置コンセプト3: 動的リバランス Stripe And Mirror Everything (S.A.M.E.) 70 Copyright

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

    its affiliates FAILGROUP 3 extent extent extent extent ASMファイル ASMエクステント FAILGROUP 2 FAILGROUP 1 FAILGROUP n ASMインスタンス • Oracleインスタンスを改造したプロセス群 • ASMファイルのエクステントの配置マッピングの管理 → ファイルシステム兼ボリューム・マネージャ
  59. ASMインスタンス: Oracleインスタンスを改造したもの エクステント・マップの管理 72 Copyright © 2025, 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インスタンス同士が通信して エクステント配置の整合性を維持 • クラスタ・ファイルシステム兼クラスタ・ボリューム・マネージャ
  60. OSファイルシステムのI/Oモデル OracleインスタンスのプロセスがOSにシステム・コールを発行する 73 Copyright © 2025, Oracle and/or its affiliates

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

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

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

    its affiliates プロセス I/Oコール Oracleインスタンス システム・コール ASMファイル プロセス ASMインスタンス extent extent extent 物理デバイス・ファイル エクステント・マップ管理 ファイルシステム 論理ボリューム・マネージャ ASMファイル エクステント・マップ ASMインスタンスが作成したエクステント・マップを使って、Oracleインスタンスのプロセスがデバイス・ファイルにI/Oを発行 OSカーネル
  64. 例: OracleプロセスのASMディスク・グループへの書き込み Oracleインスタンスのプロセスが複数のデバイス・ファイルへI/O発行 77 Copyright © 2025, 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 リクエスト
  65. ファイルシステム & ボリューム・マネージャ 抽象データ空間からストレージ・デバイスへのアドレッシング 78 Copyright © 2025, Oracle and/or

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

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

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

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

    2025, 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デバイス
  70. ストレージ・ノード コンピュート・ノード Exadataのストレージ構成 ASMの機能でストレージ・デバイスをStripe And Mirror Everything 84 Copyright ©

    2025, Oracle and/or its affiliates 1つのASMディスクグループあたり12デバイス×n台 FAILGROUP 1 FAILGROUP 2 FAILGROUP n 1台あたり12デバイス ×n台
  71. Exadataのストレージ構成 ASMのストレージ構成はSELECT文で参照可能 85 Copyright © 2025, 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個のストレージ・デバイス
  72. ストレージ・ノード コンピュート・ノード Exadata V2, X2 ~ X8 ストレージ・ノードにFlashメモリーを搭載し透過的なキャッシュ・メモリーとして使用 86 Copyright

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

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

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

    its affiliates データファイル データベース・バッファ・キャッシュ チェックポイント メモリー → ファイル キャッシュ・ミス ファイル → メモリー データベース・バッファ・キャッシュにデータ・ブロックが キャッシュされていればそのデータでSQL実行 データベース・バッファ・キャッシュにデータ・ブロックが キャッシュされていなければデータファイルから取得
  76. 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 © 2025, Oracle and/or its affiliates 91 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
  77. 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 © 2025, Oracle and/or its affiliates 92 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 メモリー
  78. 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 © 2025, Oracle and/or its affiliates 93 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 メモリー
  79. ネットワーク・ストレージから1データブロックを取得するレイテンシ短縮 ストレージ・ノードのキャッシュ用デバイスの高速化 94 Copyright © 2025, Oracle and/or its affiliates

    X7 X8M X9M X10M X11M 250 µs 17 µs 19 µs 14 µs Exadataモデル Flashメモリー DRAM PMEM PMEM: Intel Optane Persistent Memory レイテンシ (小さいほど良い)
  80. 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 © 2025, Oracle and/or its affiliates 95 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 メモリー データ・キャッシュ用デバイスのアクセス時間を 短縮すればよい?
  81. 一般的なEthernet/IP通信モデルの参考値 - pingコマンド リモート・ノードのOSカーネルに応答してもらうだけで約50μs 96 Copyright © 2025, 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
  82. 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 © 2025, Oracle and/or its affiliates 97 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のレイテンシは達成できない
  83. ネットワーク・ストレージから1データブロックを取得するレイテンシ短縮 キャッシュ用デバイスの高速化 + アクセス方式の高速化 98 Copyright © 2025, Oracle and/or

    its affiliates X7 X8M X9M X10M X11M 250 µs 17 µs 19 µs 14 µs Exadataモデル Flashメモリー + コンテキスト・スイッチI/O DRAM + RDMA PMEM + RDMA PMEM: Intel Optane Persistent Memory レイテンシ (小さいほど良い)
  84. 一般的なネットワーク・ストレージへのI/Oモデル ユーザー空間プロセスがI/OデバイスにアクセスするにはOSにシステム・コールを発行 100 Copyright © 2025, Oracle and/or its affiliates

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

    プロセス OS OS プロセス ストレージ管理プロセス OS ストレージ・デバイス ネットワーク・デバイス ネットワーク・デバイス コンテキスト・スイッチ コンテキスト・スイッチ コンテキスト・スイッチ アプリケーション・プロセス コンテキスト・スイッチ
  86. コンテキスト・スイッチ プログラムの実行情報(コンテキスト)をメモリーに退避/復帰 103 Copyright © 2025, Oracle and/or its affiliates

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

    CPUスレッド1 時間 OS プロセス プロセス プログラムの実行情報 (コンテキスト) メモリー コンテキスト・スイッチ時間 数千ns (数μs)
  88. 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 © 2025, Oracle and/or its affiliates 105 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)
  89. 一般的なネットワーク・ストレージへのI/Oモデル OSにシステム・コールを発行するとコンテキスト・スイッチが起こる 106 Copyright © 2025, Oracle and/or its affiliates

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

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

    プロセス OS OS プロセス ストレージ管理プロセス ネットワーク・デバイス ネットワーク・デバイス コンテキスト・スイッチ コンテキスト・スイッチ アプリケーション・プロセス プロセス OS OS プロセス ストレージ管理プロセス ネットワーク・デバイス ネットワーク・デバイス アプリケーション・プロセス DRAM DRAM コンテキスト・スイッチ データ・コピー
  92. Direct Memory Access: DMA I/Oデバイスがメモリーに直接アクセス 109 Copyright © 2025, Oracle

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

    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拡張 途中のデータ・コピーなし コンテキスト・スイッチなし
  94. Remote Direct Memory Access: RDMA ローカル・マシンとリモート・マシンのメモリー・アドレスを指定してメモリー間のデータ・コピー 111 Copyright © 2025,

    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 : 通信チャネル識別子
  95. 指定したアドレス間でのデータ・コピー 112 Copyright © 2025, 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 : コピーするデータ量
  96. ファイルシステム & ボリューム・マネージャ 抽象データ空間からストレージ・デバイスへのアドレッシング(再掲) Oracle Databaseは1プロセス内でのストレージ・デバイスまでのアドレッシング能力を獲得した 113 Copyright © 2025,

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

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

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

    Copyright © 2025, Oracle and/or its affiliates キャッシュ・ミス・レイテンシ <20μs Automatic Storage Management Real Application Clusters DRAMキャッシュ >1TB ×n台 CPU+データ・キャッシュ用メモリー RDMA >1TB データ・キャッシュ用メモリー
  100. ストレージ管理方式の変更 118 Copyright © 2025, 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’
  101. エクステント・マップ管理 - Exadata Automatic Storage Management (ASM)インスタンスがエクステント・マップを管理 119 Copyright ©

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

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

    affiliates ファイルシステム & ボリューム・マネージャ 表(TABLE) 表領域(TABLESPACE) ファイル ファイル・アドレス ↓ 物理デバイス・アドレス Exadataストレージ・ノードのメモリー 抽象データ空間 ↓ ファイル・アドレス 索引(INDEX) ストレージ・デバイス Oracleバージョン 改造 5 B*Tree索引 O(logn)でROWIDを導出する平衡木 8 Partitioning パーティション表へのフラットな索引アドレッシング 8i ローカル管理表領域 表領域内のセグメント/エクステント管理を変更 10g Bigfile表領域 ROWIDエンコーディングを変更 Oracleバージョン 改造 10g Automatic Storage Management 抽象データ空間→ファイル・アドレス→物理デバイス・アドレス まで1プロセス内でアドレス変換 19c (Exadata X8M) XRMEM ストレージ・ノードのメモリーにRDMAでアクセス 23ai (Exascale) Storage Vault ファイルのエクステント・マップ管理方式をASMから改訂 抽象データ空間 → ファイル・アドレス ファイル・アドレス → 物理デバイス・アドレス
  104. データのパーティショニング + ストレージへのレイアウト サーバー・クラスタ・アーキテクチャの違い 123 Copyright © 2025, Oracle and/or

    its affiliates シェアード・ナッシング・アーキテクチャ • 全コンピュート・ノードは全ストレージにアクセス可能 • 全データを全ストレージ・デバイスにストライプ • 各コンピュート・ノードは一部のパーティションに直接アクセス可能 • 各パーティションは個別のストレージ・デバイスに閉じる 表 p1 表 p2 表 p3 表 pn 表 p1 表 p2 表 p3 表 pn 表 p1 表 pn 全データにアクセス可能 シェアード・エブリシング + S.A.M.E. アーキテクチャ
  105. データベースからデータベースへ複製する、必要がある? 124 Copyright © 2025, Oracle and/or its affiliates 索引定義が表パーティション・キーに拘束される

    • シェアード・エブリシング + S.A.M.E. アーキテクチャ • 性質の異なる処理への最適化の重ね合わせが可能 • 特定のパーティションにアクセスが偏っても全ハードウェア性能を 引き出す • シェアード・ナッシング・アーキテクチャ • 処理性能がスケールするパーティション・キー選定が重要 • 処理特性が変わるとパーティション・キーも要変更 索引定義が表パーティション・キーと独立 C1列 C2列 ETL処理 Extract - Transform - Load パーティション・キーを変えてデータをLoadしなおす 処理α→ ↑ 処理β C1列 処理α→ C2列 ↑ 処理β
  106. アプリケーションの論理データ構造とそのデータ操作 アプリケーション開発で注力すべきところ(再掲) Copyright © 2025, Oracle and/or its affiliates 125

    入力 論理データ構造 出力 対応関係の定義 インターフェース SQL実行計画 SQL実行計画探索 アルゴリズム 全体最適化問題 値の分布統計 物理データ構造 ハードウェア・リソース 論理データ構造の定義とインターフェース(SQL)を 変更せずにアルゴリズム実装が改良される
  107. Our mission is to help people see data in new

    ways, discover insights, unlock endless possibilities.