SlideShare uma empresa Scribd logo
1 de 17
Oracleデータベースでの データベースバッファキャッシュの 競合について 鈴木 健介
本資料について Oracle で発生する待機のうち、データベースバッファキャッシュの 競合に着目して、どのような場合にどのような待機が発生するか、 考察した資料である。 なお、本資料の記述は下記のマニュアルを参照している。 ・概要 ・リファレンス ・データベース管理者ガイド ・パフォーマンス・チューニング・ガイド
アーキテクチャのおさらい SGA サーバプロセス DBWR ・データへのアクセスは原則的に DB バッファを経由して行われる。 データファイル Shared pool,  Log buffer など その他領域 Database buffer
発生しうるI/Oのパターン 1.キャッシュ read ( サーバプロセス , DBWR) 2.キャッシュ write ( サーバプロセス、 DBWR) 3.ディスク read-> キャッシュ write  (サーバプロセス )   キャッシュ上に目的のデータブロックがなかった場合。   ディスクからデータを読み込み、キャッシュ上に載せる。 4.キャッシュ read-> ディスク write(DBWR)   ダーティバッファ(更新が行われたブロック ) の書き出し 。 各処理が同時発生した場合にどのような競合が発生するか考察する。 それぞれ同一データブロックの場合、異なるデータブロックの場合、 双方について考える。
前提条件 ・バージョンは 10.2.0 を想定する。 ・表ロック、行ロックなどの論理的な競合は発生していないものとする ・バッファキャッシュを介さない I/O については扱わない。 ( ダイレクトインサートなど ) ・レアケースの競合は網羅しきれないので、ここでは無視する  (バッファキャッシュのチェイン競合など)
同一データブロックでの競合 1.バッファ read ( サーバプロセス , DBWR) 2.バッファ write ( サーバプロセス、 DBWR) 3.ディスク read-> バッファ write  (サーバプロセス ) 4.バッファ read-> ディスク write-> バッファ write(DBWR) ○ :競合が発生しないケース X: 起きえないケース (*1) 同時にバッファにないブロックを参照するケースでは、 いずれかのプロセスがパターン3を担当する。競合としては、 パターン1とパターン3の競合と同じになる。
同一データブロックでの競合:ケースA プロセス a: バッファ read  または  write プロセス b: バッファ write プロセス a がプロセス b の完了を待機する。 ・プロセス a  待機イベント: buffer busy waits  待機時間:メモリ write にかかる時間 ・プロセス b 待機イベント:特になし
同一データブロックでの競合:ケースB プロセス a: バッファ read  または  write プロセス b: ディスク read-> バッファ write プロセス a がプロセス b の完了を待機する。 ・プロセス a  待機イベント: buffer busy waits  待機時間:ディスク read+ メモリ write にかかる時間 ・プロセス b 待機イベント: db file sequential read, db file scattered read  待機時間:ディスク read にかかる時間
同一データブロックでの競合:ケースC プロセス a :バッファ write プロセス b :バッファ read-> ディスク write-> バッファ write プロセス b(DBWR) がダーティバッファの書き出しを行っている最中に プロセス a がバッファの変更を行おうとするケース。 プロセス a がプロセス b の完了を待機する。 ・プロセス a  待機イベント: buffer busy waits  待機時間:ディスク write+ メモリ write にかかる時間 ・プロセス b 待機イベント: db file parallel write  待機時間:ディスク write にかかる時間
同一データブロックでの競合:ポイント ・競合しているときの待機時間は、ディスク I/O も含めて バッファの変更に必要な時間だけである。   例えば、変更されたブロックがトランザクションの持続期間中  ロックされている、ということはない。 ・ buffer busy waits にもその理由はいろいろある。  一応、待機イベントのパラメータで理由が数値コードで  示されているが、その意味するところは非公開情報であることが多い。 ・ buffer busy waits が発生したら、  他のプロセスの待機イベントにも着目することが必要。
buffer busy waitsを解消するには? ・ 1 データブロックに格納されている行数を減らす。 - pctfree を増やす -  ブロックサイズを減らす。 データの格納効率が落ちるというデメリットがある。 ・待たせている側のボトルネックを解消する。  ディスク I/O がネックになっている場合には、データファイルの分散や   DBWR プロセスを増やすなどの対処ができる。
異なるデータブロックでの競合 1.バッファ read ( サーバプロセス , DBWR) 2.バッファ write ( サーバプロセス、 DBWR) 3.ディスク read-> バッファ write  (サーバプロセス ) 4.バッファ read-> ディスク write-> バッファ write(DBWR) ○ :競合が発生しないケース X: 起きえないケース 異なるデータブロックでは、ケース B の特殊なケースを除いて、 原則としてロックによる競合は発生せず、 ディスク I/O の競合のみが発生する。
異なるデータブロックでの競合: ケースA プロセス a :ディスク read-> バッファ write プロセス b :ディスク read-> バッファ write ロックによりお互いを待機させることはない。 ただし、ディスク read が同時発生するので、対象ファイルが 同一ディスク上にある場合は、処理が遅延する可能性がある。 ・プロセス a 待機イベント: db file sequential read, db file scattered read  待機時間:ディスク read にかかる時間 ・プロセス b 待機イベント: db file sequential read, db file scattered read  待機時間:ディスク read にかかる時間
異なるデータブロックでの競合: ケースB1 プロセス a :ディスク read-> バッファ write プロセス b :バッファ read-> ディスク write-> バッファ write 多くの場合、こちらのケースになる。 ロックによりお互いを待機させることはない。 ただし、ディスク read,write が同時発生するので、対象ファイルが 同一ディスク上にある場合は、処理が遅延する可能性がある。 ・プロセス a 待機イベント: db file sequential read, db file scattered read  待機時間:ディスク read にかかる時間 ・プロセス b 待機イベント: db file parallel write  待機時間:ディスク write にかかる時間
異なるデータブロックでの競合: ケースB2 プロセス a :ディスク read-> バッファ write プロセス b :バッファ read-> ディスク write-> バッファ write プロセス a がブロックをバッファに乗せるときに、空きバッファが 見つからない場合に起こるケース。 プロセス b の作業を待機し、バッファが再利用可能になるのを待つ。 このケースが頻発する場合は、データベースバッファキャッシュの 容量を増やすか、 DBWR の数を増やすなどの対処が必要となる。 ・プロセス a 待機イベント: free buffer waits  待機時間:ディスク write にかかる時間 ・プロセス b 待機イベント: db file parallel write  待機時間:ディスク write にかかる時間
異なるデータブロックでの競合: ケースC プロセス a :バッファ read-> ディスク write-> バッファ write プロセス b :バッファ read-> ディスク write-> バッファ write DBWR を複数起動させているときに発生するケース。 ロックによりお互いを待機させることはない。 ただし、ディスク write が同時発生するので、対象ファイルが 同一ディスク上にある場合は、処理が遅延する可能性がある。 ・プロセス a 待機イベント: db file parallel write  待機時間:ディスク write にかかる時間 ・プロセス b 待機イベント: db file parallel write  待機時間:ディスク write にかかる時間
まとめ 本資料では、 Oracle のパフォーマンスのうち、データベースバッファの 競合に着目して、起きうるパターンを網羅的に考察した。 当然のことながら、本資料の範囲はデータベースのパフォーマンスの 一部であるため、実際のチューニングにはその他の要素も含めて 総合的に判断することが必要である。

