2012年10月30日火曜日

Outline & OAF

後で詳細にトレースすること。
OAFで実行されるSQLをStored Outline化し、DBA_OUTLINES、V$SQLを参照して、使われるかどうかを見たが、使われず。一度ログオフして、再度参照するとDBA_OUTLINEのUSE列が変化した。VO側のキャッシュのせいなのだろうか?


2012年10月27日土曜日

Migrate From Stored Outline To SQL Plan Management

Stored Outlineは次バージョン以降で廃止が予定されているということで、SQL Plan Management Plan(以下、SPM)をオラクルは今後推奨。また、Stored OutlineからSPMへのi移行を実施するパッケージ・プロシージャが提供されている。

【必要な権限】
DBMS_SPMパッケージに対する実行権限
ADMINISTER SQL MANAGEMENT OBJECT権限

だと思う。

【移行方法】
DBA_OUTLINES のMIGRATED列が  'NOT-MIGRATED'のアウトラインが、移行前のアウトラインである。 DBMS_SPM.MIGRATE_STORED_OUTLINE ファンクションを使用してアウトラインを
ベースラインに移行するCATEGORY 列を用いて対象を絞り込んで移行するには以下の様に設定する。
-----------------------
DECLARE
  my_rep CLOB;
BEGIN
  my_rep := DBMS_SPM.MIGRATE_STORED_OUTLINE( 
  attribute_name => 'CATEGORYの列を指定', 
  attribute_value => 'OUTLINE名を指定'
  );
END;
/
---------------------- 

【格納されているベースラインの実行計画を見る方法】
select * from table(dbms_xplan.display_sql_plan_baseline(sql_handle=>'XXXXXX'));
【格納されているベースラインを使用したかどうかを確認する方法】
 Stored Outlineでは、DBA_OUTLINESやV$SQLを参照するとアウトラインを使用したかどうかが
 わかるが、ベースラインでは、そのようなビューは見当たらない。あくませ、Acceptedしている
 かどうかである。

その場合、
 1. set autotrace traceonly explainでNotesを見るか
 2. select * from table(dbms_xplan.display_cursor('SQL_ID','CHILD_NUMBER')); 
 でSQL_IDとCHILD_NUMBERを指定してNotesを見るかのどちらかである。
'XXXXXX'は、dba_sql_plan_baselinesビューのsql_handle列を指定する。

2012年10月25日木曜日

emacs -- config --

とりあえず。勉強は続ける。

;; ツールバーを非表示
(tool-bar-mode 0)

;; カラム数を表示
(column-number-mode t)

;; TABの表示幅
(setq-default tab-width 4)

;; 時計の表示
(display-time-mode t)

;; 行番号を常に表示する
(global-linum-mode t)

;; Title Bar
(setq frame-title-format "%f")

;; cua-modeの設定
(cua-mode t) ; cua-mode on
(setq cua-enable-cua-keys nil) ; CUAキーバインドを無効

フィルタ述語とアクセス述語

基本をメモ

フィルタ述語: 行頭の番号に対応するオペレーションの実行時に、取得したデータから 対象データを抜粋(フィルタ)する処理

アクセス述語: 行頭の番号に対応するオペレーションの実行時に、表示された述語を使用して データにアクセスしたことを示す。一般にINDEX Scan系の処理の場合に表示される。

アクセス述語の場合、データが選択的に選ばれるため、ブロックアクセス量は少なく、
フィルター処理はデータにアクセスした後に絞込みをかける為、アクセス述語に比べるとブロック数
は多い。

2012年10月22日月曜日

問い合わせによる一時変数の置換 --- refactoring ---

一時変数は、一時的でかつローカルな使用の為、メソッドの内容を理解してたどり着く必要がある。つまり、長いメソッドになりがちである。それらを問い合わせメソッドにしてしまうことにより、内容の理解を容易にし、他のメソッドからも呼び出すことが可能になる。

[リファクタリングを行いやすい状況]
 ・ 一度だけ代入される一時変数
 ・  代入される値をつくる式が副作用を起こしにくい。

[Example: from Refactoring by Martin Fowler]
double basePrice = _itemprice * _quantity;
if (basePrice > 10000)
  return basePrice * 0.95
else
  return basePrice * 0.98


   if (baseProce() > 1000)
     return basePrice * 0.95
   else
     return basePrice * 0.98

double basePrice() {
  return _itemprice * _quantity;
}

2012年10月12日金曜日

CURSOR_SHARING Memo

============================================
CURSOR_SHARINGでは、同じカーソルを共有するSQL文の種類を判断。
    FORCE
      既存のカーソルを共有する場合、またはカーソル・プランが最適ではない場合に、新しいカーソルの作成が許可される。
    SIMILAR
      リテラルがわずかに異なっても、その他が同じSQL文であれば、
    その異なるリテラルがSQL文の意味または計画が最適化される程度のいずれかに
    影響しないかぎり、カーソルが共有される。
    EXACT
      同一のテキストを含む文のみに、前述のカーソルの共有が許可される。
============================================

9i当時はSimilarにすることで、複数のリテラル値でも共有カーソル化されると売りだったが、
現状のオラクルコメントは以下の通り。優れたカーソル共有」機能には更に分析が必要。

CURSOR_SHARING=SIMILARの設定は11.1以降のリリースでは推奨されません。
次のリリース(12.1)ではこの値は廃止される可能性があります。
11.1以降のリリースではCURSOR_SHARING=FORCEを設定し、3.でも紹介した11.1の
新機能「優れたカーソル共有」を利用することが推奨されています

2012年10月9日火曜日

GitHub Manual

とりあえず、ソースを「GitHub」にUpしてみた。使い方は、まだわかっていないが、WWWに転がっている各種ドキュメントを見ながらやると、何だかんだで、できてしまうのが、今の時代の凄さを感じるな、やはり。

http://git-scm.com/documentation

SQL Developer Custom Report 001 - v$sql_monitor -

SQL Developerでのレポート作成実施。v$sql_monitorからsqlを抽出し、その実行計画を子レポートで出力する。

ダウンロードして、SQL Developerのレポートタブで取り込んでください。
間違っていたりしたら、改善ポイントを御指摘頂けると、嬉しいです

RealtimeSQLMonitor_ExecutePlan.xml