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

SQL-decoupling interface and implementation

SQL-decoupling interface and implementation

2021年12月17日
Oracle Developer Day 2021
データベースへのアクセスに使われ続けるSQLの性質を再確認

SQLはリレーショナル・モデルへのインターフェースとして考案された言語ですが、現在ではそれ以外のドキュメント・モデルやネットワーク・モデルでも使用されるようになりました。それはSQLは他の手続き的言語とは異なる特徴を持っているためです。本セッションではSQLの実行モデルを再確認し、その特徴を活かすアプリケーション開発と、データベース・エンジンの実装にはどのような性質を備えているべきかを解説します。

140494d272a4d89883a94fdfdb29dea2?s=128

oracle4engineer
PRO

December 20, 2021
Tweet

Transcript

  1. データベースへのアクセスに 使われ続けるSQLの性質を再確認 日下部明 Principal Cloud Solution Engineer Oracle Corporation Japan

    Dec. 17th, 2021 Copyright © 2021, Oracle and/or its affiliates
  2. 自己紹介 Copyright © 2021, Oracle and/or its affiliates 日本オラクル 日下部

    明 (KUSAKABE Akira) 高可用性技術を中心にOracle Databaseの技術深堀を担当。 著書に「これは使えるOracle新機能活用術 」(翔泳社) Connpass にて “Oracle Database Technology Night”を定期開催しております。 ご興味ある方はぜひ!ご参加ください! https://oracle-code-tokyo-dev.connpass.com/ @akirak00
  3. Agenda • SQLの実行モデル • 複数用途への最適化 • ハードウェア・リソースの抽象化 • 分散アプリケーション Copyright

    © 2021, Oracle and/or its affiliates
  4. Copyright © 2021, Oracle and/or its affiliates SQLの実行モデル

  5. 入力と出力の対応関係の定義 SQL Copyright © 2021, Oracle and/or its affiliates 出力

    SELECT ename, dname, job, empno, hiredate, loc FROM emp, dept WHERE emp.deptno = dept.deptno ORDER BY ename 何を取り出すかの定義であって、どうやって導出するかのアルゴリズムは記述されていない 入力 論理データ構造
  6. インターフェースとアルゴリズム実装の分離 SQLの結果集合を導出するアルゴリズムは自動生成される Copyright © 2021, Oracle and/or its affiliates 入力

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

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

    対応関係の定義 インターフェース SQL実行計画 SQL実行計画探索 アルゴリズム 全体最適化問題 値の分布統計 物理データ構造 ハードウェア・リソース 論理データ構造の定義と インターフェース(SQL)を変更せずに アルゴリズム実装が改良される 入力 論理データ構造
  9. リレーショナル・モデルの操作からはじまったが、他のモデルでも使用されるようになった SQL - 結果集合の定義 - 宣言型言語 Copyright © 2021, Oracle

    and/or its affiliates 9 データ・モデル • Relational • Text Search • Object Relational • XML • JSON • Spatial • Network • ... ワークロード • オンライン・トランザクション • 分析・集計 • 機械学習 • ...
  10. 複数用途への最適化

  11. 性能最適化が異なる オンライン・トランザクション処理 多数のユーザーが少数のデータに同時並行アクセス 分析・集計処理 1つの処理が大量のデータにアクセス 用途が違うとデータへのアクセスの性質が異なる Copyright © 2021, Oracle

    and/or its affiliates 11 • 索引 • 行指向レイアウト • ネステッド・ループ・ジョイン • キャッシュ・メモリー • 並行アクセス制御 • ... • パーティショニング • 列指向レイアウト • ハッシュ・ジョイン • ブルーム・フィルタ • 並列実行 • ...
  12. データ構造を操作する アルゴリズム 物理データ構造 性能最適化が異なる オンライン・トランザクション処理 多数のユーザーが同時並行アクセス 分析・集計処理 1つの処理が大量のデータにアクセス 用途が違うとデータへのアクセスの性質が異なる Copyright

    © 2021, Oracle and/or its affiliates 12 • 索引 • 行指向レイアウト • ネステッド・ループ・ジョイン • キャッシュ・メモリー • 並行アクセス制御 • ... • パーティショニング • 列指向レイアウト • ハッシュ・ジョイン • ブルーム・フィルタ • 並列実行 • ... データへのアクセスの性質が異なる
  13. 対象行を探索するのに表ブロック全走査よりもアクセス量を減らした走査 索引 少数のデータ位置を特定 パーティショニング 多数のデータ位置を範囲で特定 物理データ構造 (1) - 計算量のオーダーを下げる Copyright

    © 2021, Oracle and/or its affiliates 13 B-Tree索引ブロック 表 表ブロック 2020/03/01 2020/02/01 2020/01/01 表ブロック 表
  14. 少数の行の位置を特定 - オンライン・トランザクション処理 ヒープ表の索引 • すべての索引が行アドレスを指す • プライマリ・キー索引は索引の1つ(対等の関係) • Oracle

    Databaseの標準 クラスタリング索引(索引構成表) • プライマリ・キー索引に残りの列が付属 • 2次索引はプライマリ・キーの値を指す • Oracle Databaseではほぼ使用しない 索引 Copyright © 2021, Oracle and/or its affiliates 14 プライマリ・キー索引 表 値 行アドレス 値 行アドレス 値 行アドレス 他の列の索引 値 行アドレス 値 行アドレス 値 行アドレス プライマリ・キー索引と 一体化した表 2次索引はプライマリ・キーの 値へのポインタ PK値 行データ PK値 行データ PK値 行データ 値 PK値 値 PK値 値 PK値
  15. 多数の行を範囲で特定 - 分析・集計処理 アクセス範囲を限定 • レンジ/リスト・パーティショニング • データ位置を寄せる 並列実行のための均等配分 •

    ハッシュ・パーティショニング • データ位置を均等に分散させる パーティショニング Copyright © 2021, Oracle and/or its affiliates 15 2020/03/01 2020/02/01 2020/01/01 PX PX PX 並列実行プロセス
  16. 表パーティションに閉じた索引 パーティショニングと索引 (1) ローカル・パーティション索引 Copyright © 2021, Oracle and/or its

    affiliates 16 パーティション1 パーティション2 パーティションn SELECT * FROM v1 WHERE partkey1 = val1 表パーティション・キー列 を含むローカル索引 表パーティション・キー列 を含まないローカル索引 SELECT * FROM v1 WHERE secondary_col = val2 表のパーティション・キー列を指定 したときだけ特定のパーティション のみにアクセスを限定 表のパーティション・キー列を指定しな いと全パーティションの探索が必要
  17. 表パーティションをまたがった索引 パーティショニングと索引 (2) グローバル索引 Copyright © 2021, Oracle and/or its

    affiliates 17 パーティション1 パーティション2 パーティションn SELECT * FROM v1 WHERE partkey1 = val1 表パーティション・キー列 を含むローカル索引 表パーティション・キー列 を含まない索引 SELECT * FROM v1 WHERE secondary_col = val2 表のパーティション・キー列を指定 したときだけ特定のパーティション のみにアクセスを限定 表のパーティション・キー列を含まない SQLでも特定の表パーティションにの みアクセス
  18. 大量アクセス系のためのパーティショニングとトランザクション系のための索引のデータ構造の重ね合わせが可能 性質の異なるワークロード向けのデータ構造の重ね合わせ Copyright © 2021, Oracle and/or its affiliates 18

    パーティション1 パーティション2 パーティションn SELECT * FROM t1 WHERE partkey1 BETWEEN val1 and val2 表パーティション・キー列 • パーティション・プルーニング • パーティション・ワイズ結合 表パーティション・キー列 を含まない索引 SELECT * FROM v1 WHERE secondary_col = val2 分析・集計処理系 表のパーティション・キー列は表フル・スキャン時 にパーティション・プルーニングを効かせる列 オンライン・トランザクション処理 表パーティション・キーと関係ない索引設計が可能
  19. データのパーティショニングとクラスタ構成には強い関係がある データの物理構造 • 計算量のオーダーを下げるデータ構造 • パーティショニングしたデータへの索引付け サーバー・クラスタ構成 • 1台の物理サーバーの能力を超える性能 •

    各サーバーが担当するデータ 索引 - パーティショニング - サーバー・クラスタ構成 Copyright © 2021, Oracle and/or its affiliates 19 パーティション1 パーティション2 パーティションn 依存関係
  20. 1台の物理サーバーを超える性能を出す Shared Nothing Architecture • 各DBサーバーは分割されたデータの一部を担当 • 物理データ構造とクラスタ構成が依存 • 分割可能かつ均一なデータ・アクセスを前提とする

    Shared Everything Architecture • 全DBサーバーが全データにアクセス可能 • 物理データ構造とクラスタ構成が独立 • 任意のデータ・アクセスのパターンに対応 データベース・サーバーのクラスタ構成 Copyright © 2021, Oracle and/or its affiliates 20 DBサーバー ストレージ DBサーバー ストレージ
  21. シェアード・ナッシングとシェアード・エブリシングの両方がある Oracle Database Sharding • 各シャードは分割されたデータの一部を担当 • 物理データ構造とクラスタ構成が依存 • シャードに閉じたローカル・パーティション索引のみ

    • 1つのシャード内で処理が完結することを前提とする • オンライン・トランザクション処理向け Oracle Real Application Clusters • 全DBサーバーが全データにアクセス可能 • 物理データ構造とクラスタ構成が独立 • 任意のデータ・アクセスのパターンに対応 • オンライン・トランザクション処理と分析・集計処理両対応 Oracle Databaseのクラスタ構成 Copyright © 2021, Oracle and/or its affiliates 21 DBサーバー ストレージ シャード1 シャード2 シャードn
  22. 1つのシャード内で完結させるのが基本 単一シャード・クエリー • シャーディング・キーでシャードを特定できる • 1つのシャードに接続して実行される • オンライン・トランザクション処理は基本的にこれを想定 マルチ・シャード・クエリー •

    複数シャードにまたがるSQL • シャード・カタログ・データベースに接続して実行される • 集計・分析処理 ShardingでのSQL実行 Copyright © 2021, Oracle and/or its affiliates 22 シャード・カタログ シャード シャード Oracleクライアント Oracleクライアント
  23. 各シャードが持つデータの排他と重複を使い分ける設計が必要 Sharded Table (シャード表) • パーティショニングされた表 • 全シャードが排他的にデータを持つ • 定義はパーティション表とほぼ同じ

    • RANGE • LIST • CONSISTENT HASH • これらの複合(コンポジット・パーティショニング) Duplicated Table (重複表) • パーティショニングできない表 • 全シャードが同じデータを持つ • シャード・カタログが持つデータがレプリケートされる • 高頻度の更新は想定していない 各シャードへのデータのパーティショニング Copyright © 2021, Oracle and/or its affiliates 23 シャード・カタログ シャード シャード 重複 排他
  24. ジョインする関係にあるシャード表 1つのシャード内でSQL処理を完結させる • 複数のシャード表のパーティショニングが合致するかがSharding適合の分水嶺 複数のシャード表の間に親子関係を持たせる • システム管理シャーディングの親表のパーティションと子表のパーティションを同じシャードに配置する • 親子関係がある一連のシャード表を表ファミリと呼ぶ 親子関係の定義

    • リファレンス・パーティション • PARENT句 表ファミリ Copyright © 2021, Oracle and/or its affiliates 24 親表A 子表B シャード 1 シャード 2 シャード 3
  25. • シャーディングがスケールする暗黙の前提は「1つの処理は1つのシャード内で完結する」 • シャード表と重複表を使い分けなければならない 既存データベースのスキーマとSQLを分析しシャーディング用スキーマの候補を複数提示する シャーディング・アドバイザ 25 親シャード表A 子シャード表B シャード

    1 シャード 2 シャード 3 重複表C 既存データベース • スキーマ構造(主キー、外部キー) • SQL実行計画(表のジョイン) Copyright © 2021, Oracle and/or its affiliates
  26. 共有ストレージ・共有メモリー型クラスタ・データベース Oracle Real Application Clusters Copyright © 2021, Oracle and/or

    its affiliates 26 データベース・クライアント ストレージ・ノード • ストレージ・デバイス 全サーバー・ノードは全ストレージにアクセス可能 クライアントはどのサーバーに接続してもよい サーバー・ノード • CPU+メモリー • 全ノードが対等な関係
  27. データ・モデル(スキーマ構造)、トランザクション分離レベルの挙動も同じ シングル・インスタンス構成と同じアクセスが可能 Copyright © 2021, Oracle and/or its affiliates 27

    ストレージ・ノード • ストレージ・デバイス サーバー・ノード • CPU+メモリー • 全ノードが対等な関係 データベース・クライアント クライアントはどのサーバーに接続しても • 同じデータの見え方 • シングル・インスタンス構成と同じトランザクション分離レベル サーバー・ノード間のメモリー 一貫性を全自動で維持
  28. データ・モデル(スキーマ構造)、トランザクション分離レベルの挙動も同じ 全ノードを使用した1つのSQL処理の並列化が可能 Copyright © 2021, Oracle and/or its affiliates 28

    ストレージ・ノード • ストレージ・デバイス サーバー・ノード • CPU+メモリー • 全ノードが対等な関係 データベース・クライアント PX PX PX PX PX PX 並列実行プロセスがデータを 分割して並列処理
  29. Oracle Real Application Clusters ユーザーからは透過的に複数CPUで処理可能 共有メモリー型マルチ・プロセッサ 共有メモリー型マルチ・プロセッサと同じくキャッシュ一貫性を維持 Copyright © 2021,

    Oracle and/or its affiliates 29 ノード1 ノード2 データベース (ストレージ上のファイル群) キャッシュ一貫性 キャッシュ・メモリー キャッシュ・メモリー キャッシュ一貫性 CPU 1 CPU 2 SGA DRAM (メイン・メモリー) SGA (キャッシュ・メモリー) SGA (キャッシュ・メモリー)
  30. Stripe And Mirror Everything (S.A.M.E.) ファイルをエクステントに分割し、 • すべてのストレージ・デバイスに均等に分散する ⇒Stripe •

    複製を異なるストレージ筐体の障害グループ(FAILGROUP)のストレージ・デバイスに配置する ⇒Mirror そしてストレージ・デバイスが増減してもリバランスすることでStripeとMirrorを維持する Automatic Storage Management (ASM)のファイル配置 Copyright © 2021, Oracle and/or its affiliates 30 異なるFAILGLOUPのデバイスにミラーリング すべてのデバイスにストライピング プライマリ・エクステント ASM上のファイル extent extent extent セカンダリ・エクステント(ミラー) ASMエクステント FAILGLOUP 1 FAILGLOUP 2 FAILGLOUP n
  31. アプリケーションからはシングル・インスタンス構成と区別がつかない 高度に抽象化されたアーキテクチャ Copyright © 2021, Oracle and/or its affiliates 31

    ストレージ Real Application Clusters (RAC) • どのノードに接続しても全データにアクセス可能 • トランザクション分離レベルの挙動もシングル・イン スタンス構成と同じ Multitenant Architecture (MTA) • 1つのOracleインスタンスが複数のプラガブル・デー タベースをホスト • プラガブル・データベース間は完全隔離 • Oracleインスタンス内で各PDBにリソース割り当 て Automatic Storage Management (ASM) • 全データを全ストレージ・デバイスに均等配分 • ストレージ筐体障害でも全データ・アクセスを維持 DBサーバー CPU メモリー データベース・クライアント service A Oracle Net Services • Oracleのネットワーク階層 • 「サービス」という抽象概念に接続する
  32. シャード1 シャード2 シャードn ShardingとRACは排他ではない Oracle Database Sharding • 各シャードは分割されたデータの一部を担当 •

    物理データ構造とクラスタ構成が依存 • シャードに閉じたローカル・パーティション索引のみ • 1つのシャード内で処理が完結することを前提とする • オンライン・トランザクション処理向け Oracle Real Application Clusters • 全DBサーバーが全データにアクセス可能 • 物理データ構造とクラスタ構成が独立 • 任意のデータ・アクセスのパターンに対応 • オンライン・トランザクション処理と分析・集計処理両対応 Oracle Databaseのクラスタ構成 Copyright © 2021, Oracle and/or its affiliates 32 DBサーバー ストレージ ※地理分散
  33. 多次元データ構造を1次元に配置 データの物理構造 (2) - ストレージのアクセス量を減らす Copyright © 2021, Oracle and/or

    its affiliates 33 C1 C2 C3 C4 行指向レイアウト 列指向レイアウト 1行を連続配置 1列を連続配置 C1 C2 C3 C4 C1 C2 C3 C4 C1 C2 C3 C4 C1 C2 C3 C4 行指向レイアウトを行指向アクセス 行指向レイアウトを列指向アクセス C1 C1 C1 ・・・ C2 C2 C2 ・・・ C1 C1 C1 ・・・ C2 C2 C2 ・・・ 列指向レイアウトを行指向アクセス 列指向レイアウトを列指向アクセス 表 (多次元の抽象概念)
  34. 行指向レイアウトと列指向レイアウトの両立 ストレージとメモリーのデータの物理レイアウト Copyright © 2021, Oracle and/or its affiliates 34

    メモリー ストレージ 行指向レイアウト 列指向レイアウト 行指向→列指向に変換 • Oracle Database • MySQL HeatWave オンライン・トランザクション処理 分析・集計処理
  35. Copyright © 2021, Oracle and/or its affiliates ハードウェア・リソースの抽象化

  36. CPUとメモリー スケール・アップ • 1つのOSのハードウェア・リソースを増設 • 仮想マシンのCPUとメモリー割り当て(シェイプ)を上げる • 多くの場合に仮想マシンの再起動が必要 スケール・アウト •

    物理マシンの増設 • 多くの場合にインスタンス起動/停止が必要 ハードウェア・リソースの抽象化 Copyright © 2021, Oracle and/or its affiliates 36 CPU メモリー 仮想マシン スケール・アップ 仮想マシン コンテナ 仮想マシン コンテナ スケール・アウト
  37. OS 「増やす」と「減らす」の運用は表裏一体 OS環境のスケール・アップ • Intel x86環境は仮想マシンの再起動が必要になる場合 が多い • RISCプロセッサー+Unix環境は動的に増減可能 Oracleインスタンスのスケール・アップ

    • CPUとメモリーの割り当ては動的に増減可能 • CPUとメモリーの動的増減と組み合わせ可能 • あるOS環境のリソースを増やすには別のOS環境のリ ソースを減らせることが必要 Oracle Databaseのスケール・アップ/ダウン Copyright © 2021, Oracle and/or its affiliates 37 CPU メモリー OS1 スケール・アップ CPU メモリー Oracleインスタンス スケール・アップ OS2
  38. CPUとメモリー スケール・アップ • Multitenant Architecture (MTA) • 1つのOracleインスタンスに割り当てたリソース内での各プラ ガブル・データベースへの割り当てを動的に変更可能 スケール・アウト

    • Real Application Clusters (RAC) • CPUとメモリーを割り当てたノードの個数を増やす • 動的にノード数の増減が可能 • データ配分のやり直しが不要 Oracle Databaseのハードウェア・リソースの抽象化 Copyright © 2021, Oracle and/or its affiliates 38 CPU メモリー スケール・アウト スケール・アップ Oracleインスタンス PDB1 PDB2 Oracleインスタンス Oracleインスタンス
  39. すべてのCPUとメモリーの動的リソース変更を組み合わせ可能 Oracle Databaseのハードウェア・リソースの抽象化 Copyright © 2021, Oracle and/or its affiliates

    39 OS OS1 スケール・アップ Oracleインスタンス スケール・アップ OS2 OS環境のリソース割り当て Oracleインスタンスのリソース割り当て スケール・アップ Oracleインスタンス PDB1 PDB2 Oracleインスタンス Oracleインスタンス 1つのOracleインスタンス内の割り当て 複数OracleインスタンスでのRAC構成 スケール・アウト Oracleインスタンス
  40. MTA+RACで通常稼働中にはOracleインスタンスの再起動を極力発生させない スケール・アップ • Multitenant Architecture (MTA) • 1つのOracleインスタンスに割り当てたリソース内での各プラ ガブル・データベースへの割り当てを動的に変更可能 スケール・アウト

    • Real Application Clusters (RAC) • CPUとメモリーを割り当てたノードの個数を増やす • 動的にノード数の増減が可能 • データ配分のやり直しが不要 Oracle Databaseのハードウェア・リソースの抽象化の方向性 Copyright © 2021, Oracle and/or its affiliates 40 スケール・アウト スケール・アップ Oracleインスタンス PDB1 PDB2 Oracleインスタンス PDB1 PDB2
  41. MTA+RACで通常稼働中にはOracleインスタンスの再起動を極力発生させない スケール・アップ • Multitenant Architecture (MTA) • 1つのOracleインスタンスに割り当てたリソース内での各プラ ガブル・データベースへの割り当てを動的に変更可能 スケール・アウト

    • Real Application Clusters (RAC) • CPUとメモリーを割り当てたノードの個数を増やす • 動的にノード数の増減が可能 • データ配分のやり直しが不要 Oracle Databaseのハードウェア・リソースの抽象化の方向性 Copyright © 2021, Oracle and/or its affiliates 41 スケール・アウト スケール・アップ Oracleインスタンス PDB1 PDB2 Oracleインスタンス PDB1 PDB2 ハードウェア・リソースの設計変数が多い • CPU • メモリー • ストレージ • クラスタ・ノード数
  42. Exadataをベースにして高度な抽象化がなされた自律型データベース・サービス Exadata上のプラガブル・データベースが割り当てられる 指定する変数はOCPU数とストレージ容量のみ Oracle Computing Unit (OCPU) • 1 OCPUは1CPU物理コアに相当

    • スケールアップかつスケールアウトを抽象化 • OCPU数に比例したCPU時間 • OCPU数に比例したメモリー容量 • OCPU数に比例したストレージ性能 • 無停止でOCPU数(リソース割り当て)を変更 Oracle Autonomous Database Copyright © 2021, Oracle and/or its affiliates 42
  43. Oracle Computing Unit(OCPU) の1変数にハードウェア・リソースを抽象化 Oracle Autonomous Database Copyright © 2021,

    Oracle and/or its affiliates 43 DBサーバー ストレージ Oracle Computing Unit (OCPU) • 1 OCPUは1CPU物理コアに相当 • スケール・アップかつスケール・アウトを抽象化 • OCPU数に比例したCPU時間 • OCPU数に比例したメモリー容量 • OCPU数に比例したストレージ性能 • 無停止でOCPU数(リソース割り当て)を変更 CPU メモリー Autonomous Databaseインスタンス • 1つのプラガブル・データベースのこと • OCPUに抽象化されたリソース割り当て スケール・アップ スケール・アウト
  44. Copyright © 2021, Oracle and/or its affiliates 分散アプリケーション

  45. アプリケーションの意味的な境界(ドメイン)で分割される 分散型アプリケーション Copyright © 2021, Oracle and/or its affiliates 45

    アプリケーション Microservice Microservice Microservice Microservice (マイクロ)サービスの境界 データ・ストアの性質 アプリケーションの意味的な境界
  46. リレーショナル・モデルの操作からはじまったが、他のモデルでも使用されるようになった SQL - 結果集合の定義 - 宣言型言語 (再掲) Copyright © 2021,

    Oracle and/or its affiliates 46 データ・モデル • Relational • Text Search • Object Relational • XML • JSON • Spatial • Network • ... ワークロード • オンライン・トランザクション • 分析・集計 • 機械学習 • ...
  47. サービス分割境界はアプリケーションのドメインによるべき 分散アプリケーションのデータ・ストア Copyright © 2021, Oracle and/or its affiliates 47

    データ・モデル • Relational • Text Search • Object Relational • XML • JSON • Spatial • Network • ... ワークロード • オンライン・トランザクション • 分析・集計 • 機械学習 • ... アプリケーションのドメインが求めるデータ操作
  48. Copyright © 2021, Oracle and/or its affiliates データベースへのアクセスに 使われ続けるSQLの性質を再確認

  49. インターフェースとアルゴリズム実装の分離 SQLの結果集合を導出するアルゴリズムは自動生成される(再掲) Copyright © 2021, Oracle and/or its affiliates 入力

    出力 対応関係の定義 インターフェース SQL実行計画 SQL実行計画探索 アルゴリズム 全体最適化問題 値の分布統計 物理データ構造 ハードウェア・リソース 論理データ構造
  50. 入力 論理データ構造 インターフェースとアルゴリズム実装の分離 データベース・エンジン実装の制限事項が アプリケーション設計に逆流しないほうがよい Copyright © 2021, Oracle and/or

    its affiliates 出力 対応関係の定義 インターフェース SQL実行計画 SQL実行計画探索 アルゴリズム 全体最適化問題 値の分布統計 物理データ構造 ハードウェア・リソース データベース・エンジン実装 制限事項 チューニング アプリケーション開発で 注力すべきところ • 論理データ構造 • クエリー
  51. インターフェースとアルゴリズム実装の分離 Oracle Database インターフェース設計が物理データ構造・物理サーバー構成と独立 Copyright © 2021, Oracle and/or its

    affiliates 入力 出力 対応関係の定義 インターフェース 物理データ構造 論理データ構造 パーティション1 パーティション2 パーティションn 物理ハードウェア構成 サーバー ストレージ 索引
  52. インターフェースとアルゴリズム実装の分離 • SQLは結果集合を定義するインターフェース • アルゴリズム実装はデータベース・エンジンが自動生成 • インターフェース不変を維持するためのデータベース・エンジン実装 • 物理データ構造 •

    ハードウェア・リソースの抽象化 データベースへのアクセスに使われ続けるSQLの性質を再確認 Copyright © 2021, Oracle and/or its affiliates 52
  53. Thank you Copyright © 2021 Oracle and/or its affiliates