Mais conteúdo relacionado

Mais procurados

Cloud os techday_0614
Cloud os techday_0614Cloud os techday_0614
Cloud os techday_0614Takano Masaru
 
Indexed DBについて(書きかけ)
Indexed DBについて(書きかけ)Indexed DBについて(書きかけ)
Indexed DBについて(書きかけ)iPride Co., Ltd.
 
社内サーバインフラ勉強会(DB)
社内サーバインフラ勉強会(DB)社内サーバインフラ勉強会(DB)
社内サーバインフラ勉強会(DB)Masahiro NAKAYAMA
 
DBP-011_Apache Spark for Azure HDInsight ~新世代の Big Data 処理基盤~
DBP-011_Apache Spark for Azure HDInsight ~新世代の Big Data 処理基盤~DBP-011_Apache Spark for Azure HDInsight ~新世代の Big Data 処理基盤~
DBP-011_Apache Spark for Azure HDInsight ~新世代の Big Data 処理基盤~decode2016
 
10分で分かるデータストレージ
10分で分かるデータストレージ10分で分かるデータストレージ
10分で分かるデータストレージTakashi Hoshino
 
10分で分かるLinuxブロックレイヤ
10分で分かるLinuxブロックレイヤ10分で分かるLinuxブロックレイヤ
10分で分かるLinuxブロックレイヤTakashi Hoshino
 
