データベースについて調べてみた

データベースについて調べたことのメモ。Oracle要素多めになる予定。

SQLトレースを用いてSQL実行時の処理過程を調べてみた

システムのテスト工程などでSQLの性能試験を行った際に、SQLの実行計画は悪くないはずなのに、期待していたよりレスポンスが遅かったときなどに、何で遅いのか・何の処理過程で時間を消費しているのか調べたくなる時があります。

今回は、SQLトレースを用いて、SQL実行時の処理過程や各処理時間といった内訳を調査する方法について調べてみました。

続きを読む

参照整合性制約におけるインデックスの効果を調べてみた

最近携わっているシステムでOracle Databaseを使用しており、参照整合性制約(外部キー制約)の構成列に対してインデックスを作成する・しないの話が出ました。

参照整合性制約の構成列に対しては、インデックスを作成することを基本路線として考えた方がよいと思っていますが、せっかくの機会なので、今回は参照整合性制約の構成列に対してインデックスを作成することによるご利益について調べてみました。

続きを読む

統合監査を使用するための設定などについて調べてみた

過去の記事でも書きましたが、Oracle Database 23cから従来型監査がサポートされなくなり、統合監査を使用しなければいけなくなりました。

今回は統合監査を使用するために必要な設定や、従来型における標準監査相当を行うための監査ポリシーの作成方法などについて調べてみました。なお、実機調査の際は、Linux x86-64Oracle 19c(19.22.0)のRAC環境を用いて行いました。

続きを読む

SQLを書き換えないでSQLの実行計画を変更する方法について調べてみた

非効率な実行計画が選択されたことで、SQLの性能が悪かった場合、Oracle DatabaseではSQLにヒント句を付与することで、効率的な実行計画を選択させる手段を採ることが多いかと思います。

一方で、パッケージ製品が発行するSQLや、様々な事情によりアプリケーション(が発行するSQL文)の改修が困難な場合、SQLにヒント句を付与する対応ができない場合もあります。

Oracle DatabaseにはSQLの実行計画を管理する、SQL Plan Management(SPM: SQL計画管理)という機能があり、これを使用することでSQLを書き換えることなく、意図した実行計画を選択させることができるので、今回はこのやり方について調べてみました。

続きを読む

テーブル結合時のテーブルアクセスについて調べてみた

Oracle Databaseにはテーブルの結合方法として、以下の3つがあります。

  1. ネステッドループ(Nested Loop)結合
  2. ハッシュ(Hash)結合
  3. ソート/マージ(Sort Merge)結合

Oracle Databaseをご存じの方は、結合結果の1件目を速く返却したい様な逐次処理ではネステッドループ結合が、結合結果の全件を速く返却したい様なバッチ処理ではハッシュ結合が優位といった様なことを聞いたことがあるかと思います。

今回は、それぞれの結合を実行した際のSQLトレースを取得して、テーブル結合時のテーブルアクセスの状況から、上記の優位性があると言われる様な挙動を示すのか、実機検証をして確認してみました。

 

続きを読む

スタンバイデータベースで統合監査がどうなるか調べてみた

Oracle Database 23cから従来型監査がサポートされなくなり、統合監査を使用しなければいけなくなりました。

従来型監査では監査レコードの出力先をOSファイルかDB内にするか選べたのですが、統合監査ではDB内にしか出力できなくなりました。ここで1つの疑問が。

 

DataGuardのフィジカルスタンバイデータベース側で、
統合監査の監査レコード出力ってどうなるの???

 

ということで、色々気になることをちょっと調べてみました。

※残念ながら実機確認までは手を出していません。時間ができたらやりたいと思います。。

続きを読む

PDBを使ったテスト環境の作り方を調べてみた ~ その2 ~

前回に続き、プラガブルデータベース(PDB)を使って繰り返しテストで使用できる様な環境の構築手順について、纏めてみました。

前回は構築準備として、テスト環境のベースとなるPDBの構築手順で終わっていたので、今回はテスト用に繰り返し利用できるPDBの構築部分を纏めています。

続きを読む