Oracle Diagnostics
「Oracle技術の処方箋、毎日SQLと簡単トラブル対処方法」を発行されている
サーチマン佐藤さんが新しいレポートを公開されました。
http://www.searchman.info/sucrepo/click_ora_index.html
Object Browserという有名なDBツールを利用されての
簡単なパフォーマンス改善方法です。
以前発行された「バックアップリカバリー超具体論」
(http://www.searchman.info/sucrepo/10g_index.html)
でもそうなのですが、レポートが大変見やすく分かりやすくまとめられていて、
初心者でも抵抗無く吸収することができると思います。
(今ならモニター価格で3,700円です!!!)
------------------------------------------------------------------------------
Oracleパフォーマンスチューニングを効率良くやるためには、実は秘密があるのです。
なぜ、あの人は素早くできるのか?
DBAとして技術力があるから?いいえ違います。
この秘密を知りたいかたは、続きをごらんください。
http://www.searchman.info/sucrepo/click_ora_index.html
------------------------------------------------------------------------------
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
英語で Oracle! #031 2006/12/13
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
今までの目次です。
個人的に気に入らなかったブログのレイアウトを一新してみました^^
http://imoment.blogspot.com/2006/11/toctable-of-contents.html
おはようございます。
本日もご購読いただきありがとうございます。
少し風邪気味です。少し前にひどい風邪をひいたばかりなのに。。。
今日はOracle InternalsというJulian Dykeさんが運営しているサイトを
ご紹介します。Julian Dykeさんはイギリス中心に活動されている
独立コンサルタントで、15年以上のOracle経験を持ち、
UKOUG RAC SIGのChairも務めていらっしゃいます。
今回引用するpresentationはOracleの様々な問題を診断(diagnostics)
する為の情報がぎっしり詰まっています。
前回同様に気になるところをpickupしました。
<要注意!>
ほとんどの情報がUndocumented,Unsupportedの情報になりますので、
商用環境でのご利用にはご自分の責任で適用いただくか、
Supportへの確認を行っていただきますようお願いいたします。
■ Oracle Internals
http://julian.dyke.users.btopenworld.com/com/index.htm
■ 引用Power Pointファイル
http://julian.dyke.users.btopenworld.com/com/Presentations/Presentations.html#OracleDiagnostics
(ちょっと前までダウンしていたので、アクセスできない方はご連絡ください)
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
記事本文
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
◎ Optimiser Decisions
◆ To trace the computations performed by the CBO when optimising SQL
statements use
ALTER SESSION SET EVENTS '10053 TRACE NAME CONTEXT FOREVER, LEVEL';
Level Description
1 Print statistics and computations
2 Print computations only
See "A Look under the Hood of CBO : The 10053 Event"
Wolfgang Breitling - www.centrexcc.com
◎ Enabling SQL Trace
◆ To enable at instance level
The SQL_TRACE parameter cannot be modified directly using ALTER SYSTEM.
Instead use
-- Enable SQL trace for instance
ALTER SYSTEM SET EVENTS '10046 trace name context forever, level 1;
-- Disable SQL trace for instance
ALTER SYSTEM SET EVENTS '10046 trace name context off';
◎ ORADEBUG
◆ To suspend the current process
ORADEBUG SUSPEND
◆ To resume the current process
ORADEBUG RESUME
◆ While the process is suspended ORADEBUG can be used to dump perform
memory/state dumps
◆ Can be also used to temporarily suspend long running processes
◎ Dumping a Database Block (Hex)
◆ To dump a database block in hexadecimal enable event 10289
ALTER SESSION SET EVENTS
'10289 trace name context forever, level 1';
◆ Then dump the block using
ALTER SYSTEM DUMP DATAFILE
BLOCK;
◆ On Unix/Linux systems blocks can also be dumped using od
dd bs=8k if= skip=200 count=4 od -x
◆ Force DBWR to flush recently written blocks to disk using
ALTER SYSTEM CHECKPOINT;
or
ALTER SYSTEM SWITCH LOGFILE;
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
英語の解釈
※自然な語順で解釈する癖をつけるために敢えて不自然な日本語に
なっているところがあります。 ()書きは後続修飾節の修飾対象です。
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
◎ Optimiser Decisions
オプティマイザの決定内容
◆ To trace the computations performed by the CBO when optimising SQL
statements use
SQL最適化時のCBOによる計算内容のトレース
ALTER SESSION SET EVENTS '10053 TRACE NAME CONTEXT FOREVER, LEVEL';
Level Description
レベル 説明
1 Print statistics and computations
統計と計算の表示
2 Print computations only
計算のみ表示
◎ Enabling SQL Trace
SQLトレースの有効化
◆ To enable at instance level
インスタンスレベルでの有効化
The SQL_TRACE parameter cannot be modified directly using ALTER SYSTEM.
Instead use
SQL_TRACEパラメタはALTER SYSTEMで直接変更できません。
代わりに(以下の文を)使用します。
-- Enable SQL trace for instance
インスタンスのSQLトレースの有効化
ALTER SYSTEM SET EVENTS '10046 trace name context forever, level 1;
-- Disable SQL trace for instance
インスタンスのSQLトレースの無効化
ALTER SYSTEM SET EVENTS '10046 trace name context off';
◎ ORADEBUG
◆ To suspend the current process
現在のプロセスの停止
ORADEBUG SUSPEND
◆ To resume the current process
現在のプロセスの再開
ORADEBUG RESUME
◆ While the process is suspended ORADEBUG can be used to dump perform
memory/state dumps
プロセスが停止している間、ORADEBUGはメモリや状態のダンプを取得のために
利用できます。
◆ Can be also used to temporarily suspend long running processes
また、長時間実行しているプロセスを一時停止するためにも利用できます。
◎ Dumping a Database Block (Hex)
DBブロックのダンプ(16進)
◆ To dump a database block in hexadecimal enable event 10289
DBブロックを16進でダンプするためのイベント10289を有効化
ALTER SESSION SET EVENTS
'10289 trace name context forever, level 1';
◆ Then dump the block using
その後、使用しているブロックをダンプ
ALTER SYSTEM DUMP DATAFILE
BLOCK;
◆ On Unix/Linux systems blocks can also be dumped using od
UnixまたはLinuxシステムのブロックはodコマンドを利用することで
ダンプすることもできます。
dd bs=8k if= skip=200 count=4 od -x
◆ Force DBWR to flush recently written blocks to disk using
DBWRプロセスに対して最近書き込まれたブロックをDISKへフラッシュさせる方法
ALTER SYSTEM CHECKPOINT;
or
ALTER SYSTEM SWITCH LOGFILE;
------------------------------------------------------
★ 英語の語順での解釈の元祖はこちら
SIM:スーパーエルマー
http://px.a8.net/svt/ejp?a8mat=10BZJG+AZBUGI+PJQ+60H7M
通常の体験CDよりも豪華な体験版CDが手元にあるので
ご希望の方はこのメールのreplyにて希望の旨お知らせ下さい。
また上記リンクから無料体験版CDを申し込まれた方も
アフィリエイト報酬分をお送りしますのでお知らせ下さい。
------------------------------------------------------
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
英語解説
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
Optimiser Decisions
※Optimiser:前号でも出ましたが、SQL文から実際のデータへのアクセス方法を
考えるOracleの機能です。
様々なアクセスパターンのアクセスにかかるコストを計算し、
通常はコストが最も低いアクセス方法を計画します。
また、条件を満たす場合はSQL文を変換したり、
条件を追加したりします。
<アクセス方法を決める為の主な元ネタ>
・統計情報
・ヒント
・OPTIMIZERパラメタ
<主なアクセス方法の例>
・フルスキャン
・INDEXフルスキャン
・INDEXの部分スキャン
・使用INDEXの選択
・JOIN順序
・JOIN方法
・特定のパーティションのみにアクセス
・結果が変わらないならマテリアライズドビューにアクセス先切り替え
Enabling SQL Trace
※Trace:実行結果などの追跡結果。SQL Traceはtkprofユーティリティと併用することで
平易にSQLの実行結果を詳細に確認することができます。
To enable at instance level
※instance:Oracleにおけるインスタンスとはデータベースの実体を指します。
DBの定義に従って、SGAなどのメモリが割り当てられ、バックグラウンド
プロセスが起動した状態です。
instance levelでSQL TRACEを有効にするということは、該当するinstance
で実行されるSQL全てがTraceファイル作成対象になるということです。
通常これは大変なことなので、SESSIONレベルやアプリケーションレベル
でのTRACEを取得します。
The SQL_TRACE parameter cannot be modified directly using ALTER SYSTEM.
Instead use
※9iまではalter systemによるsql_traceの有効化が指定できませんでした。
ORADEBUG
※非公開のOracleツールです。主にサポートの指示によって利用されます。
Dumping a Database Block (Hex)
※Hex:16進数
Dumping:ファイルやメモリの内容を表す情報を出力することや情報そのもの
指してダンプと呼びます。
On Unix/Linux systems blocks can also be dumped using od
※unix系のodコマンドは入力された情報を8進または16進で表示することができます。
dd bs=8k if= skip=200 count=4 od -x
※dd:ファイルシステムに依存せずにデータをコピーできるコマンド
全額返金保証があるので気軽にトライできますね。
http://www.searchman.info/sucrepo/click_ora_index.html
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
★ 英語ぷちクイズ ★
※答えと思うリンクをぷちっとクリックしてください。
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
☆イチロー選手の今年の打率は.322でした。野球における一般的なこの数字の
読み方は?
◆dot three twenty two
┗ http://clickenquete.com/a/a.php?M0002066Q0018523A19330
◆point three tewnty two
┗ http://clickenquete.com/a/a.php?M0002066Q0018523A26e31
◆zero point three twenty two
┗ http://clickenquete.com/a/a.php?M0002066Q0018523A3d5f0
◆three two two
┗ http://clickenquete.com/a/a.php?M0002066Q0018523A43cce
◆three twenty two
┗ http://clickenquete.com/a/a.php?M0002066Q0018523A5e74b
◆period three two two
┗ http://clickenquete.com/a/a.php?M0002066Q0018523A6bc96
○結果を見る
┗ http://clickenquete.com/a/r.php?Q0018523C8f53
締切:2006年12月20日18時00分
協力:クリックアンケート http://clickenquete.com/
こたえは次回に発表します。
------------------------------------------------------
★ ランキングにも一応参加しております
気が向いたらクリックお願いします。
「ブログ村、IT技術ブログランキング」
http://it.blogmura.com/in/080814.html
------------------------------------------------------
■ 前回のこたえ
☆食べたものが美味しくて気に入った場合に使うとき、一般的なのはどちら?
◆I love it.
◆I'm lovin' it.
○結果を見る
┗ http://clickenquete.com/a/r.php?Q0018291C372b
こたえはI love it.です。
i'm lovin' it.はみなさんもご存知マクドナルドの
worldwideなキャッチフレーズです。
ですから、マックのコマーシャルを真似てふざけたい時は、
マック片手にニッコリと発声しましょう^^
原則として状態を表す動詞を現在進行形にはしないので、
文法的にはあまり正しくありません。
Google Hit数(Goopus)によると
"I love it"
→7,770,000件
"i'm lovin' it" OR "i am loving it" OR "i'm loving it"
→1,380,000件(うち、"i'm lovin' it"905,000件)
でした。
私の確認した限りでは、少なくとも以下の国では「I'm lovin' it」が
マックの宣伝で使われていると思われます。
australia ,austria ,belgium ,bulgaria ,croatia ,czech republic
,denmark ,finland ,honkon ,hungary ,india ,israel ,japan ,italy ,south korea
,malaysia ,netherlands ,new zealand ,poland ,slovakia ,singapore ,slovenia
,south africa ,spain ,sweden ,switzerland ,taiwan ,united kingdom ,usa
I'm lovin' itでふざけているサイトです^^
http://www.thesneeze.com/mt-archives/000357.php
驚くべきことにこの後数分後に
"i'm lovin' it" OR "i am loving it" OR "i'm loving it"
を再検索したところ、1,420,000件に増加していました。
マックパワーで物凄い勢いでページが増加しています。
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
★ OracleTest ★
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
☆パーティション関連で操作でできない操作は?
◆alter table t_xxx move partition p_xxx tablespace ts_xxx;
┗ http://clickenquete.com/a/a.php?M0002066Q0018528A162d7
◆alter table t_xxx modify default attributes tablespace ts_xxx;
┗ http://clickenquete.com/a/a.php?M0002066Q0018528A22edb
◆alter table t_xxx shrink space partition p_xxx;
┗ http://clickenquete.com/a/a.php?M0002066Q0018528A31c12
◆alter table t_xxx truncate partition p_xxx;
┗ http://clickenquete.com/a/a.php?M0002066Q0018528A47ba4
◆alter table t_xxx split partition p_xxx at ('xxx') into (partition p_xxx1,partition p_xxx2);
┗ http://clickenquete.com/a/a.php?M0002066Q0018528A5c56a
○結果を見る
┗ http://clickenquete.com/a/r.php?Q0018528C827e
締切:2006年12月20日18時00分
協力:クリックアンケート http://clickenquete.com/
こたえは次回に発表します。
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
Oracle解説
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
今回はイベント10053について解説いたします。
(他のOradebugや様々なDumpの取得方法などは別の機会で取り上げたいと思います)
イベント10053はオプティマイザが実行計画を生成する過程を詳細にトレースした内容を
出力します。
sqlplusからSQLを実行できる場合は、alter sessionでイベントを設定します。
-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-
イベント設定開始
alter session set events '10053 trace name context forever, level {12}';
イベント設定終了
alter session set events '10053 trace name context off';
-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-
◆ level1(default):統計情報とコスト計算の結果を表示
◆ level2 :コスト計算の結果のみ表示
異なるsessionのtraceをしたい場合はsession idを指定してイベント設定します。
-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-
イベント設定開始
exec sys.dbms_system.set_ev ( <sid(session id)>,<serial#>,10053,{12},'');
イベント設定終了
exec sys.dbms_system.set_ev( <sid(session id)>,<serial#>,10053,0,'');
-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-
★それでは実際にトレースを取ってみましょう。
-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-
sqlplus / as sysdba
alter session set events '10053 trace name context forever, level 1';
-- 確認対象のSQL実行(注意)
select count(*) from dba_tables;
COUNT(*)
----------
1540
alter session set events '10053 trace name context off';
-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-
(注意)イベント10053でtrace fileをdumpさせる為にはハードパースが必要です。
繰り返し練習する場合はSQL文を微妙に変化させましょう。
(例:小文字を大文字に変える)
ライブラリキャッシュに同じSQL文が残っていると原則ソフトパースとなり
ハードパースされません。
★ traceの出力先を確認方法1。(user_dump_destの値)
-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-
show parameter user_dump_dest
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
user_dump_dest string C:\ORACLE\PRODUCT\10.2.0\ADMIN
\ORCL\UDUMP
-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-
★ traceの出力先を確認方法2。(oradebugの使用)
(ピンポイントでファイル名までわかります)
-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-
SQL>oradebug setmypid
文が処理されました。
SQL>oradebug tracefile_name
c:\oracle\product\10.2.0\admin\orcl\udump\orcl_ora_4624.trc
-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-
★トレースファイル確認
(説明は10gR2をベースに実施しています)
★序盤はOS情報、製品情報、ハードウェア情報などが続き
「Registered qb」というキーワードが出てきます。
-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-
Registered qb: SEL$1 0x87ba6b4 (PARSER)142321332
signature (): qb_name=SEL$1 nbfros=1 flg=0
fro(0): flg=5 objn=2439 hint_alias="DBA_TABLES"@"SEL$1"
Registered qb: SEL$2 0x87b60c4 (PARSER)142303428
signature (): qb_name=SEL$2 nbfros=10 flg=0
-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-
qbはquery block(問合せブロック)の略です。
最初のqb(SEL$1)は指定したselect文「select count(*) from dba_tables」を指します。
次のqb(SEL$2)はdba_tablesビューの定義内容を展開したものです。
☆dba_tablesの定義内容を確認
-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-
set long 20000
set pages 1000
select text from dba_views where view_name='DBA_TABLES';
-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-
上記SQLで、VIEWの定義内容が確認できます。
検索結果は以下の通りです。
-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-
select
~中略~
from sys.user$ u, sys.ts$ ts, sys.seg$ s, sys.obj$ co, sys.tab$ t, sys.obj$ o,
sys.obj$ cx, sys.user$ cu, x$ksppcv ksppcv, x$ksppi ksppi
where o.owner# = u.user#
and o.obj# = t.obj#
and bitand(t.property, 1) = 0
and bitand(o.flags, 128) = 0
and t.bobj# = co.obj# (+)
and t.ts# = ts.ts#
and t.file# = s.file# (+)
and t.block# = s.block# (+)
and t.ts# = s.ts# (+)
and t.dataobj# = cx.obj# (+)
and cx.owner# = cu.user# (+)
and ksppi.indx = ksppcv.indx
and ksppi.ksppinm = '_dml_monitoring_enabled'
-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-
★次に
**************************
Predicate Move-Around (PM)
**************************
というキーワード(推移述語)が出てきます。
predicate(述語)とは問合せ条件の単位です。
A表とB表のJOINをする際に、
A表に指定された条件がB表にも適用可能な場合、
オプティマイザはB表にも同じ条件を追加することで、
JOINの対象行を減らすことを試みます。
今回は
PM: Considering predicate move-around in SEL$1 (#0).
PM: Checking validity of predicate move-around in SEL$1 (#0).
のように後ろに(#0):0件となっているので、試みたものの
対象はなかったということになっています。
オプティマイザは初期段階で色々な変換を試みます。
上記のVIEWのSELECT文をVIEW定義内容に置き換えるのも
その変換の一種です。
★色々な変換の試みがしばらく続いた後、
「Current SQL statement for this session:」というところで、
実行したSQLが表示されています。
******************************************
Current SQL statement for this session:
select count(*) from dba_tables
*******************************************
★次にlegendという行以降で略語の説明が始まります。
(legendは伝説の他に説明という意味も持っています)
*******************************************
Legend
The following abbreviations are used by optimizer trace.
*******************************************
★続いてオプティマイザに関連した初期化パラメタの一覧と使用されたヒントが
表示されます。
(変更されている値とデフォルト値が分けて表示されています)
***************************************
PARAMETERS USED BY THE OPTIMIZER
********************************
*************************************
PARAMETERS WITH ALTERED VALUES
******************************
pga_aggregate_target = 102400 KB
~略~
*************************************
PARAMETERS WITH DEFAULT VALUES
******************************
optimizer_mode_hinted = false
~略~
***************************************
PARAMETERS IN OPT_PARAM HINT
****************************
★この後統計情報が表示されています。
使用しているテーブルの統計情報が順に表示されます。
*****************************
SYSTEM STATISTICS INFORMATION
*****************************
***************************************
BASE STATISTICAL INFORMATION
***********************
Table: X$KSPPI Alias: KSPPI (NOT ANALYZED)
***************************************
※最初のX$で始まる2つのテーブルは隠しパラメタなどを
確認する為のOracle内部の特別なテーブルなので
飛ばします。
***********************
Table Stats::
Table: USER$ Alias: CU
#Rows: 61 #Blks: 3 AvgRowLen: 81.00
Column (#1): USER#(NUMBER)
AvgLen: 3.00 NDV: 61 Nulls: 0 Density: 0.016393 Min: 0 Max: 63
Index Stats::
Index: I_USER# Col#: 1
LVLS: 0 #LB: 1 #DK: 26 LB/K: 1.00 DB/K: 1.00 CLUF: 2.00
Index: I_USER1 Col#: 2
LVLS: 0 #LB: 1 #DK: 61 LB/K: 1.00 DB/K: 1.00 CLUF: 30.00
***********************
★上記「Table Stats」の説明です。
-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-
Table Stats::
Table:テーブル名 Alias:テーブルの別名
#Rows:行数 #Blks:ブロック数 AvgRowLen:平均行長
Column (列番号): 列名(属性)
AvgLen: 平均列長 NDV: ユニークな値の数 Nulls: null値の数 Density: 列の密度 Min: 最小値 Max: 最大値
以下のディクショナリに対応した項目が表示されています。
<dba_tablesビュー (パーティション化表はdba_tab_partitionsビュー)>
num_rows:行数
blocks:ブロック数
avg_row_len:平均行長
<dba_tab_columnsビュー(パーティション化表はdba_part_col_statisticsビュー)>
num_distinct:ユニークな値の数
low_value:最小値(rawデータの為、直接参照してもわかりづらいです)
high_value:最大値(rawデータの為、直接参照してもわかりづらいです)
density:列の密度
num_nulls:nullの数
※num_nullsを除く値はOracle7との下位互換用の列の為、本来は
{tabpart}_colstatisticsを参照する。
-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-
★上記「Index Stats」の説明です。
-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-
Index Stats::
Index: index名 Col#: 列番号
LVLS: Bツリーレベル(ルートブロックからリーフブロックまでの深さ)
#LB: リーフブロック数
#DK: ユニークなKEYの数
LB/K: ユニークKEY毎の平均リーフブロック数
DB/K: ユニークKEY毎の実際のテーブル側の平均ブロック数
CLUF: INDEXの順番通りに検索した時(INDEX RANGE SCAN)、
実際のテーブル側の行が同じブロックに格納されていない行の数
この数値がテーブルの行数に近い程、INDEX RANGE SCANの効率が
悪くなる可能性があります。
以下のディクショナリに対応した項目が表示されています。
<dba_indexes(パーティション表のINDEXならdba_ind_partitions)>
blevel:LVLS
leaf_blocks:#LB
distinct_keys:#DK
avg_leaf_blocks_per_key:LB/K
avg_data_blocks_per_key:DB/K
clustering_factor:CLUF
-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-
★実行計画の基礎となるCOSTの算出が始まります。
テーブルのフルスキャン、インデックスのフルスキャン、
インデックスのFastFullScanなどのコストを比較しています。
***************************************
SINGLE TABLE ACCESS PATH
***************************************
★この後膨大な量のJOINパターンのCOST確認が始まります。
***************************************
Considering cardinality-based initial join order.
***********************
★最後に実行計画が表示されます。
============
Plan Table
============
------------------------------------------------+-----------------------------------+
Id Operation Name Rows Bytes Cost Time
------------------------------------------------+-----------------------------------+
0 SELECT STATEMENT 508
1 SORT AGGREGATE 1 141
2 HASH JOIN RIGHT OUTER 3427 472K 508 00:00:07
3 TABLE ACCESS FULL SEG$ 4191 45K 29 00:00:01
4 HASH JOIN 1553 197K 478 00:00:06
5 TABLE ACCESS FULL USER$ 61 183 2 00:00:01
6 HASH JOIN 1553 193K 475 00:00:06
7 HASH JOIN RIGHT OUTER 1540 174K 336 00:00:05
8 TABLE ACCESS FULL USER$ 61 183 2 00:00:01
9 HASH JOIN OUTER 1540 170K 334 00:00:05
10 NESTED LOOPS OUTER 1540 158K 197 00:00:03
11 HASH JOIN 1540 150K 197 00:00:03
12 MERGE JOIN CARTESIAN 10 710 5 00:00:01
13 HASH JOIN 1 68 1 00:00:01
14 FIXED TABLE FULL X$KSPPI 1 55 0
15 FIXED TABLE FULL X$KSPPCV 100 1300 0
16 BUFFER SORT 10 30 5 00:00:01
17 TABLE ACCESS FULL TS$ 10 30 4 00:00:01
18 TABLE ACCESS FULL TAB$ 1540 44K 192 00:00:03
19 INDEX UNIQUE SCAN I_OBJ1 1 5 0
20 TABLE ACCESS FULL OBJ$ 50K 399K 136 00:00:02
21 TABLE ACCESS FULL OBJ$ 50K 549K 138 00:00:02
------------------------------------------------+-----------------------------------+
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
編集後記
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
今号からご購読いただいた皆様はじめまして。
本日も最後まで読んでいただきありがとうございます。
昨年から応援しており、blogでも勝手にリンクしているアルケミストさんの
メジャーデビューが決定したそうです。
しかも吉本興業系のところみたいです。
http://www.voicerecords.net/alchemist/frame.php?page=biography¶m1=1¶m2=20061200
デビューは2007年4月とのこと。HEYHEYHEYとかに出てきちゃうんでしょうか。
これからもフリーライブは続けるとのことですが、
嬉しさの反面さみしさも大きいですね。
嫁さんのアカペラ教室の先生がボイスパーカッションなどをしているので、
アカペラ教室の存続も心配ですね。
複雑な気分ですが、いつまでも素敵な音楽活動が続けられることを祈っています。
それではまた。
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
おわりに
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
記述誤りなどのご指摘、
記事に関する疑問点・質問・感想・ご意見・ご感想など
yakusa_oracle@yahoo.co.jpまでお願い致します。
簡単な自己紹介はこちら
http://pr2.cgiboy.com/S/3191274
バックナンバー兼ブログはこちら
http://imoment.blogspot.com/
登録・解除はこちらから
http://www.mag2.com/m/0000200441.htm
サーチマン佐藤さんが新しいレポートを公開されました。
http://www.searchman.info/sucrepo/click_ora_index.html
Object Browserという有名なDBツールを利用されての
簡単なパフォーマンス改善方法です。
以前発行された「バックアップリカバリー超具体論」
(http://www.searchman.info/sucrepo/10g_index.html)
でもそうなのですが、レポートが大変見やすく分かりやすくまとめられていて、
初心者でも抵抗無く吸収することができると思います。
(今ならモニター価格で3,700円です!!!)
------------------------------------------------------------------------------
Oracleパフォーマンスチューニングを効率良くやるためには、実は秘密があるのです。
なぜ、あの人は素早くできるのか?
DBAとして技術力があるから?いいえ違います。
この秘密を知りたいかたは、続きをごらんください。
http://www.searchman.info/sucrepo/click_ora_index.html
------------------------------------------------------------------------------
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
英語で Oracle! #031 2006/12/13
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
今までの目次です。
個人的に気に入らなかったブログのレイアウトを一新してみました^^
http://imoment.blogspot.com/2006/11/toctable-of-contents.html
おはようございます。
本日もご購読いただきありがとうございます。
少し風邪気味です。少し前にひどい風邪をひいたばかりなのに。。。
今日はOracle InternalsというJulian Dykeさんが運営しているサイトを
ご紹介します。Julian Dykeさんはイギリス中心に活動されている
独立コンサルタントで、15年以上のOracle経験を持ち、
UKOUG RAC SIGのChairも務めていらっしゃいます。
今回引用するpresentationはOracleの様々な問題を診断(diagnostics)
する為の情報がぎっしり詰まっています。
前回同様に気になるところをpickupしました。
<要注意!>
ほとんどの情報がUndocumented,Unsupportedの情報になりますので、
商用環境でのご利用にはご自分の責任で適用いただくか、
Supportへの確認を行っていただきますようお願いいたします。
■ Oracle Internals
http://julian.dyke.users.btopenworld.com/com/index.htm
■ 引用Power Pointファイル
http://julian.dyke.users.btopenworld.com/com/Presentations/Presentations.html#OracleDiagnostics
(ちょっと前までダウンしていたので、アクセスできない方はご連絡ください)
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
記事本文
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
◎ Optimiser Decisions
◆ To trace the computations performed by the CBO when optimising SQL
statements use
ALTER SESSION SET EVENTS '10053 TRACE NAME CONTEXT FOREVER, LEVEL
Level Description
1 Print statistics and computations
2 Print computations only
See "A Look under the Hood of CBO : The 10053 Event"
Wolfgang Breitling - www.centrexcc.com
◎ Enabling SQL Trace
◆ To enable at instance level
The SQL_TRACE parameter cannot be modified directly using ALTER SYSTEM.
Instead use
-- Enable SQL trace for instance
ALTER SYSTEM SET EVENTS '10046 trace name context forever, level 1;
-- Disable SQL trace for instance
ALTER SYSTEM SET EVENTS '10046 trace name context off';
◎ ORADEBUG
◆ To suspend the current process
ORADEBUG SUSPEND
◆ To resume the current process
ORADEBUG RESUME
◆ While the process is suspended ORADEBUG can be used to dump perform
memory/state dumps
◆ Can be also used to temporarily suspend long running processes
◎ Dumping a Database Block (Hex)
◆ To dump a database block in hexadecimal enable event 10289
ALTER SESSION SET EVENTS
'10289 trace name context forever, level 1';
◆ Then dump the block using
ALTER SYSTEM DUMP DATAFILE
BLOCK
◆ On Unix/Linux systems blocks can also be dumped using od
dd bs=8k if=
◆ Force DBWR to flush recently written blocks to disk using
ALTER SYSTEM CHECKPOINT;
or
ALTER SYSTEM SWITCH LOGFILE;
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
英語の解釈
※自然な語順で解釈する癖をつけるために敢えて不自然な日本語に
なっているところがあります。 ()書きは後続修飾節の修飾対象です。
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
◎ Optimiser Decisions
オプティマイザの決定内容
◆ To trace the computations performed by the CBO when optimising SQL
statements use
SQL最適化時のCBOによる計算内容のトレース
ALTER SESSION SET EVENTS '10053 TRACE NAME CONTEXT FOREVER, LEVEL
Level Description
レベル 説明
1 Print statistics and computations
統計と計算の表示
2 Print computations only
計算のみ表示
◎ Enabling SQL Trace
SQLトレースの有効化
◆ To enable at instance level
インスタンスレベルでの有効化
The SQL_TRACE parameter cannot be modified directly using ALTER SYSTEM.
Instead use
SQL_TRACEパラメタはALTER SYSTEMで直接変更できません。
代わりに(以下の文を)使用します。
-- Enable SQL trace for instance
インスタンスのSQLトレースの有効化
ALTER SYSTEM SET EVENTS '10046 trace name context forever, level 1;
-- Disable SQL trace for instance
インスタンスのSQLトレースの無効化
ALTER SYSTEM SET EVENTS '10046 trace name context off';
◎ ORADEBUG
◆ To suspend the current process
現在のプロセスの停止
ORADEBUG SUSPEND
◆ To resume the current process
現在のプロセスの再開
ORADEBUG RESUME
◆ While the process is suspended ORADEBUG can be used to dump perform
memory/state dumps
プロセスが停止している間、ORADEBUGはメモリや状態のダンプを取得のために
利用できます。
◆ Can be also used to temporarily suspend long running processes
また、長時間実行しているプロセスを一時停止するためにも利用できます。
◎ Dumping a Database Block (Hex)
DBブロックのダンプ(16進)
◆ To dump a database block in hexadecimal enable event 10289
DBブロックを16進でダンプするためのイベント10289を有効化
ALTER SESSION SET EVENTS
'10289 trace name context forever, level 1';
◆ Then dump the block using
その後、使用しているブロックをダンプ
ALTER SYSTEM DUMP DATAFILE
BLOCK
◆ On Unix/Linux systems blocks can also be dumped using od
UnixまたはLinuxシステムのブロックはodコマンドを利用することで
ダンプすることもできます。
dd bs=8k if=
◆ Force DBWR to flush recently written blocks to disk using
DBWRプロセスに対して最近書き込まれたブロックをDISKへフラッシュさせる方法
ALTER SYSTEM CHECKPOINT;
or
ALTER SYSTEM SWITCH LOGFILE;
------------------------------------------------------
★ 英語の語順での解釈の元祖はこちら
SIM:スーパーエルマー
http://px.a8.net/svt/ejp?a8mat=10BZJG+AZBUGI+PJQ+60H7M
通常の体験CDよりも豪華な体験版CDが手元にあるので
ご希望の方はこのメールのreplyにて希望の旨お知らせ下さい。
また上記リンクから無料体験版CDを申し込まれた方も
アフィリエイト報酬分をお送りしますのでお知らせ下さい。
------------------------------------------------------
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
英語解説
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
Optimiser Decisions
※Optimiser:前号でも出ましたが、SQL文から実際のデータへのアクセス方法を
考えるOracleの機能です。
様々なアクセスパターンのアクセスにかかるコストを計算し、
通常はコストが最も低いアクセス方法を計画します。
また、条件を満たす場合はSQL文を変換したり、
条件を追加したりします。
<アクセス方法を決める為の主な元ネタ>
・統計情報
・ヒント
・OPTIMIZERパラメタ
<主なアクセス方法の例>
・フルスキャン
・INDEXフルスキャン
・INDEXの部分スキャン
・使用INDEXの選択
・JOIN順序
・JOIN方法
・特定のパーティションのみにアクセス
・結果が変わらないならマテリアライズドビューにアクセス先切り替え
Enabling SQL Trace
※Trace:実行結果などの追跡結果。SQL Traceはtkprofユーティリティと併用することで
平易にSQLの実行結果を詳細に確認することができます。
To enable at instance level
※instance:Oracleにおけるインスタンスとはデータベースの実体を指します。
DBの定義に従って、SGAなどのメモリが割り当てられ、バックグラウンド
プロセスが起動した状態です。
instance levelでSQL TRACEを有効にするということは、該当するinstance
で実行されるSQL全てがTraceファイル作成対象になるということです。
通常これは大変なことなので、SESSIONレベルやアプリケーションレベル
でのTRACEを取得します。
The SQL_TRACE parameter cannot be modified directly using ALTER SYSTEM.
Instead use
※9iまではalter systemによるsql_traceの有効化が指定できませんでした。
ORADEBUG
※非公開のOracleツールです。主にサポートの指示によって利用されます。
Dumping a Database Block (Hex)
※Hex:16進数
Dumping:ファイルやメモリの内容を表す情報を出力することや情報そのもの
指してダンプと呼びます。
On Unix/Linux systems blocks can also be dumped using od
※unix系のodコマンドは入力された情報を8進または16進で表示することができます。
dd bs=8k if=
※dd:ファイルシステムに依存せずにデータをコピーできるコマンド
全額返金保証があるので気軽にトライできますね。
http://www.searchman.info/sucrepo/click_ora_index.html
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
★ 英語ぷちクイズ ★
※答えと思うリンクをぷちっとクリックしてください。
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
☆イチロー選手の今年の打率は.322でした。野球における一般的なこの数字の
読み方は?
◆dot three twenty two
┗ http://clickenquete.com/a/a.php?M0002066Q0018523A19330
◆point three tewnty two
┗ http://clickenquete.com/a/a.php?M0002066Q0018523A26e31
◆zero point three twenty two
┗ http://clickenquete.com/a/a.php?M0002066Q0018523A3d5f0
◆three two two
┗ http://clickenquete.com/a/a.php?M0002066Q0018523A43cce
◆three twenty two
┗ http://clickenquete.com/a/a.php?M0002066Q0018523A5e74b
◆period three two two
┗ http://clickenquete.com/a/a.php?M0002066Q0018523A6bc96
○結果を見る
┗ http://clickenquete.com/a/r.php?Q0018523C8f53
締切:2006年12月20日18時00分
協力:クリックアンケート http://clickenquete.com/
こたえは次回に発表します。
------------------------------------------------------
★ ランキングにも一応参加しております
気が向いたらクリックお願いします。
「ブログ村、IT技術ブログランキング」
http://it.blogmura.com/in/080814.html
------------------------------------------------------
■ 前回のこたえ
☆食べたものが美味しくて気に入った場合に使うとき、一般的なのはどちら?
◆I love it.
◆I'm lovin' it.
○結果を見る
┗ http://clickenquete.com/a/r.php?Q0018291C372b
こたえはI love it.です。
i'm lovin' it.はみなさんもご存知マクドナルドの
worldwideなキャッチフレーズです。
ですから、マックのコマーシャルを真似てふざけたい時は、
マック片手にニッコリと発声しましょう^^
原則として状態を表す動詞を現在進行形にはしないので、
文法的にはあまり正しくありません。
Google Hit数(Goopus)によると
"I love it"
→7,770,000件
"i'm lovin' it" OR "i am loving it" OR "i'm loving it"
→1,380,000件(うち、"i'm lovin' it"905,000件)
でした。
私の確認した限りでは、少なくとも以下の国では「I'm lovin' it」が
マックの宣伝で使われていると思われます。
australia ,austria ,belgium ,bulgaria ,croatia ,czech republic
,denmark ,finland ,honkon ,hungary ,india ,israel ,japan ,italy ,south korea
,malaysia ,netherlands ,new zealand ,poland ,slovakia ,singapore ,slovenia
,south africa ,spain ,sweden ,switzerland ,taiwan ,united kingdom ,usa
I'm lovin' itでふざけているサイトです^^
http://www.thesneeze.com/mt-archives/000357.php
驚くべきことにこの後数分後に
"i'm lovin' it" OR "i am loving it" OR "i'm loving it"
を再検索したところ、1,420,000件に増加していました。
マックパワーで物凄い勢いでページが増加しています。
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
★ OracleTest ★
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
☆パーティション関連で操作でできない操作は?
◆alter table t_xxx move partition p_xxx tablespace ts_xxx;
┗ http://clickenquete.com/a/a.php?M0002066Q0018528A162d7
◆alter table t_xxx modify default attributes tablespace ts_xxx;
┗ http://clickenquete.com/a/a.php?M0002066Q0018528A22edb
◆alter table t_xxx shrink space partition p_xxx;
┗ http://clickenquete.com/a/a.php?M0002066Q0018528A31c12
◆alter table t_xxx truncate partition p_xxx;
┗ http://clickenquete.com/a/a.php?M0002066Q0018528A47ba4
◆alter table t_xxx split partition p_xxx at ('xxx') into (partition p_xxx1,partition p_xxx2);
┗ http://clickenquete.com/a/a.php?M0002066Q0018528A5c56a
○結果を見る
┗ http://clickenquete.com/a/r.php?Q0018528C827e
締切:2006年12月20日18時00分
協力:クリックアンケート http://clickenquete.com/
こたえは次回に発表します。
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
Oracle解説
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
今回はイベント10053について解説いたします。
(他のOradebugや様々なDumpの取得方法などは別の機会で取り上げたいと思います)
イベント10053はオプティマイザが実行計画を生成する過程を詳細にトレースした内容を
出力します。
sqlplusからSQLを実行できる場合は、alter sessionでイベントを設定します。
-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-
イベント設定開始
alter session set events '10053 trace name context forever, level {12}';
イベント設定終了
alter session set events '10053 trace name context off';
-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-
◆ level1(default):統計情報とコスト計算の結果を表示
◆ level2 :コスト計算の結果のみ表示
異なるsessionのtraceをしたい場合はsession idを指定してイベント設定します。
-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-
イベント設定開始
exec sys.dbms_system.set_ev ( <sid(session id)>,<serial#>,10053,{12},'');
イベント設定終了
exec sys.dbms_system.set_ev( <sid(session id)>,<serial#>,10053,0,'');
-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-
★それでは実際にトレースを取ってみましょう。
-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-
sqlplus / as sysdba
alter session set events '10053 trace name context forever, level 1';
-- 確認対象のSQL実行(注意)
select count(*) from dba_tables;
COUNT(*)
----------
1540
alter session set events '10053 trace name context off';
-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-
(注意)イベント10053でtrace fileをdumpさせる為にはハードパースが必要です。
繰り返し練習する場合はSQL文を微妙に変化させましょう。
(例:小文字を大文字に変える)
ライブラリキャッシュに同じSQL文が残っていると原則ソフトパースとなり
ハードパースされません。
★ traceの出力先を確認方法1。(user_dump_destの値)
-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-
show parameter user_dump_dest
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
user_dump_dest string C:\ORACLE\PRODUCT\10.2.0\ADMIN
\ORCL\UDUMP
-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-
★ traceの出力先を確認方法2。(oradebugの使用)
(ピンポイントでファイル名までわかります)
-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-
SQL>oradebug setmypid
文が処理されました。
SQL>oradebug tracefile_name
c:\oracle\product\10.2.0\admin\orcl\udump\orcl_ora_4624.trc
-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-
★トレースファイル確認
(説明は10gR2をベースに実施しています)
★序盤はOS情報、製品情報、ハードウェア情報などが続き
「Registered qb」というキーワードが出てきます。
-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-
Registered qb: SEL$1 0x87ba6b4 (PARSER)142321332
signature (): qb_name=SEL$1 nbfros=1 flg=0
fro(0): flg=5 objn=2439 hint_alias="DBA_TABLES"@"SEL$1"
Registered qb: SEL$2 0x87b60c4 (PARSER)142303428
signature (): qb_name=SEL$2 nbfros=10 flg=0
-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-
qbはquery block(問合せブロック)の略です。
最初のqb(SEL$1)は指定したselect文「select count(*) from dba_tables」を指します。
次のqb(SEL$2)はdba_tablesビューの定義内容を展開したものです。
☆dba_tablesの定義内容を確認
-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-
set long 20000
set pages 1000
select text from dba_views where view_name='DBA_TABLES';
-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-
上記SQLで、VIEWの定義内容が確認できます。
検索結果は以下の通りです。
-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-
select
~中略~
from sys.user$ u, sys.ts$ ts, sys.seg$ s, sys.obj$ co, sys.tab$ t, sys.obj$ o,
sys.obj$ cx, sys.user$ cu, x$ksppcv ksppcv, x$ksppi ksppi
where o.owner# = u.user#
and o.obj# = t.obj#
and bitand(t.property, 1) = 0
and bitand(o.flags, 128) = 0
and t.bobj# = co.obj# (+)
and t.ts# = ts.ts#
and t.file# = s.file# (+)
and t.block# = s.block# (+)
and t.ts# = s.ts# (+)
and t.dataobj# = cx.obj# (+)
and cx.owner# = cu.user# (+)
and ksppi.indx = ksppcv.indx
and ksppi.ksppinm = '_dml_monitoring_enabled'
-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-
★次に
**************************
Predicate Move-Around (PM)
**************************
というキーワード(推移述語)が出てきます。
predicate(述語)とは問合せ条件の単位です。
A表とB表のJOINをする際に、
A表に指定された条件がB表にも適用可能な場合、
オプティマイザはB表にも同じ条件を追加することで、
JOINの対象行を減らすことを試みます。
今回は
PM: Considering predicate move-around in SEL$1 (#0).
PM: Checking validity of predicate move-around in SEL$1 (#0).
のように後ろに(#0):0件となっているので、試みたものの
対象はなかったということになっています。
オプティマイザは初期段階で色々な変換を試みます。
上記のVIEWのSELECT文をVIEW定義内容に置き換えるのも
その変換の一種です。
★色々な変換の試みがしばらく続いた後、
「Current SQL statement for this session:」というところで、
実行したSQLが表示されています。
******************************************
Current SQL statement for this session:
select count(*) from dba_tables
*******************************************
★次にlegendという行以降で略語の説明が始まります。
(legendは伝説の他に説明という意味も持っています)
*******************************************
Legend
The following abbreviations are used by optimizer trace.
*******************************************
★続いてオプティマイザに関連した初期化パラメタの一覧と使用されたヒントが
表示されます。
(変更されている値とデフォルト値が分けて表示されています)
***************************************
PARAMETERS USED BY THE OPTIMIZER
********************************
*************************************
PARAMETERS WITH ALTERED VALUES
******************************
pga_aggregate_target = 102400 KB
~略~
*************************************
PARAMETERS WITH DEFAULT VALUES
******************************
optimizer_mode_hinted = false
~略~
***************************************
PARAMETERS IN OPT_PARAM HINT
****************************
★この後統計情報が表示されています。
使用しているテーブルの統計情報が順に表示されます。
*****************************
SYSTEM STATISTICS INFORMATION
*****************************
***************************************
BASE STATISTICAL INFORMATION
***********************
Table: X$KSPPI Alias: KSPPI (NOT ANALYZED)
***************************************
※最初のX$で始まる2つのテーブルは隠しパラメタなどを
確認する為のOracle内部の特別なテーブルなので
飛ばします。
***********************
Table Stats::
Table: USER$ Alias: CU
#Rows: 61 #Blks: 3 AvgRowLen: 81.00
Column (#1): USER#(NUMBER)
AvgLen: 3.00 NDV: 61 Nulls: 0 Density: 0.016393 Min: 0 Max: 63
Index Stats::
Index: I_USER# Col#: 1
LVLS: 0 #LB: 1 #DK: 26 LB/K: 1.00 DB/K: 1.00 CLUF: 2.00
Index: I_USER1 Col#: 2
LVLS: 0 #LB: 1 #DK: 61 LB/K: 1.00 DB/K: 1.00 CLUF: 30.00
***********************
★上記「Table Stats」の説明です。
-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-
Table Stats::
Table:テーブル名 Alias:テーブルの別名
#Rows:行数 #Blks:ブロック数 AvgRowLen:平均行長
Column (列番号): 列名(属性)
AvgLen: 平均列長 NDV: ユニークな値の数 Nulls: null値の数 Density: 列の密度 Min: 最小値 Max: 最大値
以下のディクショナリに対応した項目が表示されています。
<dba_tablesビュー (パーティション化表はdba_tab_partitionsビュー)>
num_rows:行数
blocks:ブロック数
avg_row_len:平均行長
<dba_tab_columnsビュー(パーティション化表はdba_part_col_statisticsビュー)>
num_distinct:ユニークな値の数
low_value:最小値(rawデータの為、直接参照してもわかりづらいです)
high_value:最大値(rawデータの為、直接参照してもわかりづらいです)
density:列の密度
num_nulls:nullの数
※num_nullsを除く値はOracle7との下位互換用の列の為、本来は
{tabpart}_colstatisticsを参照する。
-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-
★上記「Index Stats」の説明です。
-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-
Index Stats::
Index: index名 Col#: 列番号
LVLS: Bツリーレベル(ルートブロックからリーフブロックまでの深さ)
#LB: リーフブロック数
#DK: ユニークなKEYの数
LB/K: ユニークKEY毎の平均リーフブロック数
DB/K: ユニークKEY毎の実際のテーブル側の平均ブロック数
CLUF: INDEXの順番通りに検索した時(INDEX RANGE SCAN)、
実際のテーブル側の行が同じブロックに格納されていない行の数
この数値がテーブルの行数に近い程、INDEX RANGE SCANの効率が
悪くなる可能性があります。
以下のディクショナリに対応した項目が表示されています。
<dba_indexes(パーティション表のINDEXならdba_ind_partitions)>
blevel:LVLS
leaf_blocks:#LB
distinct_keys:#DK
avg_leaf_blocks_per_key:LB/K
avg_data_blocks_per_key:DB/K
clustering_factor:CLUF
-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-・-
★実行計画の基礎となるCOSTの算出が始まります。
テーブルのフルスキャン、インデックスのフルスキャン、
インデックスのFastFullScanなどのコストを比較しています。
***************************************
SINGLE TABLE ACCESS PATH
***************************************
★この後膨大な量のJOINパターンのCOST確認が始まります。
***************************************
Considering cardinality-based initial join order.
***********************
★最後に実行計画が表示されます。
============
Plan Table
============
------------------------------------------------+-----------------------------------+
Id Operation Name Rows Bytes Cost Time
------------------------------------------------+-----------------------------------+
0 SELECT STATEMENT 508
1 SORT AGGREGATE 1 141
2 HASH JOIN RIGHT OUTER 3427 472K 508 00:00:07
3 TABLE ACCESS FULL SEG$ 4191 45K 29 00:00:01
4 HASH JOIN 1553 197K 478 00:00:06
5 TABLE ACCESS FULL USER$ 61 183 2 00:00:01
6 HASH JOIN 1553 193K 475 00:00:06
7 HASH JOIN RIGHT OUTER 1540 174K 336 00:00:05
8 TABLE ACCESS FULL USER$ 61 183 2 00:00:01
9 HASH JOIN OUTER 1540 170K 334 00:00:05
10 NESTED LOOPS OUTER 1540 158K 197 00:00:03
11 HASH JOIN 1540 150K 197 00:00:03
12 MERGE JOIN CARTESIAN 10 710 5 00:00:01
13 HASH JOIN 1 68 1 00:00:01
14 FIXED TABLE FULL X$KSPPI 1 55 0
15 FIXED TABLE FULL X$KSPPCV 100 1300 0
16 BUFFER SORT 10 30 5 00:00:01
17 TABLE ACCESS FULL TS$ 10 30 4 00:00:01
18 TABLE ACCESS FULL TAB$ 1540 44K 192 00:00:03
19 INDEX UNIQUE SCAN I_OBJ1 1 5 0
20 TABLE ACCESS FULL OBJ$ 50K 399K 136 00:00:02
21 TABLE ACCESS FULL OBJ$ 50K 549K 138 00:00:02
------------------------------------------------+-----------------------------------+
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
編集後記
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
今号からご購読いただいた皆様はじめまして。
本日も最後まで読んでいただきありがとうございます。
昨年から応援しており、blogでも勝手にリンクしているアルケミストさんの
メジャーデビューが決定したそうです。
しかも吉本興業系のところみたいです。
http://www.voicerecords.net/alchemist/frame.php?page=biography¶m1=1¶m2=20061200
デビューは2007年4月とのこと。HEYHEYHEYとかに出てきちゃうんでしょうか。
これからもフリーライブは続けるとのことですが、
嬉しさの反面さみしさも大きいですね。
嫁さんのアカペラ教室の先生がボイスパーカッションなどをしているので、
アカペラ教室の存続も心配ですね。
複雑な気分ですが、いつまでも素敵な音楽活動が続けられることを祈っています。
それではまた。
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
おわりに
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
記述誤りなどのご指摘、
記事に関する疑問点・質問・感想・ご意見・ご感想など
yakusa_oracle@yahoo.co.jpまでお願い致します。
簡単な自己紹介はこちら
http://pr2.cgiboy.com/S/3191274
バックナンバー兼ブログはこちら
http://imoment.blogspot.com/
登録・解除はこちらから
http://www.mag2.com/m/0000200441.htm
コメントを投稿