SQL Server運用実践 - 3年間80台の運用経験から20の教訓
SQL Server運用実践 - 3年間80台の運用経験から20の教訓SQL Server運用実践 - 3年間80台の運用経験から20の教訓
SQL Server運用実践 - 3年間80台の運用経験から20の教訓貴仁 大和屋
 
RDS for postgreSQLの作成
RDS for postgreSQLの作成RDS for postgreSQLの作成
RDS for postgreSQLの作成Seiji Tsukioka
 
ゼロ・スキル(ディスク編)
ゼロ・スキル(ディスク編)ゼロ・スキル(ディスク編)
ゼロ・スキル(ディスク編)Toru Watanabe
 
cassandra調査レポート
cassandra調査レポートcassandra調査レポート
cassandra調査レポートAkihiro Kuwano
 
Infinispan - Open Source Data Grid rev2
Infinispan - Open Source Data Grid rev2Infinispan - Open Source Data Grid rev2
Infinispan - Open Source Data Grid rev2nekop
 
HDFSのスケーラビリティとマルチマスタへの取り組み
HDFSのスケーラビリティとマルチマスタへの取り組みHDFSのスケーラビリティとマルチマスタへの取り組み
HDFSのスケーラビリティとマルチマスタへの取り組みshunsuke Mikami
 
Quick Introduction to GlusterFS
Quick Introduction to GlusterFSQuick Introduction to GlusterFS
Quick Introduction to GlusterFSEtsuji Nakai
 
10分で分かるバックアップとレプリケーション
10分で分かるバックアップとレプリケーション10分で分かるバックアップとレプリケーション
10分で分かるバックアップとレプリケーションTakashi Hoshino
 
分散仮想ストレージシステム紹介
分散仮想ストレージシステム紹介分散仮想ストレージシステム紹介
分散仮想ストレージシステム紹介OSSラボ株式会社
 
仮想ネットワーク構築8枚slide
仮想ネットワーク構築8枚slide仮想ネットワーク構築8枚slide
仮想ネットワーク構築8枚slidek009c1271
 
A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史
A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史
A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史Insight Technology, Inc.
 
Sql server エンジニアに知ってもらいたい!! sql server チューニングアプローチ
Sql server エンジニアに知ってもらいたい!! sql server チューニングアプローチSql server エンジニアに知ってもらいたい!! sql server チューニングアプローチ
Sql server エンジニアに知ってもらいたい!! sql server チューニングアプローチMasayuki Ozawa
 

Mais procurados (20)

Cloud os techday_0614
Cloud os techday_0614Cloud os techday_0614
Cloud os techday_0614
 
Indexed DBについて(書きかけ)
Indexed DBについて(書きかけ)Indexed DBについて(書きかけ)
Indexed DBについて(書きかけ)
 
