ただのポンコツのようだ。ただのポンコツのようだ。楽しく生きていくための備忘録ブログ。メモリに関するパラメータチューニングを行ったので、その備忘録である。約12年前にリリースされたバージョンであり、まだそんなの使っているのか?と思われるかもしれないが、レガシーシステムでは様々な要件によりバージョンアップできないケースも多いらしく、まだまだ現役でがんばっている。オラクルマスターの試験をはじめて受けた時のバージョンが確か8iだったと記憶している。はじめに認識しておかなければならないのが、「どんなシステムでも必ず有効な手段という物はない」ということである。その上で、今回取り上げるチューニングの手段は、メモリのチューニングである。メモリのチューニングをする上で理解しておかなければならないのが、Oracleのメモリ構造である。構造を理解したうえで、各メモリ空間の大きさの妥当性を検証していくと良い。Oracleのメモリ・チューニングで重要なのは、SGAである。SGAには図にあるように大きく、3つのメモリ空間がある。・共有プール・データベースバッファキャッシュ・REDOログ・バッファ共有プールの中に、ライブラリ・キャッシュとディクショナリ・キャッシュがある。SGAのチューニングで特に重要なのが、共有プール(ライブラリ・キャッシュ、ディクショナリ・キャッシュ)とデータベースバッファキャッシュである。ライブラリ・キャッシュとは、ユーザーから実行されたSQLやPL/SQLプロシージャ、パッケージの実行計画や解析結果をメモリに格納し、同様なSQLに対する処理負担軽減を行うメモリ空間である。ディクショナリ・キャッシュとは、データベース内のオブジェクトに関する変更情報や属性、構成情報を保持し、SQLの解析時には、テーブル属性などのオブジェクト構成情報が参照されるメモリ空間である。データベースバッファキャッシュとは、ユーザーから実行されたSQL等によってアクセスされたデータファイル内にあるデータをいったんメモリ上に展開し、保持しておくメモリ空間である。ライブラリ・キャッシュ、ディクショナリ・キャッシュ、データベースバッファキャッシュともに、内容は違えどもやっていることは、「キャッシュ」である。一度、データファイル(ハードディスク)へアクセスして読み取ったデータや実行したSQLなどをメモリ上にキャッシュしておくと、同じデータを利用する際や同じSQLを利用する際にはデータファイルへアクセスせずに、メモリ上にキャッシュしているデータへアクセスすればいい。データファイルへのアクセスに比べて、メモリへのアクセスはパフォーマンス的に数十倍から数百倍速い。よって、キャッシュを有効利用して、メモリ上でできるだけ多くの処理ができるようなパラメータを設定することが重要である。サーバで利用できる実メモリがあり、それによってSGAに割り当てることが可能なメモリ量が決まる。その決まったSGAのメモリ量の中で最適な値をそれぞれに割り当ててやらなければならない。現状の確認であるが、SQL*Plusで以下のようにすると確認できる。9i以降と違って、SGAのメモリ量を調整するようなパラメータはなく、データベースバッファキャッシュや共有プール、Javaプール、ラージプールなどのSGAに含まれる各種パラメータで設定した値を合計したものがSGAのメモリ量となる。表示される各種値の意味は以下の通りである。ログバッファSGAに含まれる各種パラメータは以下のようにして確認することができる。LOG_BUFFERメモリの割り当てに関する基本的な考え方は以下の通りである。割り当てられたSGAのメモリ量のうち、できるだけ多くデータベースバッファキャッシュにメモリを割り当て、共有プールへの割り当てはパフォーマンスが落ちない程度に小さくするライブラリ・キャッシュ、ディクショナリ・キャッシュは、個別に値を設定することはできないので、共有プール全体の値としてパラメータを設定する。設定するパラメータは、SHARED_POOL_SIZEである。共有プールへの割り当てはパフォーマンスが落ちない程度に小さくするとあるが、パフォーマンスが落ちない程度とはどの程度であるか?目安は以下の通りである。