Oracle Database 12.1.0.2のお薦めパラメーターについて再び書いていきます。この投稿では、とてもよく知られているパラメーターで興味深い動作をするものにフォーカスをあてます。ここには挙動が変わったものや、我々として指摘しおきたいものが含まれます。また、まだOracle Database 11gをお使いの方にとっても、以下の推奨のいくつかは当てはまる可能性があります。
はじめに
繰り返しとなりますが、以下のことに注意してください。以下のパラメーターリストの大部分は、個人的な経験のみに基づくものです。いくつかはオラクル社によって公式に推奨されてもいます。必ず適切なテスト手法を用いるようにしてください。我々としては Real Application Testing を強くお勧めします。特に SQL Performance Analyzer ですが、 Database Replay と合わせて、これらのパラメーターの変更による影響を検証してください。.
よく知られたパラメーターで興味深い動作をするもの
- parallel_min_servers
- これは何?
- マニュアルをご覧ください。 - パラレルクエリ用スレーブプロセスの最小起動数
- デフォルト値:
- CPU_COUNT * PARALLEL_THREADS_PER_CPU * 2
- 挙動の変化:
- この値をデフォルトより小さい値にしても、データベースはこれを無視します
- Oracle Database 11gではデフォルト値は0でした
- 11.2.0.4 と 12.1.0.2 とを同じサーバー上で比べてみます:
- 11g:
SQL> show parameter parallel_min_servers
NAME TYPE VALUE
--------------------- -------- ------
parallel_min_servers integer 0 - 12c:
SQL> show parameter parallel_min_servers
NAME TYPE VALUE
--------------------- -------- ------
parallel_min_servers integer 8 - 解説:
- この変更の導入により、パラレルクエリ用ワーカーがより多く存在するようになり、パラレル操作がリクエストされたときになってからそれを起動するオーバーヘッドを避けることができます
- MOS Note:1678111.1
PARALLEL_MIN_SERVERS Does Not Limit The Number Of Parallel Processes At Startup in 12c も合わせて参照してください
.
- job_queue_processes
- これは何?
- マニュアルをご覧ください - DBMS_JOBやDBMS_SCHEDULERのジョブで作成されるスレーブの最大数を指定します
- デフォルト:
- 1000
- お薦め:
- おおよそ 2 * CPU coresとなる値にセットします
- 解説:
- Oracle Database 12cでは、 CTAS やIAS (空の表に対するもののみ) のオペレーション中における自動統計情報収集が導入されました。これにより統計情報収集用のジョブが非常に多く発生する可能性があります。また、デフォルト設定であるコンカレント統計収集により問題が発生する可能性もあります。ですので、このパラメーターに制限をかけておくことは良いアイディアと考えられます
- この値を 0 にする際には注意が必要です - すべてのリコンパイル作業がブロックされてしまいます。また、DBMS_JOBS やDBMS_SCHEDULERを用いたジョブが基本的に実行できなくなります
- 追加情報:
- recyclebin
- これは何?
- マニュアルをご覧ください - Flashback Drop機能を有効化するかどうかを制御します。 このパラメーターを OFFにセットすると、削除された表はごみ箱へは行かなくなります。 このパラメーターを ON,にセットすると、削除された表はごみ箱へ入り、元に戻すことができます
- デフォルト値:
- ON
- お薦め:
- recyclebin が ON (デフォルト値) にセットされている場合、最低でも一週間に一度はごみ箱を空にするようにします。たとえば、毎週日曜日の午前3時にごみ箱を空にするジョブをすべての環境に対して作成します。
SQL> purge DBA_RECYCLEBIN; - 解説:
- ごみ箱は、Oracle 10g以来すべてのデータベースに対してデフォルトで作成されています。この機能の危ない点は、ごみ箱が空にされない一方、特に開発用データベースでは多くのオブジェクトが作られては削除されるということです。結果として、削除されたオブジェクトとそれに依存するオブジェクトがデータベース内に残り、領域を空ける必要がでてきます。これは、これらのオブジェクトがTAB$などのデータディクショナリにも残っていることを意味しています。オブジェクト名は"EMP"などから"BIN$..."へと変わっているものの、ディクショナリを肥大化させていきます。そしてごみ箱を空にしようとすると、ときとしてパフォーマンスの一次的な低下を招いてしまうかもしれません。オブジェクトをクリーンアップする作業はかなりリソースを消費するのです
- 現在のごみ箱の状況を確認してみましょう:
- SQL > SHOW RECYCLEBIN;
- ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME------------- ---------------------------- ----------- -------------------TEST_RBIN BIN$2e51YTaSK8TL/mPy+FuA==$0 TABLE 2010-05-27:15:23:45TEST_RBIN BIN$5dF60S3GSEOSSYREaqCg==$0 TABLE 2010-05-27:15:23:43TEST_RBIN BIN$JHCDN9YwQRXjXGOJcCIg==$0 TABLE 2010-05-27:15:23:42
- 追加情報
- deferred_segment_creation
- これは何?
- マニュアル をご覧ください - デフォルトの設定 (TRUE)では、表やその依存オブジェクト(LOB、索引等)のセグメントは、その表に最初の行が挿入されるまで作成されません
- デフォルト値:
- TRUE
- お薦め:
- 多数の表・索引をつくりつつデータは入れない、ということを計画していない限りは、 FALSE に設定します
- 解説/リスク:
- 私の理解が正しければ、このパラメーターはOracle Database 11.2で導入され、EBS、Siebel、SAPのようなアプリケーションが大量の表や索引を作っておきながら対応するモジュールを使用しないために全く使われないといった場合に領域を節約しようとしたものです
- リスクとしては、ある種のクエリはDBA_SEGMENTSやDBA_EXTENTSをチェックして、もしセグメントが割り当てていなければそのオブジェクトがあるのかどうかわからなくなってしまう(実際にはあるのに)ということです。さらに、Data Pumpワーカープロセスで競合が起きるといった問題がみられる場合があります
- 追加情報
- マニュアル の記述もOracle 11.2.0.4以降かなり保守的になっており、私としては賛同できます
一連の表を作成する場合で、多数の表に移入が行われないことが明らかなときは、その前にこのパラメータにtrue
を設定することを検討してください。この設定によって、ディスク領域が節約され、インストール時間も短縮されます。
..
0 件のコメント:
コメントを投稿