社内サーバインフラ勉強会(DB)
社内サーバインフラ勉強会(DB)社内サーバインフラ勉強会(DB)
社内サーバインフラ勉強会(DB)
 
DBP-011_Apache Spark for Azure HDInsight ~新世代の Big Data 処理基盤~
DBP-011_Apache Spark for Azure HDInsight ~新世代の Big Data 処理基盤~DBP-011_Apache Spark for Azure HDInsight ~新世代の Big Data 処理基盤~
DBP-011_Apache Spark for Azure HDInsight ~新世代の Big Data 処理基盤~
 
SQL Server 入門
SQL Server 入門SQL Server 入門
SQL Server 入門
 
10分で分かるデータストレージ
10分で分かるデータストレージ10分で分かるデータストレージ
10分で分かるデータストレージ
 
Hddからssdへ
HddからssdへHddからssdへ
Hddからssdへ
 
10分で分かるLinuxブロックレイヤ
10分で分かるLinuxブロックレイヤ10分で分かるLinuxブロックレイヤ
10分で分かるLinuxブロックレイヤ
 
SQL Server運用実践 - 3年間80台の運用経験から20の教訓
SQL Server運用実践 - 3年間80台の運用経験から20の教訓SQL Server運用実践 - 3年間80台の運用経験から20の教訓
SQL Server運用実践 - 3年間80台の運用経験から20の教訓
 
RDS for postgreSQLの作成
RDS for postgreSQLの作成RDS for postgreSQLの作成
RDS for postgreSQLの作成
 
ゼロ・スキル(ディスク編)
ゼロ・スキル(ディスク編)ゼロ・スキル(ディスク編)
ゼロ・スキル(ディスク編)
 
cassandra調査レポート
cassandra調査レポートcassandra調査レポート
cassandra調査レポート
 
Infinispan - Open Source Data Grid rev2
Infinispan - Open Source Data Grid rev2Infinispan - Open Source Data Grid rev2
Infinispan - Open Source Data Grid rev2
 
HDFSのスケーラビリティとマルチマスタへの取り組み
HDFSのスケーラビリティとマルチマスタへの取り組みHDFSのスケーラビリティとマルチマスタへの取り組み
HDFSのスケーラビリティとマルチマスタへの取り組み
 
Quick Introduction to GlusterFS
Quick Introduction to GlusterFSQuick Introduction to GlusterFS
Quick Introduction to GlusterFS
 
10分で分かるバックアップとレプリケーション
10分で分かるバックアップとレプリケーション10分で分かるバックアップとレプリケーション
10分で分かるバックアップとレプリケーション
 
分散仮想ストレージシステム紹介
分散仮想ストレージシステム紹介分散仮想ストレージシステム紹介
分散仮想ストレージシステム紹介
 
仮想ネットワーク構築8枚slide
仮想ネットワーク構築8枚slide仮想ネットワーク構築8枚slide
仮想ネットワーク構築8枚slide
 
A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史
A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史
A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史
 
Sql server エンジニアに知ってもらいたい!! sql server チューニングアプローチ
Sql server エンジニアに知ってもらいたい!! sql server チューニングアプローチSql server エンジニアに知ってもらいたい!! sql server チューニングアプローチ
Sql server エンジニアに知ってもらいたい!! sql server チューニングアプローチ
 

Semelhante a データベースキャッシュの競合

Microsoft Azure Storage 概要
Microsoft Azure Storage 概要Microsoft Azure Storage 概要
Microsoft Azure Storage 概要Takeshi Fukuhara
 
プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009
プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009
プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009Ryota Watabe
 
C12 AlwaysOn 可用性グループとデータベースミラーリングのIO特製の比較 by 多田典史
C12 AlwaysOn 可用性グループとデータベースミラーリングのIO特製の比較 by 多田典史C12 AlwaysOn 可用性グループとデータベースミラーリングのIO特製の比較 by 多田典史
C12 AlwaysOn 可用性グループとデータベースミラーリングのIO特製の比較 by 多田典史Insight Technology, Inc.
 
