Slide 1

Slide 1 text

Oracle Databaseカーネル大改造史 抽象データ空間のアドレッシング 日下部明 マスター・プリンシパル・クラウド・エンジニア 日本オラクル株式会社 2025年5月23日

Slide 2

Slide 2 text

kernel / shell 植物の種子からきている言葉 2 Copyright © 2025, Oracle and/or its affiliates kernel : 仁(じん) ソフトウェア処理の中心核 shell : 殻 外部との境界 kernel shell

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

リレーショナル・データベースとSQLのモデル 5 Copyright © 2025, Oracle and/or its affiliates

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

入力と出力の対応関係の定義 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が定義する集合を導出するアルゴリズム

Slide 8

Slide 8 text

入力と出力の対応関係の定義 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 何を取り出すかの定義であって、どうやって 導出するかのアルゴリズムは記述されていない

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

入力と出力の対応関係の定義 SQL Copyright © 2025, Oracle and/or its affiliates 10 出力 入力 論理データ構造 処理時間 アルゴリズム A B C D E A B C D E 最も処理時間が短いアルゴリズムを採用したい

Slide 11

Slide 11 text

インターフェースとアルゴリズム実装の分離 SQLの結果集合を導出するアルゴリズムは自動生成される Copyright © 2025, Oracle and/or its affiliates 11 入力 出力 対応関係の定義 インターフェース SQL実行計画 SQL実行計画探索 アルゴリズム 全体最適化問題 値の分布統計 物理データ構造 ハードウェア・リソース 論理データ構造

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

リレーショナル・データベースのデータ構造 抽象データ空間 14 Copyright © 2025, Oracle and/or its affiliates

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

表(TABLE)の概念 アドレスの概念の有無 16 Copyright © 2025, Oracle and/or its affiliates スプレッド・シート リレーショナル・データベース 何行目、何列目のアドレスでセルのデータを指定 列の名前とその値で行を特定 SELECT * FROM table1 WHERE C1=value1

Slide 17

Slide 17 text

抽象化されたデータ空間 リレーショナル・データベースの表(TABLE)は順序がない行の集合 17 Copyright © 2025, Oracle and/or its affiliates 表(TABLE) (順序がない)行の集合

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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)

Slide 20

Slide 20 text

抽象データ空間 リレーショナル・データベースの表(TABLE)は順序がない行の集合 20 Copyright © 2025, Oracle and/or its affiliates 出力 入力 論理データ構造 RDBMSとSQLは「アドレス」の概念を排除した

Slide 21

Slide 21 text

抽象データ空間 リレーショナル・データベースの表(TABLE)は順序がない行の集合 21 Copyright © 2025, Oracle and/or its affiliates 出力 入力 論理データ構造 RDBMSとSQLは「アドレス」の概念を排除した コンピュータ上に実装するには「アドレス」の 概念を持つデバイスを扱う必要がある

Slide 22

Slide 22 text

アドレスのない抽象データ空間から アドレスのあるデバイスへのアドレッシング 22 Copyright © 2025, Oracle and/or its affiliates

Slide 23

Slide 23 text

抽象化されたデータ空間のストレージ: 表領域(TABLESPACE) 23 Copyright © 2025, Oracle and/or its affiliates 表(TABLE) 表領域(TABLESPACE) データファイル CREATE TABLE 表A (…) TABLESPACE 表領域α CREATE TABLESPACE 表領域α DATAFILE … 表(TABLE) → 表領域(TABLESPACE) 表領域(TABLESPACE) → データファイル

Slide 24

Slide 24 text

抽象化されたデータ空間からファイルへのアドレッシング リレーショナル・データベースの表(TABLE)は行の順序がない集合 24 Copyright © 2025, Oracle and/or its affiliates アドレスの概念がない抽象データ空間 アドレスの概念がある物理データ構造 表(TABLE) 表領域(TABLESPACE) データファイル

Slide 25

Slide 25 text

アドレスのある概念にデータを格納 - Oracleデータ・ブロック 固定サイズのブロックにデータが格納される 25 Copyright © 2025, Oracle and/or its affiliates データファイル 固定サイズのOracleデータ・ブロック

Slide 26

Slide 26 text

アドレスのある概念にデータを格納 - Oracleデータ・ブロック 固定サイズのブロックにデータが格納される 26 Copyright © 2025, Oracle and/or its affiliates データファイル データベース・バッファ・キャッシュ チェックポイント メモリー → ファイル キャッシュ・ミス ファイル → メモリー メモリーにOracleデータ・ブロックをキャッシュ

Slide 27

Slide 27 text

