10gのこんな変更点、ご存じですか?
さて、アップグレード作業が完了したので早速Oracle Database 11gの新機能を解説したいところですが、まずは前バージョンであるOracle Database 10gでの重要な変更点について復習しておきたいと思います。数ある10gからの変更点の中から、今回はちょっと地味であまり知られていない(?)次の3点について解説します。
- 共有プールの計算方法
- ハッシュ・アルゴリズムによるグルーピング処理
- スリムになったCONNECTロール
共有プールの計算方法
Oracle Database 10g Release 1から、共有プールの計算方法が変更されました。10g Release 1より前のリリースでは、割り当てられる共有プール・メモリーの量は以下のように算出されます。
【割り当てられる共有プール・メモリーの量】 =
【SHARED_POOL_SIZE初期化パラメータの値】 +
【インスタンス起動時に計算された内部SGAオーバーヘッドの量】
『内部SGAオーバーヘッド』とは、他の複数の初期化パラメータの値に基づいて起動時にOracle Databaseによって割り当てられるメモリーです。
このメモリーは、SGAのさまざまなサーバー・コンポーネントの状態を維持するために使用されます。たとえば、SHARED_POOL_SIZEパラメータが64MBに設定されていて、算出された内部SGAオーバーヘッドの値が12MBである場合、共有プールの実際のサイズは64+12=76MBですが、SHARED_POOL_SIZEパラメータの値は64MBと表示されます。
10g Release 1以降のリリースでは、内部SGAオーバーヘッドのサイズは、ユーザーが指定するSHARED_POOL_SIZEの値に含まれます。つまり、起動時に割り当てられる共有プール・メモリーの量は、SHARED_POOL_SIZE初期化パラメータの値と等しくなります。
したがって、このパラメータには、必要な共有プール・サイズに内部SGAオーバーヘッドを加えた値を設定しなければなりません。前述の例の場合、起動時にSHARED_POOL_SIZEパラメータの値が64MBに設定されているとすると、内部SGAオーバーヘッドの値が変わっていなければ、起動後に使用可能な共有プールの値は64-12=52MBになります。起動後に共有プール・メモリーとして有効な値を64MB維持するには、SHARED_POOL_SIZEパラメータを64+12=76MBに設定する必要があります。
内部SGAオーバーヘッド(共有プールの起動オーバーヘッドとも呼ばれます)の正確な値は、V$SGAINFOビューから取得することができます。
SQL> CONNECT / AS SYSDBA 接続されました。 SQL> COLUMN NAME FORMAT A40 SQL> COLUMN BYTES FORMAT 999,999,999,990 SQL> COLUMN RESIZE FORMAT A6 SQL> SQL> SELECT * FROM V$SGAINFO; NAME BYTES RESIZE ---------------------------------------- ---------------- ------ Fixed SGA Size 2,176,168 No Redo Buffers 7,397,376 No Buffer Cache Size 956,301,312 Yes Shared Pool Size 469,762,048 Yes Large Pool Size 16,777,216 Yes Java Pool Size 134,217,728 Yes Streams Pool Size 16,777,216 Yes Shared IO Pool Size 0 Yes Granule Size 16,777,216 No Maximum SGA Size 1,603,411,968 No Startup overhead in Shared Pool 100,663,296 No Free SGA Memory Available 0
ユーザー指定のSHARED_POOL_SIZEの値が小さすぎるために内部SGAオーバーヘッドの必要量にも満たない場合は、起動時にORA-00371エラー(「共有プール・メモリーが不足しています」)が発生しSHARED_POOL_SIZEパラメータの推奨値が提示されます。
また、10g Release 1より前のリリースから移行する場合、11gの移行ユーティリティでは、アップグレード前の環境の内部SGAオーバーヘッドの値とSHARED_POOL_SIZEパラメータの古い値に基づいて、SHARED_POOL_SIZEパラメータの新しい推奨値が提示されます。
なお、Oracle Database 10g Release 1から、共有メモリーの管理方式として新たに『自動共有メモリー管理モード』が提供されるようになりました。自動共有メモリー管理モードでは、Oracle Databaseが適切なSHARED_POOL_SIZE初期化パラメータのサイズを自動的に設定してくれるので、内部SGAオーバーヘッドや共有プールの計算方法を気にする必要はありません。特にシビアなチューニングを必要としない環境であれば、便利な自動共有メモリー管理モードの利用をお薦めます。