実はとても面白い...Documentation library
実はとても面白い...Documentation library実はとても面白い...Documentation library
実はとても面白い...Documentation libraryKouta Shiobara
 
SQL Server 使いのための Azure Synapse Analytics - Spark 入門
SQL Server 使いのための Azure Synapse Analytics - Spark 入門SQL Server 使いのための Azure Synapse Analytics - Spark 入門
SQL Server 使いのための Azure Synapse Analytics - Spark 入門Daiyu Hatakeyama
 
Persistence on Azure - Microsoft Azure の永続化
Persistence on Azure - Microsoft Azure の永続化Persistence on Azure - Microsoft Azure の永続化
Persistence on Azure - Microsoft Azure の永続化Takekazu Omi
 
C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努Insight Technology, Inc.
 
今こそ知りたい!Microsoft Azureの基礎
今こそ知りたい!Microsoft Azureの基礎今こそ知りたい!Microsoft Azureの基礎
今こそ知りたい!Microsoft Azureの基礎Trainocate Japan, Ltd.
 
Java EE7 䛸㻌JCache 
Java EE7 䛸㻌JCache Java EE7 䛸㻌JCache 
Java EE7 䛸㻌JCache maruyama097
 
プロとしてのOracleアーキテクチャ入門 ~番外編~
プロとしてのOracleアーキテクチャ入門 ~番外編~プロとしてのOracleアーキテクチャ入門 ~番外編~
プロとしてのOracleアーキテクチャ入門 ~番外編~ryouta watabe
 
先進的計算基盤システムシンポジウム SACSIS2009 Slide Suzaki
先進的計算基盤システムシンポジウム SACSIS2009 Slide Suzaki先進的計算基盤システムシンポジウム SACSIS2009 Slide Suzaki
先進的計算基盤システムシンポジウム SACSIS2009 Slide SuzakiKuniyasu Suzaki
 
Azure Synapse Analytics 専用SQL Poolベストプラクティス
Azure Synapse Analytics 専用SQL PoolベストプラクティスAzure Synapse Analytics 専用SQL Poolベストプラクティス
Azure Synapse Analytics 専用SQL PoolベストプラクティスMicrosoft
 
記憶域スペースと Windows Server VNext でのストレージ関連機能の強化ポイント - MVP Community Camp 2015
記憶域スペースと Windows Server VNext でのストレージ関連機能の強化ポイント - MVP Community Camp 2015 記憶域スペースと Windows Server VNext でのストレージ関連機能の強化ポイント - MVP Community Camp 2015
記憶域スペースと Windows Server VNext でのストレージ関連機能の強化ポイント - MVP Community Camp 2015 Masahiko Sada
 
Qlik ReplicateでのLog Streamの利用
Qlik ReplicateでのLog Streamの利用Qlik ReplicateでのLog Streamの利用
Qlik ReplicateでのLog Streamの利用QlikPresalesJapan
 
新機能によるデータベースシステムの改善ポイント
新機能によるデータベースシステムの改善ポイント新機能によるデータベースシステムの改善ポイント
新機能によるデータベースシステムの改善ポイントオラクルエンジニア通信
 
MySQLの運用でありがちなこと
MySQLの運用でありがちなことMySQLの運用でありがちなこと
MySQLの運用でありがちなことHiroaki Sano
 
Windows Azure Storage:Best Practices and Internals
Windows Azure Storage:Best Practices and InternalsWindows Azure Storage:Best Practices and Internals
Windows Azure Storage:Best Practices and InternalsTakekazu Omi
 
Sql server よく聞く設定とその効果
Sql server よく聞く設定とその効果Sql server よく聞く設定とその効果
Sql server よく聞く設定とその効果Masayuki Ozawa
 

Semelhante a データベースキャッシュの競合 (20)