アドレスの概念がない抽象データ空間 アドレスの概念がある物理データ構造 行(ROW)にアドレスがある - ROWID疑似列 27 Copyright © 2025, Oracle and/or its affiliates 表(TABLE) 表領域(TABLESPACE) #FILE #BLOCK #ROW データファイル ROWID 何番目のファイルの、何ブロック目の、何行目、をエンコードしたもの ≒データファイル上のアドレス ROWID(#FILE, #BLOCK, #ROW)

Slide 28

Slide 28 text

指定した値を持つ行アドレス(ROWID)を短時間で特定したい 28 Copyright © 2025, Oracle and/or its affiliates 表(TABLE) 表領域(TABLESPACE) #FILE #BLOCK #ROW データファイル C1列値 ROWID C1列 SELECT * FROM table1 WHERE C1=value1 列の名前とその値から、データファイル上の位置を特定したい

Slide 29

Slide 29 text

指定した値を持つ行アドレス(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

Slide 30

Slide 30 text

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をペアで保持

Slide 31

Slide 31 text

PRIMARY KEY/UNIQUE制約を索引で実装する 31 Copyright © 2025, Oracle and/or its affiliates value1 ROWID C1列のB*Tree索引 • C1列の値を昇順にソート済み平衡木 • 探索コストO(logn) 行のC1列の値とROWIDをペアで保持 索引は C1=value1 が既に存在するかを短時間で判定できる

Slide 32

Slide 32 text

ヒープ表と索引構成表(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)と呼ばれることもある

Slide 33

Slide 33 text

ヒープ表とB*Tree索引 列の値とROWIDのペア 33 Copyright © 2025, Oracle and/or its affiliates ヒープ表(TABLE) C1 C2 C1列のB*Tree索引 ROWID ポインタ

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

ヒープ表と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の索 引が特別な構造を持っているわけではない。

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

データの物理配置を絞り込む構造 索引とパーティショニング 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列

Slide 38

Slide 38 text

パーティショニング実装1 : パーティション・ビュー(Partition VIEW) 複数の表(TABLE)をビュー(VIEW)で仮想的に1つに見せる (Oracle7.3) 38 Copyright © 2025, Oracle and/or its affiliates VIEW v1 partkey1列 表 t1 表 t2 表 tn

Slide 39

Slide 39 text

パーティショニング実装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で連結

Slide 40

Slide 40 text

パーティショニング実装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

Slide 41

Slide 41 text

索引の暗黙の制限 1つの索引は1つの表にしかアドレッシングできない 41 Copyright © 2025, Oracle and/or its affiliates C1列値 ROWID C1列のB*Tree索引 行のC1列の値とROWIDをペアで保持 1つの索引は異なる複数の表の アドレッシングはできない 表 t1 表 t2 C1列

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

パーティショニング実装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索引の列は表のパーティション・キー定義に拘束される

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

ローカル・パーティション索引しか持つことのできないパーティション実装 表パーティション・キー列を含んでいなければ表パーティションを特定できない 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列 全パーティションを探索

Slide 47

Slide 47 text

パーティショニング実装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つの表を内部的に複数のセグメントに分割する

Slide 48

Slide 48 text

パーティショニング実装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 表ごとに異なる 表領域への配置も可能

Slide 49

Slide 49 text

パーティショニング実装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 パーティションごとに異なる 表領域への配置も可能

Slide 50

Slide 50 text

パーティショニング実装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つの索引ツリーからすべての表パーティションをアドレッシング可能

Slide 51

Slide 51 text

パーティショニング実装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)列と独立した索引定義

Slide 52

Slide 52 text

パーティショニング実装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)列と独立した索引定義

Slide 53

Slide 53 text

パーティショニング実装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)列と独立した索引定義

Slide 54

Slide 54 text

アドレスの概念がない抽象データ空間 アドレスの概念がある物理データ構造 抽象データ空間からファイルへのアドレッシング 54 Copyright © 2025, Oracle and/or its affiliates 表(TABLE) 表領域(TABLESPACE) データファイル

Slide 55

Slide 55 text

アドレスの概念がない抽象データ空間 アドレスの概念がある物理データ構造 ファイルからストレージ・デバイスへのアドレッシング ファイルはストレージを抽象化したもの 55 Copyright © 2025, Oracle and/or its affiliates 表(TABLE) 表領域(TABLESPACE) データファイル ストレージの抽象概念 ストレージの物理デバイス

Slide 56

Slide 56 text

ファイルのアドレスから デバイスのアドレスへのアドレッシング 56 Copyright © 2025, Oracle and/or its affiliates

