ablog

不器用で落着きのない技術者のメモ

Oracle

Optimizer(10053)トレースを見るときによく使うキーワード

Optimizer(10053)トレースを見るときによく使うキーワード sql_id plan_hash_value Plan Table Final query after transformations Best so far Join order[ Table Stats Single Table Access Path

UEK ダウンロードサイト

インターネットに接続されていないサーバで Yum でパッケージをインストール出来ない場合は Oracle Linux Yum Server | Oracle, Software. Hardware. Complete. からダウンロードできる。例えば、Oracle Linux 6 の UEK なら Oracle Linux 6 (x86_64) UEK Re…

「簡単!AWRをEXCELピボットグラフで分析しよう♪」というお題で発表しました

2017/1/17(火)の夜にオラクル青山センターで開催された JPOUG in 15 minutes #3で「簡単!AWRをEXCELピボットグラフで分析しよう♪」というお題で発表しました。 オラクルコンサルがトラブルシューティングや性能ヘルスチェックでAWRレポート、V$ASH、DBA_HIS…

SQLテスト・ケース・ビルダーで再現ケースを作成する

実行計画絡みの性能トラブルシューティングでよく使うので書いておきます。 エクスポート 共有プールに共有カーソルのキャッシュが残っている場合 データベースにログオンする sqlplus / as sysdba 共有プールに共有カーソルがキャッシュされているか確認す…

統計情報とSQL計画ディレクティブを操作するコマンド集

統計情報 ユーザー統計表を作成する exec dbms_stats.create_stat_table(ownname=>'SCOTT', stattab=>'STAT_TAB_20160223'); ユーザー統計表に表の統計をエクスポートする。 exec dbms_stats.export_table_stats(ownname=>'SCOTT', tabname=>'EMP', stattab=…

SQL*Plus実行結果をシェル変数に格納する方法

SQL*Plus にヒアドキュメントで SQL を渡し、全体をバッククオート(`)で囲めばよい。"$"などはエスケープする必要がある。 $ TRACE_DIR=`sqlplus -s <

SQLで特殊文字をエスケープする方法

CHR関数を使う方法もある。 SQL> select 'select '||chr(39)||'X'||chr(39)||' from dual;' from dual 'SELECT'||CHR(39)||'X --------------------- select 'X' from dual; ちょっと聞かれたのでメモ。

Oracle DBA & Developer Day 2016 で発表しました

2016/10/27(木)に開催された Oracle DBA & Developer Day 2016 で、 「オラクル・コンサルが語る! SQL性能を最大限に引き出すDB 12cクエリー・オプティマイザ 新機能活用と統計情報運用の戦略」 というお題で柴田歩さんと発表しました。 スライド Oracle DB…

AWR に永続化された SQL Monitor を抽出する

だいぶ前にブログに書いたつもりで書いてなかったのでメモ。 SQL_ID から REPORT_ID を調べる column key1 format a30; SELECT REPORT_ID, KEY1 FROM DBA_HIST_REPORTSWHERE KEY1 = 'gxsc2sdj0xz39' ORDER BY KEY1, REPORT_ID; -- SQL_ID を指定 REPORT_ID K…

Flame Graph を使った Java-on-JDBC vs. PLSQL の分析

Oracle Real-World Performance チームの Toon Koppelaars の Flame Graph を使った Java-on-JDBC vs. PLSQL の分析面白い。The Helsinki Declaration (IT-version): NoPlsql vs ThickDB: which one requires a bigger database server?

Oracle Database の Wait Time と CPU Time が1つの Flame Graph に

Oracle Database の Wait Time と CPU Time が1つの Flame Graph に、素晴らしい! I/Oシステムコール発行時に実はカーネルコードが ON CPU で時間を使っていたというようなケースも腕ひしぎ十字固めで一本。それくらいならAWRレポートだけでも Awr1page 的…

Awr1page

AWR Ambiguity: Performance reasoning when the numbers don't add up DB Time カーネルが ON CPU で使う時間が含まれ、DB CPU(Linuxなら getrusageで取得)にも含まれるのでダブルカウントされるからという話。しかし、1回のI/Oシステコールあたり 1ms もCP…

SQL*Plus で COLUMN FORMAT の設定を確認する

SQL*Plus で COLUMN FORMAT の設定を確認する。 SQL> col COLUMN SERIAL# ON FORMAT 999999 COLUMN sid ON FORMAT 99999 COLUMN PROCESS ON FORMAT a10 COLUMN OSUSER ON FORMAT a10 COLUMN TERMINAL ON FORMAT a10 ... 参考 現行のすべての列表示属性を表示…

Oracle Database でSQLトレースを取得する方法

SQLトレースを取得する。 自セッション*1 SQLトレースを有効化する(開始)。*2 waits: true にすると待機イベントと待機時間が出力される(デフォルト値: true) binds: true にするとバインド変数の値が出力される(デフォルト値: false) plan_stat: STAT…

SQL計画ディレクティブに関するメモ

DBA_SQL_PLAN_DIRECTIVES.STATE の値と意味 12.1.0.1 NEW: E-Rows と A-Rows が違って作成された MISSING_STATS: 次回統計収集時に拡張統計を収集される。それまではダイナミック・サンプリングが行われる。 HAS_STATS: 正しい見積のために十分な拡張統計が…

Oracle Database で保留統計を公開する時の挙動を確認する

自分用メモ。 ユーザー統計表を作成する SQL> EXEC DBMS_STATS.CREATE_STAT_TABLE(ownname=>'OGG_IAU',stattab=>'STAT_TABLE_BEFORE'); SQL> EXEC DBMS_STATS.CREATE_STAT_TABLE(ownname=>'OGG_IAU',stattab =>'STAT_TABLE_AFTER'); 統計情報を収集する SQL>…

Oracle GoldenGate 12.1.2.0.0 を使ってみる

環境 $ cat /etc/oracle-release Oracle Linux Server release 6.6 $ uname -r 2.6.39-400.17.1.el6uek.x86_64 ダウンロード VirtualBox VMs for Developers から Oracle Data Integrator 12c VM をダウンロードする。 インストール ファイルを結合する $ ca…

TDE表領域暗号化のオーバーヘッド

I/O性能が良く CPU Time の割合が多いと Elapsed Time にはねやすい。 I/O量が多いと暗号化、復号処理のオーバーヘッドが大きくなる。 CPU Time / disk reads で 1ブロック当りの単価を算出できる。 参考 http://www.hitachi.co.jp/products/bladesymphony/v…

V$SQL_HINT と V$SQL_FEATURE

Understanding what a hint affects using the V$SQL_FEATURE views | Tanel Poder: SQL Performance Tuning, System Troubleshooting and Training

AWR/Statspack レポートを CSV に変換するツール

GitHub - khailey/awrcsv: project by Clive Bostock, extracts AWR text files into comma separated value files and has templates for Excel reports GitHub - yasushiyy/awr2csv: converts Automatic Workload Repository (AWR) reports into csv

TDE表領域暗号化 +DR + HSM

3.3.6 分散環境でのレプリケーション Oracle Data Guardは透過的データ暗号化をサポートしています。プライマリ・データベースで透過的データ暗号化を使用する場合、Data Guard構成の各スタンバイ・データベースには、プライマリ・データベースからの暗号化…

DBA_HIST_SQLSTAT.OPTIMIZER_ENV_HASH_VALUE

V$SQL.OPTIMIZER_ENV_HASH_VALUE DBA_HIST_SQLSTAT.OPTIMIZER_ENV_HASH_VALUE V$SQL.OPTIMIZER_ENV DBA_HIST_OPTIMIZER_ENV.OPTIMIZER_ENV DBMS_SQLDIAG.DUMP_TRACE DBMS_SQLTUNE.SQLSET_ROW DBMS_SQLTUNE_INTERNAL 参考 Optimizer Environment | Oracle Scr…

Oracle Database on AIX の共有メモリの使い方

intermediatesql.com が良記事なのでサマリをメモ。 PRA_PAGE_SGA=true にすると起動時にSGAサイズ分の物理もメモリを使う。そうでない場合は、デマンド・ページングにより仮想メモリは割当てられるが、物理メモリが割当てられるのは実際に使われるとき。*1 …

10053トレースの Level 1 と 2 の違い

Oracle Database の 10053 トレースの Level は 1 と 2 があり、2 のうほうが情報量が少ない(オプティマイザに使われた初期化パラメータなどが出力されない)。 You have a choice of two levels with the 10053 trace event. Level 1 is more comprehensiv…

hugepages_settings.sh 使うときは PRE_PAGE_SGA=TRUE にしたほうが良いと思う

Linux*1 はデマンド・ページング*2するので、hugepages_settings.sh で vm.nr_hugepages を見積もる場合は、初期化パラメータ PRE_PAGE_SGA=TRUE に設定しインスタンス起動時に物理メモリを割当てた上で、hugepages_settings.sh を実行したほうが良いと思う…

Data Pump の remap_tablespace で複数の表領域名を変換する

書式 REMAP_TABLESPACE=(source_tablespace1:target_tablespace1,source_tablespace2:target_tablespace2) 例 impdp scott/tiger directory=DATA_PUMP_DIR dumpfile=foo.dmp remap_tablespace=\(TBS1:SCOTT,TBS2:SCOTT\) 参考 REMAP_TABLESPACE=(src1:dst1,s…

DBサーバの空きメモリサイズの見方(Oracle Database on Linux)

JPOUG Advent Calendar 2015 の5日目のエントリーです。 昨日は [twitter:@discus_hamburg] さんの Mac De Oracle: OTHER_XMLの中身 でした。 Linux で Oracle Database を使っている場合の”実質的な”空きメモリサイズの算出方法を紹介します。 絵は 「シン…

disk_asynch_io=false ならASMに対して同期I/O(pwrite)になる

As you know ASM is doing non (operating system) buffered I/O (also known as ‘DIO’ or Direct I/O) regardless of the oracle database filesystemio_options parameter.But what’s about : Asynchronous/Synchronous I/O ?If you have a look to MOS no…

physical reads prefetch warmup

今更なネタですがメモ。 Oracle Database (10.1以降)でバッファキャッシュがスカスカの場合、アクセスパスが INDEX UNIQUE/RANGE SCAN でも db file scattered read でマルチブロックリードすることがある。 これはブロックにアクセスするついでに近くのブロ…

Oracle Database on Linux で SGA(共有メモリ) のスワップアウトを防ぐ方法

Oracle Database の初期化パラメータ LOCK_SGA = true を設定する SGA(共有メモリ) に HugePages を使う Linux のカーネルパラメータ vm.swappiness=0 にする(Linux Kernel 3.5 未満は 0 にしてもページアウトされることがある)