Microsoft Azure Storage 概要
Microsoft Azure Storage 概要Microsoft Azure Storage 概要
Microsoft Azure Storage 概要
 
プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009
プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009
プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009
 
HBase on EC2
HBase on EC2HBase on EC2
HBase on EC2
 
C12 AlwaysOn 可用性グループとデータベースミラーリングのIO特製の比較 by 多田典史
C12 AlwaysOn 可用性グループとデータベースミラーリングのIO特製の比較 by 多田典史C12 AlwaysOn 可用性グループとデータベースミラーリングのIO特製の比較 by 多田典史
C12 AlwaysOn 可用性グループとデータベースミラーリングのIO特製の比較 by 多田典史
 
実はとても面白い...Documentation library
実はとても面白い...Documentation library実はとても面白い...Documentation library
実はとても面白い...Documentation library
 
SQL Server 使いのための Azure Synapse Analytics - Spark 入門
SQL Server 使いのための Azure Synapse Analytics - Spark 入門SQL Server 使いのための Azure Synapse Analytics - Spark 入門
SQL Server 使いのための Azure Synapse Analytics - Spark 入門
 
Persistence on Azure - Microsoft Azure の永続化
Persistence on Azure - Microsoft Azure の永続化Persistence on Azure - Microsoft Azure の永続化
Persistence on Azure - Microsoft Azure の永続化
 
C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努
 
今こそ知りたい!Microsoft Azureの基礎
今こそ知りたい!Microsoft Azureの基礎今こそ知りたい!Microsoft Azureの基礎
今こそ知りたい!Microsoft Azureの基礎
 
Java EE7 䛸㻌JCache 
Java EE7 䛸㻌JCache Java EE7 䛸㻌JCache 
Java EE7 䛸㻌JCache 
 
プロとしてのOracleアーキテクチャ入門 ~番外編~
プロとしてのOracleアーキテクチャ入門 ~番外編~プロとしてのOracleアーキテクチャ入門 ~番外編~
プロとしてのOracleアーキテクチャ入門 ~番外編~
 
先進的計算基盤システムシンポジウム SACSIS2009 Slide Suzaki
先進的計算基盤システムシンポジウム SACSIS2009 Slide Suzaki先進的計算基盤システムシンポジウム SACSIS2009 Slide Suzaki
先進的計算基盤システムシンポジウム SACSIS2009 Slide Suzaki
 
Azure Synapse Analytics 専用SQL Poolベストプラクティス
Azure Synapse Analytics 専用SQL PoolベストプラクティスAzure Synapse Analytics 専用SQL Poolベストプラクティス
Azure Synapse Analytics 専用SQL Poolベストプラクティス
 
記憶域スペースと Windows Server VNext でのストレージ関連機能の強化ポイント - MVP Community Camp 2015
記憶域スペースと Windows Server VNext でのストレージ関連機能の強化ポイント - MVP Community Camp 2015 記憶域スペースと Windows Server VNext でのストレージ関連機能の強化ポイント - MVP Community Camp 2015
記憶域スペースと Windows Server VNext でのストレージ関連機能の強化ポイント - MVP Community Camp 2015
 
Qlik ReplicateでのLog Streamの利用
Qlik ReplicateでのLog Streamの利用Qlik ReplicateでのLog Streamの利用
Qlik ReplicateでのLog Streamの利用
 
新機能によるデータベースシステムの改善ポイント
新機能によるデータベースシステムの改善ポイント新機能によるデータベースシステムの改善ポイント
新機能によるデータベースシステムの改善ポイント
 
MySQLの運用でありがちなこと
MySQLの運用でありがちなことMySQLの運用でありがちなこと
MySQLの運用でありがちなこと
 
Hadoopとは
HadoopとはHadoopとは
Hadoopとは
 
Windows Azure Storage:Best Practices and Internals
Windows Azure Storage:Best Practices and InternalsWindows Azure Storage:Best Practices and Internals
Windows Azure Storage:Best Practices and Internals
 