Slide 57

Slide 57 text

ファイルへの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 : コピーするデータ量

Slide 58

Slide 58 text

ファイルへの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()

Slide 59

Slide 59 text

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

Slide 60

Slide 60 text

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

Slide 61

Slide 61 text

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

Slide 62

Slide 62 text

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

Slide 63

Slide 63 text

Automatic Storage Management 63 Copyright © 2025, Oracle and/or its affiliates

Slide 64

Slide 64 text

デバイス・ ファイル Oracle Automatic Storage Management(ASM) Oracle Database専用のファイルシステム兼ボリューム・マネージャ (Oracle Database 10g) 64 Copyright © 2025, Oracle and/or its affiliates ファイル構造 Oracle構造 POSIXファイルシステム ボリューム・マネージャ ファイルシステム 表、索引 表領域 ファイル ASM ASM 表、索引 表領域 ボリューム・マネージャ ファイルシステム ファイル

Slide 65

Slide 65 text

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ディスクグループ名を指定すると ファイル・パスが自動生成される 物理ストレージ・デバイス

Slide 66

Slide 66 text

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 ファイルシステム兼ボリューム・マネージャ 物理ストレージ・デバイス

Slide 67

Slide 67 text

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

Slide 68

Slide 68 text

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エクステント

Slide 69

Slide 69 text

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にミラーが存在する

Slide 70

Slide 70 text

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

Slide 71

Slide 71 text

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ファイルのエクステントの配置マッピングの管理 → ファイルシステム兼ボリューム・マネージャ

Slide 72

Slide 72 text

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インスタンス同士が通信して エクステント配置の整合性を維持 • クラスタ・ファイルシステム兼クラスタ・ボリューム・マネージャ

Slide 73

Slide 73 text

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

Slide 74

Slide 74 text

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カーネル

Slide 75

Slide 75 text

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

Slide 76

Slide 76 text

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カーネル

Slide 77

Slide 77 text

例: 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 リクエスト

Slide 78

Slide 78 text

ファイルシステム & ボリューム・マネージャ 抽象データ空間からストレージ・デバイスへのアドレッシング 78 Copyright © 2025, Oracle and/or its affiliates 表(TABLE) 表領域(TABLESPACE) ファイル 抽象データ空間 ↓ ファイル・アドレス ファイル・アドレス ↓ 物理デバイス・アドレス 物理デバイス・ファイル アドレスの概念がない抽象データ空間 アドレスの概念がある物理データ構造 ストレージの抽象概念 ストレージの物理デバイス ユーザー空間のDBMSプロセス OSカーネル空間

Slide 79

Slide 79 text

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

Slide 80

Slide 80 text

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

Slide 81

Slide 81 text

Exadata Database Machine 81 Copyright © 2025, Oracle and/or its affiliates

Slide 82

Slide 82 text

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

Slide 83

Slide 83 text

ストレージ・ノード コンピュート・ノード 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デバイス

Slide 84

Slide 84 text

ストレージ・ノード コンピュート・ノード 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台

Slide 85

Slide 85 text

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個のストレージ・デバイス

Slide 86

Slide 86 text

ストレージ・ノード コンピュート・ノード 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デバイス

Slide 87

Slide 87 text

ストレージ・ノード コンピュート・ノード 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デバイス

Slide 88

Slide 88 text

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

Slide 89

Slide 89 text

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

Slide 90

Slide 90 text

ネットワーク・ストレージから1データブロックを取得するレイテンシ短縮 ストレージ・ノードのキャッシュ用デバイスの高速化 90 Copyright © 2025, Oracle and/or its affiliates X7 250 µs レイテンシ (小さいほど良い) Exadataモデル Flashメモリー

Slide 91

Slide 91 text

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

Slide 92

Slide 92 text

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 メモリー

Slide 93

Slide 93 text

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 メモリー

Slide 94

Slide 94 text

ネットワーク・ストレージから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 レイテンシ (小さいほど良い)

Slide 95

Slide 95 text

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 メモリー データ・キャッシュ用デバイスのアクセス時間を 短縮すればよい?

Slide 96

Slide 96 text

一般的な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

Slide 97

Slide 97 text

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のレイテンシは達成できない

Slide 98

Slide 98 text

ネットワーク・ストレージから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 レイテンシ (小さいほど良い)

Slide 99

Slide 99 text

一般的なネットワーク・ストレージへのI/Oモデル ストレージ・デバイスのアドレスとプロセスが確保したメモリーのアドレスの間でデータをコピー 99 Copyright © 2025, Oracle and/or its affiliates プロセス ストレージ・デバイス ネットワーク・デバイス ネットワーク・デバイス データ アプリケーション・プロセス

