前提:Oracle 11g(Release 11.2.0)、12c(Release 12.1.0、12.2.0)
1.そもそも編
<インスタンスとデータベースの違いとは?>
メモリ空間の話 →インスタンス
物理ファイル群の話→データベース
RAC構成の場合、1つのデータベース・複数のインスタンス、ということになる。
RAC…Real Application Clusters。複数サーバ(インスタンス)で1つのデータベースを共有する仕組み。
RAC構成はActive/Active構成。(Active/Standbyではない)
RAC構成メリット
①耐障害性の向上
②拡張性の向上
サーバを後から追加可能(スケールアウト)
③負荷分散の実現
性能を安定化、負荷の平準化。
<性能向上するために>
一般的にもDISKアクセスは遅く、Cacheアクセスの方が速い
Oracleではデータ参照スピードを上げるために
テーブルにインデックスを貼る方法が通例。
インデックス対象データはメモリ(SGA データベース・バッファ・キャッシュ)へ展開され
その結果アクセス効率が上がる。
(SGAに検索対象が存在すれば、テーブル(Disk)の参照不要)
REDOログバッファ
→昨今ではあまり問題にならない傾向。
オプティマイザ
→共有プールにあるライブラリキャッシュを参照して経路を決める。
ライブラリキャッシュ…アプリケーションコード(コンパイル済)保持。
SQL解析ツリー、実行計画
<V$表を利用したSGA領域の見積方法>
■V$DB_CACHE_ADVICE
select
SIZE_FOR_ESTIMATE
, SIZE_FACTOR
, ESTD_PHYSICAL_READ_FACTOR
, ESTD_PHYSIVAL_READS
from V$DB_CACHE_ADVICE;
※SIZE_FACTOR(現在値1)を変化させてESTD_PHYSIVAL_READSが減るなら効果あり
■V$SHARED_POOL_ADVICE
select
SHARED_POOL_SIZE_FOR_ESTIMATE
, SHARED_POOL_SIZE_FACTOR
, ESTD_LC_MEMORY_OBJECT_HITS
from V$SHARED_POOL_ADVICE;
<V$表を利用したPGA領域の見積方法>
select
count(n.name) SESSION_COUNT
, sum(s.value/1024/1024) SESSION_MEMORY_MB
from v$sesstat s, v$statname n, v$session se
where n.statistic# = s.statistic#
and s.sid=se.sid
and n.name in ('session pga memory');
SESSION_COUNT×2MB または SESSION_MEMORY_MB(MB)を参考にする
<各メモリとパラメータについて>
Oracle11g以降
MEMORY_TARGETに設定した値の範囲でいい感じにやってくれる。
→明示的に対象パラメータに値を設定することで最低限の値を確保してくれる。
参考サイト
津島博士のパフォーマンス講座
http://www.oracle.com/technetwork/jp/database/articles/tsushima/index.html
Oracleの実行計画を読んでみよう!
https://www.slideshare.net/ryotawatabe/20170907-dbts2017-tokyo-cosol-how-to-read-oracle-execution-plan
0 件のコメント:
コメントを投稿