Sql server よく聞く設定とその効果
Sql server よく聞く設定とその効果Sql server よく聞く設定とその効果
Sql server よく聞く設定とその効果
 

データベースキャッシュの競合

  • 2. 本資料について Oracle で発生する待機のうち、データベースバッファキャッシュの 競合に着目して、どのような場合にどのような待機が発生するか、 考察した資料である。 なお、本資料の記述は下記のマニュアルを参照している。 ・概要 ・リファレンス ・データベース管理者ガイド ・パフォーマンス・チューニング・ガイド
  • 3. アーキテクチャのおさらい SGA サーバプロセス DBWR ・データへのアクセスは原則的に DB バッファを経由して行われる。 データファイル Shared pool, Log buffer など その他領域 Database buffer
  • 4. 発生しうるI/Oのパターン 1.キャッシュ read ( サーバプロセス , DBWR) 2.キャッシュ write ( サーバプロセス、 DBWR) 3.ディスク read-> キャッシュ write (サーバプロセス )   キャッシュ上に目的のデータブロックがなかった場合。   ディスクからデータを読み込み、キャッシュ上に載せる。 4.キャッシュ read-> ディスク write(DBWR)   ダーティバッファ(更新が行われたブロック ) の書き出し 。 各処理が同時発生した場合にどのような競合が発生するか考察する。 それぞれ同一データブロックの場合、異なるデータブロックの場合、 双方について考える。
  • 5. 前提条件 ・バージョンは 10.2.0 を想定する。 ・表ロック、行ロックなどの論理的な競合は発生していないものとする ・バッファキャッシュを介さない I/O については扱わない。 ( ダイレクトインサートなど ) ・レアケースの競合は網羅しきれないので、ここでは無視する  (バッファキャッシュのチェイン競合など)
  • 6. 同一データブロックでの競合 1.バッファ read ( サーバプロセス , DBWR) 2.バッファ write ( サーバプロセス、 DBWR) 3.ディスク read-> バッファ write (サーバプロセス ) 4.バッファ read-> ディスク write-> バッファ write(DBWR) ○ :競合が発生しないケース X: 起きえないケース (*1) 同時にバッファにないブロックを参照するケースでは、 いずれかのプロセスがパターン3を担当する。競合としては、 パターン1とパターン3の競合と同じになる。
  • 7. 同一データブロックでの競合:ケースA プロセス a: バッファ read または write プロセス b: バッファ write プロセス a がプロセス b の完了を待機する。 ・プロセス a  待機イベント: buffer busy waits  待機時間:メモリ write にかかる時間 ・プロセス b 待機イベント:特になし
  • 8. 同一データブロックでの競合:ケースB プロセス a: バッファ read または write プロセス b: ディスク read-> バッファ write プロセス a がプロセス b の完了を待機する。 ・プロセス a  待機イベント: buffer busy waits  待機時間:ディスク read+ メモリ write にかかる時間 ・プロセス b 待機イベント: db file sequential read, db file scattered read  待機時間:ディスク read にかかる時間
  • 9. 同一データブロックでの競合:ケースC プロセス a :バッファ write プロセス b :バッファ read-> ディスク write-> バッファ write プロセス b(DBWR) がダーティバッファの書き出しを行っている最中に プロセス a がバッファの変更を行おうとするケース。 プロセス a がプロセス b の完了を待機する。 ・プロセス a  待機イベント: buffer busy waits  待機時間:ディスク write+ メモリ write にかかる時間 ・プロセス b 待機イベント: db file parallel write  待機時間:ディスク write にかかる時間
  • 10. 同一データブロックでの競合:ポイント ・競合しているときの待機時間は、ディスク I/O も含めて バッファの変更に必要な時間だけである。   例えば、変更されたブロックがトランザクションの持続期間中  ロックされている、ということはない。 ・ buffer busy waits にもその理由はいろいろある。  一応、待機イベントのパラメータで理由が数値コードで  示されているが、その意味するところは非公開情報であることが多い。 ・ buffer busy waits が発生したら、  他のプロセスの待機イベントにも着目することが必要。
  • 11. buffer busy waitsを解消するには? ・ 1 データブロックに格納されている行数を減らす。 - pctfree を増やす - ブロックサイズを減らす。 データの格納効率が落ちるというデメリットがある。 ・待たせている側のボトルネックを解消する。  ディスク I/O がネックになっている場合には、データファイルの分散や   DBWR プロセスを増やすなどの対処ができる。
  • 12. 異なるデータブロックでの競合 1.バッファ read ( サーバプロセス , DBWR) 2.バッファ write ( サーバプロセス、 DBWR) 3.ディスク read-> バッファ write (サーバプロセス ) 4.バッファ read-> ディスク write-> バッファ write(DBWR) ○ :競合が発生しないケース X: 起きえないケース 異なるデータブロックでは、ケース B の特殊なケースを除いて、 原則としてロックによる競合は発生せず、 ディスク I/O の競合のみが発生する。
  • 13. 異なるデータブロックでの競合: ケースA プロセス a :ディスク read-> バッファ write プロセス b :ディスク read-> バッファ write ロックによりお互いを待機させることはない。 ただし、ディスク read が同時発生するので、対象ファイルが 同一ディスク上にある場合は、処理が遅延する可能性がある。 ・プロセス a 待機イベント: db file sequential read, db file scattered read  待機時間:ディスク read にかかる時間 ・プロセス b 待機イベント: db file sequential read, db file scattered read  待機時間:ディスク read にかかる時間
  • 14. 異なるデータブロックでの競合: ケースB1 プロセス a :ディスク read-> バッファ write プロセス b :バッファ read-> ディスク write-> バッファ write 多くの場合、こちらのケースになる。 ロックによりお互いを待機させることはない。 ただし、ディスク read,write が同時発生するので、対象ファイルが 同一ディスク上にある場合は、処理が遅延する可能性がある。 ・プロセス a 待機イベント: db file sequential read, db file scattered read  待機時間:ディスク read にかかる時間 ・プロセス b 待機イベント: db file parallel write  待機時間:ディスク write にかかる時間
  • 15. 異なるデータブロックでの競合: ケースB2 プロセス a :ディスク read-> バッファ write プロセス b :バッファ read-> ディスク write-> バッファ write プロセス a がブロックをバッファに乗せるときに、空きバッファが 見つからない場合に起こるケース。 プロセス b の作業を待機し、バッファが再利用可能になるのを待つ。 このケースが頻発する場合は、データベースバッファキャッシュの 容量を増やすか、 DBWR の数を増やすなどの対処が必要となる。 ・プロセス a 待機イベント: free buffer waits  待機時間:ディスク write にかかる時間 ・プロセス b 待機イベント: db file parallel write  待機時間:ディスク write にかかる時間
  • 16. 異なるデータブロックでの競合: ケースC プロセス a :バッファ read-> ディスク write-> バッファ write プロセス b :バッファ read-> ディスク write-> バッファ write DBWR を複数起動させているときに発生するケース。 ロックによりお互いを待機させることはない。 ただし、ディスク write が同時発生するので、対象ファイルが 同一ディスク上にある場合は、処理が遅延する可能性がある。 ・プロセス a 待機イベント: db file parallel write  待機時間:ディスク write にかかる時間 ・プロセス b 待機イベント: db file parallel write  待機時間:ディスク write にかかる時間
  • 17. まとめ 本資料では、 Oracle のパフォーマンスのうち、データベースバッファの 競合に着目して、起きうるパターンを網羅的に考察した。 当然のことながら、本資料の範囲はデータベースのパフォーマンスの 一部であるため、実際のチューニングにはその他の要素も含めて 総合的に判断することが必要である。