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

Oracle Database入門 - アーキテクチャ編

Oracle Database入門 - アーキテクチャ編

11月21日開催 Oracle DBaseCampで発表した資料です。
アーカイブ動画:https://youtu.be/D0zr8Xiof1Q

oracle4engineer

November 21, 2023
Tweet

More Decks by oracle4engineer

Other Decks in Education

Transcript

  1. 1. Oracle Databaseの概要 • Oracle Databaseの内部構造 • プロセス • メモリー

    • ファイル群 • Oracle Databaseの処理の仕組み • Oracle Databaseへの接続の仕組み • 処理の流れ 2. メモリー設定の考え方 3. ファイル群の詳細 Agenda Copyright © 2023, Oracle and/or its affiliates 2
  2. Copyright © 2023, Oracle and/or its affiliates 3 Oracle Databaseの概要

    Oracle Databaseの内部構造 Oracle Databaseの処理の仕組み
  3. • クライアントはSQLを使ってデータベースに処理を要求 • Oracle Databaseはクライアントの要求に従ってデータ処理を実行 • データはストレージに格納され、Oracle Databaseによって管理される Oracle Databaseの処理の仕組み

    Copyright © 2023, Oracle and/or its affiliates 4 クライアント SQL*Plus(SQL実行ツール) から接続(主に開発・管理) アプリケーションサーバー上の プログラムから接続 Oracle Database ストレージ サーバー クライアントからのリクエストに従い、 ディスクからデータを読み込み、 データを検索、変更する。 データを 格納 データの 取り出し SQL 処理実行 (検索・更新)
  4. • Oracle Databaseを構成するコンポーネント • Oracleインスタンス:Oracleサーバー上で確保されるメモリー+プロセス • Oracleデータベース:ストレージ内に格納されたデータ(ファイル群) Oracle Databaseの内部構造 Copyright

    © 2023, Oracle and/or its affiliates 5 ファイル群 メモリー プロセス群 Oracleインスタンス: ・データを操作するOracleの「エンジ ン」部分 ・データを検索、更新する際に必要 なメモリー領域+書込みなどを行う プロセス群で構成 Oracle データベース Oracleデータベース: ・データの格納先 ・データの種類によっていくつかのファ イルが存在する Oracle インスタンス
  5. • Oracle Databaseを構成するコンポーネント • Oracleインスタンス:Oracleサーバー上で確保されるメモリー+プロセス • Oracleデータベース:ストレージ内に格納されたデータ(ファイル群) Oracle Databaseの内部構造 Copyright

    © 2023, Oracle and/or its affiliates 6 Oracleインスタンス SGAと呼ばれる共有メモリー領域と 一連のバックグランド・プロセスで構成 Oracleデータベース ディスク上に配置された、データを 格納する一連のファイル ファイル群 メモリー プロセス群 データの格納先 読み込み 書き込み キャッシュ → 検索/更新 等
  6. プロセス群→メモリー→ファイル Oracle Databaseのプロセスの種類 • リスナー・プロセス:Oracle Databaseへの接続リクエストを転送 • サーバー・プロセス:ユーザ毎に起動され、リクエストされた処理を実行 • バックグラウンド・プロセス:ディスクへの変更反映などの内部処理を実行

    Oracle Databaseのプロセス Copyright © 2023, Oracle and/or its affiliates 7 SGA PGA リスナー プロセス PGA サーバー プロセス PGA サーバー プロセス PGA PGA サーバー プロセス ユーザごとに起動され、ユーザー からリクエストされた処理を実行 (フォアグラウンド・プロセス) 接続要求を サーバープロセスへ転送 ユーザーの処理とは非同期に 内部作業を行うプロセス群 ユーザー プロセス サーバー プロセス キャッシュ → 検索/更新 等 バックグラウンド・ プロセス PGA バックグラウンド・ プロセス PGA バックグラウンド・ プロセス PGA バックグラウンド・ プロセス
  7. 参考)主なバッググラウンド・プロセス Copyright © 2023, Oracle and/or its affiliates 8 種類

    概要 データベース・ライター (DBWn) データベース・バッファ・キャッシュ上で更新されたデータを定期的にデータ・ファイルに書き込む(バッファキャッシュとデータファイルを同期する) ログ・ライター (LGWR) REDOログ・バッファ上のREDOログ・エントリを定期的にREDOログ・ファイルに書き込む(COMMIT時など) チェックポイント (CKPT) チェックポイント発生時にDBWnにデータベース全てのデータ・ファイルと制御ファイルを更新をするように指示を送る。 システム・モニター (SMON) インスタンス障害後、再起動の際に自動的にインスタンス・リカバリを行う プロセス・モニター (PMON) サーバー・プロセスの監視を行い、ユーザ・プロセス障害時にクリーンアップを行う (ロックの解放、ロールバックなど) アーカイバ・プロセス (ARCn) REDOログが一杯になるか、オンラインREDOログの切替えが発生した場合に、REDOログ・ファイルをアーカイブ記憶域にコピーする。 SGA DBWn LGWR SMON PMON ARCn CKPT ... Oracle Database データベース・リファレンス 19c 第IV部 付録F バックグラウンド・プロセス
  8. • Oracle Databaseのメモリーの種類 • システム・グローバル領域(SGA): 表や実行計画をキャッシュし、ユーザー間で共有することによってディスクI/Oを減らし、効率を上げ るためのメモリー領域 • プログラム・グローバル領域(PGA): プロセスごとに確保される領域

    Oracle Databaseのメモリー Copyright © 2023, Oracle and/or its affiliates 9 SGA リスナー プロセス PGA サーバー プロセス PGA サーバー プロセス PGA PGA サーバー プロセス ユーザー プロセス キャッシュ → 検索/更新 等 サーバー プロセス プロセス群→メモリー→ファイル PGA バックグラウンド・ プロセス PGA バックグラウンド・ プロセス PGA バックグラウンド・ プロセス PGA バックグラウンド・ プロセス
  9. システム・グローバル領域(SGA) データベース・バッファ・キャッシュ データベースから取得されたデータ・ブロック(表、索引など)をキャッシュする領域 REDOログ・バッファ ディスク(REDOログ・ファイル)に書き込むまでREDO情報をキャッシュ(インスタンス・リカバリに使用)する領域 共有プール 一度実行されたSQL文の解析に使うデータや実行計画、およびユーザ間で共有される様々な構造をキャッシュする領 域(ライブラリ・キャッシュ、データ・ディクショナリ・キャッシュ) ラージ・プール 共有サーバー接続、パラレル問合せ、Recovery

    Manager (RMAN)などが利用する領域 Javaプール データベース内でJavaを実行する場合に使用する領域 Streamプール Oracle Streams、Advanced Queuing(AQ)、Data Pump、Oracle GoldenGate等で使用する領域 IM列ストア Oracle Database In-MemoryのIM列ストアを格納する領域 参考)Oracle Databaseのメモリー Copyright © 2023, Oracle and/or its affiliates 10 PGA サーバー プロセス SGA データベース・ バッファ・ キャッシュ REDOログ・ バッファ 共有プール ラージ・ プール Java プール Stream プール IM列 ストア 検索対象 データ・ブロック 変更履歴 A → B COMMIT SQL文 実行計画
  10. プログラム・グローバル領域(PGA) セッション情報 ※1 セッションの対するユーザーの権限に関する情報 カーソル状態 セッションで使用している様々なカーソルの処理段階を示す スタック空間 セッション変数が入っている空間 ソート領域 データのソート処理に使用。この領域のサイズを超える処理は一時表領域を利用

    SORT_AREA_SIZE, HASH_AREA_SIZE, BITMAP_MERGE_AREA_SIZE, CREATE_BITMAP_AREA_SIZE 参考)Oracle Databaseのメモリー Copyright © 2023, Oracle and/or its affiliates 11 PGA サーバー プロセス PGA サーバー プロセス ※1: データベース・セッションは、データベースに対する現在のユーザー・ログインの状況を示す、データベース・インスタンス・メモリー内の論理エンティティ SGA データベース・ バッファ・ キャッシュ REDOログ・ バッファ 共有プール ラージ・ プール Java プール Stream プール IM列 ストア 検索対象 データ・ブロック 変更履歴 A → B COMMIT SQL文 実行計画
  11. Oracle Databaseのファイル群 • データファイル: ユーザーが利用するデータ(表など)を格納 • REDOログ・ファイル: 変更履歴(DML、DDLなど)を格納 • 制御ファイル:

    データベース構造、変更反映状況などの制御情報を格納 • その他 Oracle Databaseのファイル群 Copyright © 2023, Oracle and/or its affiliates 12 SGA PGA サーバー プロセス PGA サーバー プロセス PGA PGA サーバー プロセス キャッシュ → 検索/更新 等 サーバー プロセス データ・ファイル REDOログ・ ファイル 制御ファイル プロセス群→メモリー→ファイル PGA バックグラウンド・ プロセス PGA バックグラウンド・ プロセス PGA バックグラウンド・ プロセス PGA バックグラウンド・ プロセス
  12. • データベースの内部構造 • メモリー:SGA / PGA • プロセス:サーバー・プロセス / バックグラウンド・プロセス

    • ファイル群:データ・ファイル / 制御ファイル / REDOログ・ファイル Oracle Databaseの内部構造 Copyright © 2023, Oracle and/or its affiliates 13 13 制御ファイル データ・ファイル REDOログ・ ファイル データベース・ バッファ・キャッシュ REDOログ・バッファ 共有プール SGA ファイル群 Oracleインスタンス Oracleデータベース PGA サーバー プロセス PGA サーバー プロセス PGA PGA サーバー プロセス サーバー プロセス PGA バックグラウンド・ プロセス PGA バックグラウンド・ プロセス PGA バックグラウンド・ プロセス PGA バックグラウンド・ プロセス
  13. 1. Oracle Databaseの概要 • Oracle Databaseの内部構造 • プロセス • メモリー

    • ファイル群 • Oracle Databaseの処理の仕組み • Oracle Databaseへの接続の仕組み • 処理の流れ 2. メモリー設定の考え方 3. ファイル群の詳細 Agenda Copyright © 2023, Oracle and/or its affiliates 14
  14. • SQL実行ツール:SQL*Plus、SQL Developer • アプリケーション:Java、.NET等 Oracle Databaseのクライアント Copyright © 2023,

    Oracle and/or its affiliates 15 アプリケーション サーバー SQL*Plus SQL Developer Oracle標準のSQL実行ツール クライアント SGA PGA PGA PGA PGA サーバー プロセス PGA PGA サーバー プロセス サーバー プロセス データ・ファイル REDOログ・ ファイル 制御ファイル リスナー プロセス Oracle Database アプリケーション SQL バックグラウンド・ プロセス バックグラウンド・ プロセス バックグラウンド・ プロセス
  15. • クライアントは接続するデータベースの情報を設定ファイルに記述 • 接続時には、リスナーを経由してデータベースに接続 Oracle Databaseへの接続の仕組み Copyright © 2023, Oracle

    and/or its affiliates 16 クライアント SGA PGA サーバー プロセス PGA PGA サーバー プロセス サーバー プロセス データ・ファイル REDOログ・ ファイル 制御ファイル リスナー プロセス Oracle Database クライアントとOracle Databaseの接続 ユーザー プロセス ①接続要求 ② プロセス 生成 ③ 接続確立 接続設定ファイル ORACLE_HOME\network\admin\tnsnames.ora orcl= (DESCRIPTION= (ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.10)(PORT=1521)) (CONNECT_DATA= (SERVICE_NAME=orcl.pub01.vcn01.oraclevcn.com)) ) CONNECT ユーザー名/パスワード@orcl SQL*Plus PGA PGA PGA バックグラウンド・ プロセス バックグラウンド・ プロセス バックグラウンド・ プロセス
  16. • クライアントは接続するデータベースの情報を設定ファイルに記述 • 接続時には、リスナーを経由してデータベースに接続 Oracle Databaseへの接続の仕組み Copyright © 2023, Oracle

    and/or its affiliates 17 SQL Developer クライアント SGA PGA サーバー プロセス PGA PGA PGA データ・ファイル REDOログ・ ファイル 制御ファイル リスナー プロセス Oracle Database クライアントとOracle Databaseの接続 ユーザー プロセス ①接続要求 ② プロセス 生成 ③ 接続確立 CONNECT ユーザー名/パスワード@orcl Oracleデータベース クライアントからの接続の流れ ① クライアント側がHOST名(IPアドレス)、ポート番号、サービス名などを指定し、リスナーに接続を要求する ② リスナーは接続を確立し、サーバー・プロセスを生成して、接続アドレスを渡す ③ 以後、ユーザー・プロセスとサーバ・プロセスが直接やり取り行う。 Oracleインスタンス
  17. • クライアント側に Oracle Clientをインストールすることで、Oracle Net Servicesもインストールされる • Oracle Net Servicesにて以下の機能を提供

    • プロトコルの差異を吸収 / ネットワーク暗号化 / グローバリゼーション・サポート / キャラクタ・セットの変換 etc. Oracle Net Services (SQL*Net) Copyright © 2023, Oracle and/or its affiliates 18 SGA PGA サーバー プロセス PGA PGA サーバー プロセス サーバー プロセス データ・ファイル REDOログ・ ファイル 制御ファイル リスナー プロセス Oracle Database アプリケーション サーバー SQL*Plus SQL Developer Oracle標準のSQL実行ツール クライアント アプリケーション SQL Oracle Net Services Oracle Net Services クライアントとOracle Database間はOracle Net Servicesを介して通信をおこなう PGA バックグラウンド・ プロセス PGA バックグラウンド・ プロセス PGA バックグラウンド・ プロセス
  18. 参考)代表的なアプリケーション開発言語とミドルウェアの関係 Pro*C Pro*COBOL Visual Basic/ASP/Access .VB.NET/ASP.NET/C# OLE DB ODBC OLE

    DB .NET Bridge .NET Framework (ADO.NET) ADO ODP.NET unmanaged ODBC SQLLIB C (OCI) COM JDK JDBC Thick (Type2) JDBC Thin (Type4) C/COBOL クライアント側 サーバー側 Oracle Net Services (Oracle Call Interface :OCI) Java ミドルウェア 開発・実行環境、APIなど Windows系OS 環境固有 ※ ※ Windows以外の環境でODBCドライバが 利用されていることもあります ODP.NET managed その他の主要な開発言語 (JavaScript, PHP etc.)の ドライバーもこちら Python Oracle Net Services python- oracledb New: 2022/5/26 OCI Copyright © 2023, Oracle and/or its affiliates 19
  19. 1. Oracle Databaseの概要 • Oracle Databaseの内部構造 • プロセス • メモリー

    • ファイル群 • Oracle Databaseの処理の仕組み • Oracle Databaseへの接続の仕組み • 処理の流れ 2. メモリー設定の考え方 3. ファイル群の詳細 Agenda Copyright © 2023, Oracle and/or its affiliates 20
  20. Oracle Databaseの処理の仕組み Copyright © 2023, Oracle and/or its affiliates 21

    3パターンの処理の仕組みとバックグラウンド・プロセスの動き DBWn クライアント Ⓐ SELECT A FROM 表1; Ⓑ UPDATE 表1 A⇒B; Ⓒ COMMIT; ユーザー プロセス サーバー プロセス 制御ファイル データ・ファイル REDOログ・ファイル LGWR CKPT REDOログ・ バッファ 共有プール データベース・ バッファ・キャッシュ
  21. Oracle Databaseの処理の仕組み Copyright © 2023, Oracle and/or its affiliates 22

    Ⓐ問い合わせ処理の仕組み DBWn クライアント ユーザー プロセス 制御ファイル データ・ファイル REDOログ・ファイル LGWR CKPT SELECT A FROM 表1; UPDATE 表1 A⇒B; COMMIT; REDOログ・ バッファ 共有プール データベース・ バッファ・キャッシュ サーバー プロセス
  22. Oracle Databaseの処理の仕組み Copyright © 2023, Oracle and/or its affiliates 23

    Ⓐ問い合わせ処理の仕組み DBWn クライアント ユーザー プロセス 制御ファイル データ・ファイル REDOログ・ファイル LGWR CKPT ① SELECT A FROM 表1; UPDATE 表1 A⇒B; COMMIT; REDOログ・ バッファ 共有プール データベース・ バッファ・キャッシュ サーバー プロセス
  23. Oracle Databaseの処理の仕組み Copyright © 2023, Oracle and/or its affiliates 24

    Ⓐ問い合わせ処理の仕組み DBWn クライアント ユーザー プロセス 共有プール 制御ファイル データ・ファイル REDOログ・ファイル LGWR CKPT ① SQL文 解析情報 実行計画 データ・ディクショナリ ② SELECT A FROM 表1; UPDATE 表1 A⇒B; COMMIT; REDOログ・ バッファ データベース・ バッファ・キャッシュ サーバー プロセス
  24. Oracle Databaseの処理の仕組み Copyright © 2023, Oracle and/or its affiliates 25

    Ⓐ問い合わせ処理の仕組み DBWn クライアント ユーザー プロセス 共有プール データベース・ バッファ・キャッシュ REDOログ・ バッファ 制御ファイル データ・ファイル REDOログ・ファイル LGWR CKPT ① SQL文 解析情報 実行計画 データ・ディクショナリ ② A ③ A SELECT A FROM 表1; UPDATE 表1 A⇒B; COMMIT; サーバー プロセス
  25. Oracle Databaseの処理の仕組み Copyright © 2023, Oracle and/or its affiliates 26

    Ⓐ問い合わせ処理の仕組み DBWn クライアント ユーザー プロセス 共有プール データベース・ バッファ・キャッシュ REDOログ・ バッファ 制御ファイル データ・ファイル REDOログ・ファイル LGWR CKPT ① SQL文 解析情報 実行計画 データ・ディクショナリ ② A ③ A ④ SELECT A FROM 表1; UPDATE 表1 A⇒B; COMMIT; サーバー プロセス
  26. Oracle Databaseの処理の仕組み Copyright © 2023, Oracle and/or its affiliates 27

    Ⓑ更新処理の仕組み(問合せ処理からの継続) DBWn クライアント ユーザー プロセス 制御ファイル データ・ファイル REDOログ・ファイル LGWR CKPT SELECT A FROM 表1; UPDATE 表1 A⇒B; COMMIT; ① REDOログ・ バッファ 共有プール データベース・ バッファ・キャッシュ サーバー プロセス
  27. Oracle Databaseの処理の仕組み Copyright © 2023, Oracle and/or its affiliates 28

    Ⓑ更新処理の仕組み(問合せ処理からの継続) DBWn クライアント ユーザー プロセス 共有プール データベース・ バッファ・キャッシュ REDOログ・ バッファ 制御ファイル データ・ファイル REDOログ・ファイル LGWR CKPT SQL文 解析情報 実行計画 データ・ディクショナリ ② A A SELECT A FROM 表1; UPDATE 表1 A⇒B; COMMIT; ① サーバー プロセス
  28. Oracle Databaseの処理の仕組み Copyright © 2023, Oracle and/or its affiliates 29

    Ⓑ更新処理の仕組み(問合せ処理からの継続) DBWn クライアント ユーザー プロセス 共有プール データベース・ バッファ・キャッシュ REDOログ・ バッファ 制御ファイル データ・ファイル REDOログ・ファイル LGWR CKPT SQL文 解析情報 実行計画 データ・ディクショナリ ② A A SELECT A FROM 表1; UPDATE 表1 A⇒B; COMMIT; 変更履歴 A→B 変更前データ A ③ ③ B ① サーバー プロセス
  29. Oracle Databaseの処理の仕組み Copyright © 2023, Oracle and/or its affiliates 30

    Ⓑ更新処理の仕組み(問合せ処理からの継続) DBWn クライアント ユーザー プロセス 共有プール データベース・ バッファ・キャッシュ REDOログ・ バッファ 制御ファイル データ・ファイル REDOログ・ファイル LGWR CKPT SQL文 解析情報 実行計画 データ・ディクショナリ ② A A SELECT A FROM 表1; UPDATE 表1 A⇒B; COMMIT; 変更履歴 A→B B 変更前データ A ③ ③ ④ 結果(更新しました) ① サーバー プロセス
  30. Oracle Databaseの処理の仕組み Copyright © 2023, Oracle and/or its affiliates 31

    Ⓒコミット処理(更新処理からの継続) DBWn クライアント ユーザー プロセス 共有プール データベース・ バッファ・キャッシュ REDOログ・ バッファ 制御ファイル データ・ファイル REDOログ・ファイル CKPT SQL文 解析情報 実行計画 データ・ディクショナリ A A SELECT A FROM 表1; UPDATE 表1 A⇒B; COMMIT; 変更履歴 A→B B 変更前データ A LGWR A→B ① SCN割り当て ※ SCN: システム変更番号 サーバー プロセス
  31. Oracle Databaseの処理の仕組み Copyright © 2023, Oracle and/or its affiliates 32

    Ⓒコミット処理(更新処理からの継続) DBWn クライアント ユーザー プロセス 共有プール データベース・ バッファ・キャッシュ REDOログ・ バッファ 制御ファイル データ・ファイル REDOログ・ファイル CKPT SQL文 解析情報 実行計画 データ・ディクショナリ A A SELECT A FROM 表1; UPDATE 表1 A⇒B; COMMIT; 変更履歴 A→B B 変更前データ A LGWR A→B ① ②完了 サーバー プロセス
  32. Oracle Databaseの処理の仕組み Copyright © 2023, Oracle and/or its affiliates 33

    その他、バックグラウンド・プロセスが非同期で実行 クライアント ユーザー プロセス 共有プール データベース・ バッファ・キャッシュ REDOログ・ バッファ 制御ファイル データ・ファイル REDOログ・ファイル CKPT A B SELECT A FROM 表1; UPDATE 表1 A⇒B; COMMIT; B 変更前データ A LGWR A DBWn ファイル・ヘッダー の更新 サーバー プロセス A→B
  33. Oracle Databaseの処理の仕組み Copyright © 2023, Oracle and/or its affiliates 34

    3パターンの処理の仕組みとバックグラウンド・プロセスの動き DBWn クライアント ① SELECT A FROM 表1; ② UPDATE 表1 A⇒B; ③ COMMIT; ユーザー プロセス 共有プール 制御ファイル データ・ファイル REDOログ・ファイル LGWR CKPT REDOログ・ バッファ データベース・ バッファ・キャッシュ サーバー プロセス
  34. 1. Oracle Databaseの概要 • Oracle Databaseの内部構造 • プロセス • メモリー

    • ファイル群 • Oracle Databaseの処理の仕組み • Oracle Databaseへの接続の仕組み • 処理の流れ 2. メモリー設定の考え方 3. ファイル群の詳細 Agenda Copyright © 2023, Oracle and/or its affiliates 35
  35. メモリー管理の重要性 メモリー不足は深刻なパフォーマンス劣化を引き起こす 処理傾向に応じて、各メモリーコンポーネントに必要なメモリー領域を割り当てる必要がある Oracle Databaseのメモリー管理 Copyright © 2023, Oracle and/or

    its affiliates 37 SGA PGA サーバー プロセス データベース・ バッファ・ キャッシュ REDOログ・ バッファ 共有プール ラージ・ プール Java プール Stream プール IM列 ストア PGA サーバー プロセス 【PGAが不足すると...】 メモリー内でソート処理ができ ず、ディスク・ソートが発生する ためソート、結合などの処理速 度が大きく低下 【データベース・バッファ・キャッシュが不足する と...】 一度キャッシュしたブロックをファイルに書き出し、 次回アクセス時、再度ディスクからブロックを読 み 込む必要がある 【共有プールが不足すると...】 一度読み込んだデータ・ディクショナリ 情報や、一度立てた実行計 画がフラッシュ(消去)されるため、 何度もデータ・ディクショナリの情 報をディスクから読んだり 実行計画を使いまわせず、再解析する 必要がある
  36. システム・グローバル領域(SGA) データベース・バッファ・キャッシュ データベースから取得されたデータ・ブロック(表、索引など)をキャッシュする領域 REDOログ・バッファ ディスク(REDOログ・ファイル)に書き込むまでREDO情報をキャッシュ(インスタンス・リカバリに使用)する領域 共有プール 一度実行されたSQL文の解析に使うデータや実行計画、およびユーザ間で共有される様々な構造をキャッシュする領 域(ライブラリ・キャッシュ、データ・ディクショナリ・キャッシュ) ラージ・プール 共有サーバー接続、パラレル問合せ、Recovery

    Manager(RMAN)などが利用する領域 Javaプール データベース内でJavaを実行する場合に使用する領域 Streamプール Oracle Streams、Advanced Queuing(AQ)、Data Pump、Oracle GoldenGate等で使用する領域 IM列ストア Oracle Database In-MemoryのIM列ストアを格納する領域 参考)Oracle Databaseのメモリー Copyright © 2023, Oracle and/or its affiliates 38 PGA サーバー プロセス SGA データベース・ バッファ・ キャッシュ REDOログ・ バッファ 共有プール ラージ・ プール Java プール Stream プール IM列 ストア 検索対象 データ・ブロック 変更履歴 A → B COMMIT SQL文 実行計画 再掲
  37. プログラム・グローバル領域(PGA) セッション情報 ※1 セッションの対するユーザーの権限に関する情報 カーソル状態 セッションで使用している様々なカーソルの処理段階を示す スタック空間 セッション変数が入っている空間 ソート領域 データのソート処理に使用。この領域のサイズを超える処理は一時表領域を利用

    SORT_AREA_SIZE, HASH_AREA_SIZE, BITMAP_MERGE_AREA_SIZE, CREATE_BITMAP_AREA_SIZE 参考)Oracle Databaseのメモリー Copyright © 2023, Oracle and/or its affiliates 39 PGA サーバー プロセス PGA サーバー プロセス ※1: データベース・セッションは、データベースに対する現在のユーザー・ログインの状況を示す、データベース・インスタンス・メモリー内の論理エンティティ SGA データベース・ バッファ・ キャッシュ REDOログ・ バッファ 共有プール ラージ・ プール Java プール Stream プール IM列 ストア 検索対象 データ・ブロック 変更履歴 A → B COMMIT SQL文 実行計画 再掲
  38. (参考)手動メモリー管理 手動共有メモリー管理 自動共有メモリー管理 自動メモリー管理 参考)メモリーの管理方法 Copyright © 2023, Oracle and/or

    its affiliates 40 SGA sga_target (共有メモリーサイズ) 共有プール shared_pool_size Javaプール java_pool_size ラージプール large_pool_size REDOログ・バッファ log_buffer_size バッファキャッシュ db_block_buffers PGA pga_aggregate_target PGA pga_aggregate_target memory_target SGA+PGA 共有プール shared_pool_size Javaプール java_pool_size ラージプール large_pool_size REDOログ・バッファ log_buffer_size バッファキャッシュ db_block_buffers sort_area_size hash_area_size bitmap_merge_area_size create_bitmap_area_size 再掲
  39. • 自動メモリー管理:SGAとインスタンスPGAのサイズを自動 的に調整する。 • SGAとPGAの合計としたいサイズをMEMORY_TARGETに設 定する。 • 事実上、データベースが使用するすべてのメモリー領域が 自動的に調整され、メモリーサイズ調整に関わる運用負 荷を大幅に軽減。

    • 自動共有メモリー管理:SGAの各コンポーネントに割り当て るメモリーサイズを自動調整する。 • SGA_TARGETにSGA全体のサイズを指定する。 • 自動PGAメモリー管理:各プロセスのPGAを自動調整する 機能。 • PGA_AGGREGATE_TARGETにPGAの全体の合計サイズの 目標値を設定する。 メモリーサイズの自動調整機能 Copyright © 2023, Oracle and/or its affiliates 41 PGA SGA サーバー搭載メモリー 自動PGAメモリー管理 pga_aggregate_target 自動共有メモリー管理 sga_target ソート領域 共有プール DBバッファー 自動メモリー管理 MEMORY_TARGET Oracleデータベースインスタンスが自動的に管理及びチューニングできる機能
  40. 自動共有メモリー管理 によるメモリー割り当て Oracle Databaseが自動で、細かいメモリー割り当てを実行 適切なメモリーの割り当て Copyright © 2023, Oracle and/or

    its affiliates 42 PGA SGA その他 OS利用 サーバー搭載メモリー pga_aggregate_target sga_target ソート領域 共有プール DBバッファー 【例えば、OLTP系の処理】 • 少量の行しかアクセスしない • 大量のユーザーが同時に実行 • 同じSQL文を実行 • SGA(共有メモリー)を大きめに設定 • 実行計画の再利用 【例えば、DWH系の処理】 • 大量のデータにアクセスし、一括処理 • ユーザー数は少ない • PGA(ソート領域)を大きめに設定 • メモリーを使ったソート処理 CPU CPU 時間 時間 SGA PGA サーバー プロセス 共有プール SQL文 実行計画 ソート領域
  41. 1. Oracle Databaseの概要 • Oracle Databaseの内部構造 • プロセス • メモリー

    • ファイル群 • Oracle Databaseの処理の仕組み • Oracle Databaseへの接続の仕組み • 処理の流れ 2. メモリー設定の考え方 3. ファイル群の詳細 Agenda Copyright © 2023, Oracle and/or its affiliates 43
  42. • データベース・ファイルの種類 • データ・ファイル:ユーザが利用するデータ(表など)を格納 • REDOログ・ファイル:変更履歴(DML,DDLなど)を格納 • 制御ファイル:データベース構造、変更反映状況などの制御情報を格納 Oracle Databaseのファイル群

    Copyright © 2023, Oracle and/or its affiliates 45 45 SGA ファイル群 PGA サーバー プロセス PGA サーバー プロセス PGA PGA サーバー プロセス サーバー プロセス 初期化 パラメータ・ファイル アラート・ ログファイル アーカイブREDO ログファイル 制御ファイル データ・ファイル REDOログ・ ファイル PGA バックグラウンド・ プロセス PGA バックグラウンド・ プロセス PGA バックグラウンド・ プロセス PGA バックグラウンド・ プロセス
  43. 1. Oracle Databaseを構成するファイル群 2. その他、直接Oracle Databaseを構成するファイル群ではないが、運用管理上必要となるファイル群 Oracle Databaseを構成するファイル Copyright ©

    2023, Oracle and/or its affiliates 46 種類 概要 データファイル ユーザが利用するデータ(表など)を格納 制御ファイル データベースの制御情報を格納(データ・ファイルの書き込みタイミング、RMANのリポジトリ etc.) REDOログファイル 変更履歴(DML,DDLなど)を格納 ファイルの分類 種類 概要 アーカイブREDOログファイル 循環して利用されるREDOログ・ファイルの古い変更履歴のコピー(アーカイブ) 初期化パラメータ・ファイル Oracleインスタンスの構成(メモリー、プロセスなど)を記述したファイル データベースを起動する際に読み込み、記述されたパラメータ設定を元にインスタンスを起動 アラート・ログ・ファイル Oracleデータベース稼働中の様々な情報(エラーメッセージ、管理作業)を記録
  44. データ格納先のファイルを「表領域」という単位で管理 • 表領域は表の論理的な格納先 • データは物理的にはデータ・ファイルに格納される • 表領域は1つ以上のデータ・フィルから構成される データベースには、目的ごとに複数の表領域を作成 • アプリケーション単位(売り上げアプリケーション用/人事アプリケーション用等)

    • メンテナンス単位(バックアップ単位など) • ディスクI/Oの分散を考慮して配置 データ・ファイルと表領域 Copyright © 2023, Oracle and/or its affiliates 47 表領域 HR 表領域 Sales 表領域: 表の論理格納先 表などのスキーマ・オブジェクトをまとめて管理する 論理グループ データ・ファイル データ・ファイル データ・ファイル: データの格納先 表などのスキーマ・オブジェクトのデータをまとめて格納 対応付け 1 .. n ※ bigfile表領域の場合の対応付けは 1:1 ※
  45. データベースが動作する為に、内部的に使用する表領域 ・ SYSTEM表領域: 内部表(データ・ディクショナリ)などを格納する表領域 ・ SYSAUX表領域: オプションの機能が仕様するデータを格納する内部使用領域 ・ USERS表領域: ユーザー表用に用意されているデフォルト表領域

    ・ TEMP表領域: ソートなどで一時的に使用するデータを置く表領域 ・ UNDO表領域: データの変更(DML)時、変更前データを置く表領域 参考)Oracle Databaseの事前定義表領域 Copyright © 2023, Oracle and/or its affiliates 48 クライアント ユーザー プロセス 共有プール データベース・ バッファ・キャッシュ REDOログ・ バッファ 制御ファイル UNDO REDOログ・ ファイル SQL文 解析情報 実行計画 A サーバー プロセス 変更履歴 A→B B 変更前データ A SYSAUX SYSTEM USERS TEMP A B DBWn データ・ ディクショナリ ディスク・ ソート
  46. smallfile表領域(デフォルト) • 複数のデータファイルを束ねて利用可能 (最大1023 個まで) bigfile表領域(10g〜) • 単一の非常に大きなデータファイルのみで構成 • ファイル管理が簡素化できる

    • ローカル管理表領域かつ自動セグメント領域管理で あること • Oracle Automatic Storage Management (ASM) 上での 利用を推奨 参考)bigfile表領域 Copyright © 2023, Oracle and/or its affiliates 49 CREATE BIGFILE TABLESPACE XXX …… 【参考】物理データベースの制限 Oracle Databaseのデータファイルの制限: • 1つのデータファイルあたり 2^22 -1 = 4,194,303 block → smallfile表領域では、ブロック・サイズが 8k の場合、1つのデータファ イルに 32 GB のデータを格納できる それ以上の容量の表領域を作成したい場合は複数のデータファイ ルを束ねる必要がある → bigfile表領域では、ブロックサイズが 8k の場合、32TB までデータを 格納できる ※ Oracle Base Database ServiceのUSERS表領域は smallfile表領域のため、 大量データの格納するには独自の bigfile表領域を用意すべき db_block_size データファイルの最大サイズ 2k byte 約 8 G byte ( 8,589,932,544 byte) 4k byte 約 16 G byte ( 17,179,865,088 byte) 8k byte 約 32 G byte ( 34,359,730,176 byte) 16k byte 約 64 G byte ( 68,719,460,352 byte)
  47. 制御ファイル Copyright © 2023, Oracle and/or its affiliates 50 データベース情報:データベース名、識別子

    データ・ファイル情報:データ・ファイル名、現在の状態 REDOログ・ファイル情報:REDOログ・ファイルの名前と場所、最新の REDOログファイルの情報、アーカイブ情報等 その他:チェックポイント情報、バックアップ情報(RMANリポジトリ) データベースに関わる様々な管理情報を格納 制御ファイル • データベースがオープンされる前に参照され、制御ファイル情報をもとにREDOログファイル、データファイルが利用可能に される。 • データベースの構造に関する情報を格納 • データベースの名前 • REDOログファイルおよびデータ・ファイルの名前と場所、ステータス • チェックポイント情報:メモリー上の情報をいつ、どこまでファイルに反映したか等 • 重要なファイルの為、多重化を推奨。
  48. データベースの変更履歴(REDOデータ)を記録するファイル • データベースへの変更履歴(REDOデータ)を格納 • 障害時の復旧に使用 • 全てのオラクルデータベースには2つ以上のREDOログファイルがある。 • ファイルは循環運用される •

    書き込みタイミング • COMMIT時 • REDOログ・バッファがいっぱいになった時 • データベース・ライターが書き込む前など REDOログ・ファイル 51 50 51 52 REDOログファイル ログスイッチ ログスイッチ 循環して上書き Copyright © 2023, Oracle and/or its affiliates
  49. • 一連のREDOデータを保管するために、上書きされる前にREDOデータをコピーして生成されるファイルのこと。 • データベースを最新状態に復旧するために必要。 • アーカイブログファイルを出力する運用モードをARCHIVELOGモードと呼ぶ。 • アーカイバプロセス(ARCn)により出力される。 アーカイブREDOログ・ファイル Copyright

    © 2023, Oracle and/or its affiliates 52 50 51 52 REDOログファイル 50 ログスイッチ ログスイッチ 50 50 50 REDOログを上書き前に アーカイブする アーカイブ・ REDOログ・ファイル いっぱいになったREDOログファイルのオフラインコピー アーカイバ プロセス 50→53 ログスイッチ
  50. データベース・インスタンスに、メモリー割り当て、制限、デフォルト値、必要なファイルやディレクトリなどを指定 • データベースは、インスタンスを起動するために、インスタンス構成パラメータ(初期化パラメータ)を 以下のいずれかのファイルより読み込む • デフォルトでは $ORACLE_HOME/dba (Windowsの場合は $ORACLE_HOME\database) ディレクトリに存在

    • 初期化パラメータ SPFILE に指定していれば、SPFILE はサーバー上のどこでも配置できる PFILEとSPFILEの相互変換 SPFILE利用時のパラメータの動的な変更 【補足】初期化パラメータ Copyright © 2023, Oracle and/or its affiliates 53 初期化パラメータ・ファイル(PFILE): テキスト形式(テキスト・エディターで変更可能) パラメータ変更にはインスタンスの再起動が必要 サーバー・パラメータ・ファイル(SPFILE): バイナリ形式(テキスト・エディターで変更不可) 動的にパラメータ値を変更可能 Database Configuration Assistant (DBCA)はPFILEからSPFILEを作成 CREATE SPFILE='/u01/oracle/dbs/test_spfile.ora' FROM PFILE='/u01/oracle/dbs/test_init.ora'; CREATE PFILE='/u01/oracle/dbs/test_init.ora' FROM SPFILE ='/u01/oracle/dbs/test_spfile.ora '; ALTER SYSTEM SET SEC_MAX_FAILED_LOGIN_ATTEMPTS=3 COMMENT='Reduce from 10 for tighter security.' SCOPE=SPFILE; SCOPE=SPFILE SPFILEにのみ変更が適用。次回インスタンス起動時に有効 SCOPE=MEMORY 現行インスタンスに即時適用。次回インスタンス起動時には変更が無視 SCOPE=BOTH SPFILEと現行インスタンスに即時適用。次回インスタンス起動時も有効
  51. データベース操作中に発生したエラー・メッセージと例外についての 重要な情報が記録される • 発生したすべての内部エラー(ORA-00600)、ブロック破損エラー(ORA- 01578)およびデッドロック・エラー(ORA-00060) • いくつかのCREATE、ALTERおよびDROP文などの管理操作、 およびSTARTUP、SHUTDOWNおよびARCHIVELOG文 • 共有サーバーとディスパッチャ・プロセスの機能に関係するメッセージと

    エラー • マテリアライズド・ビューの自動リフレッシュ中に発生したエラー • データベースとインスタンスの起動時点でデフォルト以外の値があったす べての初期化パラメータの値 アラート・ログ・ファイルは、その他のログファイルを含むすべての診断 データとともに、自己診断リポジトリ(ADR: Automatic Diagnostic Repository)に格納されます。 • 初期化パラメータ: diagnostic_dest の場所にADRは配置 【補足】アラート・ログ・ファイル Copyright © 2023, Oracle and/or its affiliates 54 Starting ORACLE instance (normal) (OS id: 9554) 2023-11-16T01:23:36.767912+00:00 **************************************************** Sys-V shared memory will be used for creating SGA **************************************************** 2023-11-16T01:23:36.769447+00:00 ********************************************************************** 【略】 Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.17.0.0.0. ORACLE_HOME: /u01/app/oracle/product/19.0.0.0/dbhome_1 System name: Linux Node name: test02 Release: 4.14.35-2047.510.5.5.el7uek.x86_64 Version: #2 SMP Fri Jan 28 08:33:42 PST 2022 Machine: x86_64 Using parameter settings in server-side spfile +DATA/cdb03_q9k_sjc/spfile.ora System parameters with non-default values: processes = 200 cpu_count = 2 _enable_NUMA_support = FALSE use_large_pages = "ONLY" pga_aggregate_limit = 3328M 【略】 2023-11-16T01:23:37.847680+00:00 ============================================================ NOTE: PatchLevel of this instance 0 ============================================================ Starting background process PMON 2023-11-16T01:23:38.635099+00:00 PMON started with pid=2, OS id=10322 【略】
  52. • データベースの内部構造 • メモリー:SGA / PGA • プロセス:サーバー・プロセス / バックグラウンド・プロセス

    • ファイル群:データ・ファイル / 制御ファイル / REDOログ・ファイル Oracle Databaseの内部構造 56 Copyright © 2023, Oracle and/or its affiliates 制御ファイル データ・ファイル REDOログ・ ファイル データベース・ バッファ・キャッシュ REDOログ・バッファ 共有プール SGA ファイル群 Oracleインスタンス Oracleデータベース PGA サーバー プロセス PGA サーバー プロセス PGA PGA サーバー プロセス サーバー プロセス PGA バックグラウンド・ プロセス PGA バックグラウンド・ プロセス PGA バックグラウンド・ プロセス PGA バックグラウンド・ プロセス