Slide 100

Slide 100 text

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

Slide 101

Slide 101 text

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

Slide 102

Slide 102 text

タイム・シェアリング・システム 1つのCPUスレッド上で実行するプログラムを切り替える 102 Copyright © 2025, Oracle and/or its affiliates CPUスレッド1 時間 OS プロセス プロセス

Slide 103

Slide 103 text

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

Slide 104

Slide 104 text

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

Slide 105

Slide 105 text

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)

Slide 106

Slide 106 text

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

Slide 107

Slide 107 text

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

Slide 108

Slide 108 text

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

Slide 109

Slide 109 text

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世紀から広く使われていた技術

Slide 110

Slide 110 text

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拡張 途中のデータ・コピーなし コンテキスト・スイッチなし

Slide 111

Slide 111 text

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 : 通信チャネル識別子

Slide 112

Slide 112 text

指定したアドレス間でのデータ・コピー 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 : コピーするデータ量

Slide 113

Slide 113 text

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

Slide 114

Slide 114 text

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

Slide 115

Slide 115 text

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プロセス内でアドレス変換完結 ストレージ・ノード コンピュート・ノード 途中のデータ・コピーなし コンテキスト・スイッチなし

Slide 116

Slide 116 text

ストレージ・ノードのスケール・アウト コンピュート・ノードのスケール・アウト 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 データ・キャッシュ用メモリー

Slide 117

Slide 117 text

Exadata Exascale Exadataの新しいデプロイメント 117 Copyright © 2025, Oracle and/or its affiliates

Slide 118

Slide 118 text

ストレージ管理方式の変更 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’

Slide 119

Slide 119 text

エクステント・マップ管理 - Exadata Automatic Storage Management (ASM)インスタンスがエクステント・マップを管理 119 Copyright © 2025, Oracle and/or its affiliates ファイル ASMインスタンス extent extent エクステント・マップ管理 Oracleインスタンス アドレス変換 エクステント・マップ Exadata - ASMインスタンスが管理 ストレージ・ノード コンピュート・ノード

Slide 120

Slide 120 text

エクステント・マップ管理 - 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が管理 ストレージ・ノード コンピュート・ノード ストレージ・ノード コンピュート・ノード

Slide 121

Slide 121 text

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から改訂 抽象データ空間 → ファイル・アドレス ファイル・アドレス → 物理デバイス・アドレス

Slide 122

Slide 122 text

データのアドレッシング・アーキテクチャと システム・デザイン 122 Copyright © 2025, Oracle and/or its affiliates

Slide 123

Slide 123 text

データのパーティショニング + ストレージへのレイアウト サーバー・クラスタ・アーキテクチャの違い 123 Copyright © 2025, Oracle and/or its affiliates シェアード・ナッシング・アーキテクチャ • 全コンピュート・ノードは全ストレージにアクセス可能 • 全データを全ストレージ・デバイスにストライプ • 各コンピュート・ノードは一部のパーティションに直接アクセス可能 • 各パーティションは個別のストレージ・デバイスに閉じる 表 p1 表 p2 表 p3 表 pn 表 p1 表 p2 表 p3 表 pn 表 p1 表 pn 全データにアクセス可能 シェアード・エブリシング + S.A.M.E. アーキテクチャ

Slide 124

Slide 124 text

データベースからデータベースへ複製する、必要がある? 124 Copyright © 2025, Oracle and/or its affiliates 索引定義が表パーティション・キーに拘束される • シェアード・エブリシング + S.A.M.E. アーキテクチャ • 性質の異なる処理への最適化の重ね合わせが可能 • 特定のパーティションにアクセスが偏っても全ハードウェア性能を 引き出す • シェアード・ナッシング・アーキテクチャ • 処理性能がスケールするパーティション・キー選定が重要 • 処理特性が変わるとパーティション・キーも要変更 索引定義が表パーティション・キーと独立 C1列 C2列 ETL処理 Extract - Transform - Load パーティション・キーを変えてデータをLoadしなおす 処理α→ ↑ 処理β C1列 処理α→ C2列 ↑ 処理β

Slide 125

Slide 125 text

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

Slide 126

Slide 126 text

Oracle Databaseカーネル大改造史 抽象データ空間のアドレッシング ご清聴ありがとうございました 126 Copyright © 2025, Oracle and/or its affiliates

Slide 127

Slide 127 text

Our mission is to help people see data in new ways, discover insights, unlock endless possibilities.

Slide 128

Slide 128 text

No content