** 一時表領域に関するチューニングメモ [#u6e4a406]

#setlinebreak(on);

◆チューニング指針
1. メモリソート率を上げる(ディスクソート率を下げる)
2. ディスクソート時に使用される一時表領域の割り当てを変更する
 2.1 用途によってDBユーザを分け、それぞれのユーザ毎に一時表領域を割り当てる
 2.2 同じスキーマのオブジェクトを参照できるように、一方のユーザに権限付与、
   及びシノニムの作成を行う(テーブル、シーケンス等)

(参照URL)
http://www.atmarkit.co.jp/fdb/rensai/orasql04/orasql04_2.html
http://www50.tok2.com/home/oppama/oracle-gold-pt.html
http://perfopy.ashisuto.co.jp/samples/atmarkit/atmarkit_part_shorttime6.html
http://otn.oracle.co.jp/forum/thread.jspa?threadID=3001701
http://www.insight-tec.com/mailmagazine/ora3/vol036.html
http://www.insight-tec.com/mailmagazine/ora3/vol044.html
http://www.keynus.co.jp/~uhara/dbms/oracle/size_mng.pdf

===============================================================
1. メモリソート率を上げる(ディスクソート率を下げる)
===============================================================

 /*
  共有サーバーか専用サーバーかを確認する
  */
 SELECT CASE WHEN SERVER = 'SHARED' THEN '共有サーバー'
             WHEN SERVER = 'DEDICATED' THEN '専用サーバー'
             ELSE '?接続'
        END CASE
   FROM V$SESSION 
  WHERE USERNAME = 'DAISUKE'

 /* メモリソート率を求める
   sorts (memory)  メモリー上でソートした回数
   sorts (disk)    ディスク上でソートした回数
   sorts (rows)    ソートされた行の合計数
   ※下記SQLで得られるのは,ORACLEが起動してからのメモリーソート率
   ※メモリーソート率が90%以下の場合は初期化パラメータを調整
 */
 SELECT A.VALUE * 100 / (A.VALUE+B.VALUE) MEM_SORT_RATE
  FROM V$SYSSTAT A,V$SYSSTAT B
 WHERE A.NAME='sorts (memory)' AND B.NAME='sorts (disk)';

 /*
   workarea_size_policy を調べる
 */
 select value "workarea_size_policy"
   from V$PARAMETER where name = 'workarea_size_policy'

 /*
  共有サーバーの場合、または workarea_size_policy が
  MANUAL の場合は 初期化パラメータ:SORT_AREA_SIZE を調整する
 */

 /*
  専用サーバーの場合、または workarea_size_policy が
  AUTO の場合は 初期化パラメータ:PGA_AGGREGATE_TARGET を調整する
 */

 (参照)
  http://otndnld.oracle.co.jp/document/products/database/oracle9i/901/generic/server/J04110-01.pdf
  自動PGAメモリー管理 449 / 706

  http://otn.oracle.co.jp/products/oracle9i/daily/020.html

===============================================================
2. ディスクソート時に使用される一時表領域の割り当てを変更する
===============================================================

 ---------------------------------------------------------------
  2.1 用途によってDBユーザを分け、それぞれのユーザ毎に一時表領域を割り当てる
 ---------------------------------------------------------------

 ---------------------------------------------------------------
  2.2 同じスキーマのオブジェクトを参照できるように、一方のユーザに権限付与、及びシノニムの作成を行う
      ※テーブル、シーケンス等
 ---------------------------------------------------------------

 /* 現在使用している一時表領域の確認 */
 select TEMPORARY_TABLESPACE from USER_USERS;
 
 /* db_block_size, sort_area_size の確認 */
 select name, value, value/1024 || 'k' FROM V$PARAMETER where name in ('db_block_size', 'sort_area_size');
 
 /* 必要サイズの算出(initial) 
   ※db_block_size + n * sort_area_size (ここではn=1とした )
 */
 select sum(val) "initial_size(単位:K)" from (
 	select value/1024 val FROM V$PARAMETER where name = 'db_block_size'
 	union
 	select value/1024 * 1 val FROM V$PARAMETER where name = 'sort_area_size'
 );
 
 /* 必要サイズの算出(datafile)
   ※DBMS_SPACEパッケージを使用した方がよいかも
 */
 select max(table_size)/1024 "datafile_size(単位:K)" from (
 	select table_name, num_rows * avg_row_len table_size from user_tables
 );
 
 /* 一時表領域の作成 */
 create tablespace 一時表領域名
 datafile '/xxxx/xxxxx/xxxxx/xxxxx.ora' size 算出したdatafileサイズ * 2
 default storage (initial 算出したinitialサイズ next 算出したinitialサイズ pctincrease 0) temporary;
 
 /* ユーザの一時表領域を変更する */
 ALTER USER ユーザ名 TEMPORARY TABLESPACE 一時表領域名;


トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS