SlideShare a Scribd company logo
1 of 32
そうだ 検証、しよう。
JPOUG in 15 minutes #1
三原 健一
私の考える検証
問題、障害の原因探求
仕様の確認
マニュアルの行間を探る
これがけっこう楽しい!
検証をする際に役立つ情
報をいくつか紹介します
。
準備フェーズ
データ作成
別スキーマにテーブル作成
ALTER SESSION SET
CURRENT_SCHEMA ~
ALTER SESSION SET
CURRENT_SCHEMA ~
• デフォルトは ログインユーザ=スキー
マ
• アプリケーション・コンテキストのセッ
ション情報を変更できる
例:SYSユーザでログインして
SCOTTスキーマにTEST表を作成
SQL> conn / as sysdba
接続されました。
SQL> select SYS_CONTEXT('USERENV','CURRENT_SCHEMA') CURRENT_SCHEMA
2 from dual;
CURRENT_SCHEMA
--------------
SYS
SQL> alter session set CURRENT_SCHEMA = SCOTT;
セッションが変更されました。
SQL> select SYS_CONTEXT('USERENV','CURRENT_SCHEMA') CURRENT_SCHEMA
2 from dual;
CURRENT_SCHEMA
--------------
SCOTT
SQL> show user
ユーザーは"SYS"です。
SQL> create table TEST (
2 ID number
3 );
表が作成されました。
SQL> select OWNER,TABLE_NAME from DBA_TABLES
2 where TABLE_NAME = 'TEST';
OWNER TABLE_NAME
------ -----------
SCOTT TEST
バルクインサート
SQL> DECLARE
2 TYPE tbl_ins IS TABLE OF TEST%ROWTYPE INDEX BY PLS_INTEGER;
3 w_ins tbl_ins;
4 BEGIN
5 FOR i IN 1..100000 LOOP
6 w_ins(i).ID := i;
7 END LOOP;
8
9 FORALL i IN 1..100000 insert into TEST values w_ins(i);
10 commit;
11 END;
12 /
PL/SQLプロシージャが正常に完了しました。
SQL> select count(*) from TEST;
COUNT(*)
----------
100000
例:10万件を一括インサート
実行フェーズ
トレース
SQL> select name, value from v$diag_info;
NAME VALUE
--------------------- ------------------------------------------------------------
Diag Enabled TRUE
ADR Base /u01/app/oracle
ADR Home /u01/app/oracle/diag/rdbms/orcl/orcl
Diag Trace /u01/app/oracle/diag/rdbms/orcl/orcl/trace
Diag Alert /u01/app/oracle/diag/rdbms/orcl/orcl/alert
Diag Incident /u01/app/oracle/diag/rdbms/orcl/orcl/incident
Diag Cdump /u01/app/oracle/diag/rdbms/orcl/orcl/cdump
Health Monitor /u01/app/oracle/diag/rdbms/orcl/orcl/hm
Default Trace File /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_2231.trc
Active Problem Count 3
Active Incident Count 5
11行が選択されました。
SQL> alter session set tracefile_identifier = 'SQLTRC';
セッションが変更されました。
SQL> select name, value from v$diag_info
2 where NAME = 'Default Trace File';
NAME VALUE
--------------------- -------------------------------------------------------------------
Default Trace File /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_2231_SQLTRC.trc
トレースファイル出力場所・名称
SQL> alter system set events '10046 trace name context forever,level 12';
システムが変更されました。
SQL> alter system set events '10046 trace name context off';
システムが変更されました。
トレース有効化・無効化
SQL> alter session set events '10046 trace name context forever,level 12';
システムが変更されました。
SQL> alter session set events '10046 trace name context off';
システムが変更されました。
インスタンス単位
セッション単位
c.f. DBMS_SESSION or DBMS_MONITOR(SQLトレース)
SQLトレース(10046)
レベル 説明
0 無効
1 alter session set SQL_TRACE = TRUE と同じ
4 バインド変数値を含む
8 待機イベント情報を含む
12 バインド変数値+待機イベント情報
CBOトレース(10053)
レベル 説明
1
レベル指定なしと同じ。統計情報、CBO関連パラメ
ータ一覧および計算結果を含む
2 計算結果のみ
SQL> set serveroutput on
SQL> DECLARE
2 err_msg LONG;
3 err_cod PLS_INTEGER;
4 i PLS_INTEGER;
5 BEGIN
6 FOR err_cod IN 10000..10999 LOOP
7 i := UTL_LMS.GET_MESSAGE (err_cod, 'rdbms',
'ora', 'japanese', err_msg);
8 IF err_msg not like 'Message%not found%' THEN
9 DBMS_OUTPUT.PUT_LINE (TO_CHAR (err_cod,
'FM00000') || ': ' || err_msg);
10 END IF;
11 END LOOP;
12 END;
13 /
イベント一覧取得要領
10000: control file debug event, name 'control_file'
10001: control file crash event1
10002: control file crash event2
10003: control file crash event3
10004: block recovery testing - internal error
………………
10045: free list update operations - ktsrsp, ktsunl
10046: enable SQL statement timing
10047: trace switching of sessions
………………
10052: don't clean up obj$
10053: CBO Enable optimizer trace
10054: CBO Enable optimizer trace for recursive statement (RPI)
………………
10995: general event for materialized views
10997: another startup/shutdown operation of this instance
inprogress
10998: event to enable short stack dumps in system state dumps
10999: do not get database enqueue name
イベント一覧(抜粋)
ブロック・ダンプ取得
SQL> SELECT
2 ROWID
3 ,DBMS_ROWID.ROWID_TO_ABSOLUTE_FNO(ROWID,'RM','SMALL_TBL') "FILE#"
4 ,DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) "BLOCK#"
5* FROM RM.SMALL_TBL;
ROWID FILE# BLOCK#
------------------ ---------- ----------
AAADkVAAFAAAAAHAAA 5 7
AAADkVAAFAAAAAHAAB 5 7
AAADkVAAFAAAAAHAAC 5 7
AAADkVAAFAAAAAHAAD 5 7
AAADkVAAFAAAAAHAAE 5 7
AAADkVAAFAAAAAHAAF 5 7
AAADkVAAFAAAAAHAAG 5 7
AAADkVAAFAAAAAHAAH 5 7
AAADkVAAFAAAAAHAAI 5 7
AAADkVAAFAAAAAHAAJ 5 7
10 rows selected.
ファイル番号、ブロック番号を取得す
る
1. ALTER SYSTEM DUMP DATAFILE <データファイルNo.> BLOCK <ブロック
No.>;
2. ALTER SYSTEM DUMP DATAFILE <FNO> BLOCK MIN <開始ブロックNo.>
BLOCK MAX <終了ブロックNo.>;
結果はDiag Trace(10g以前はUSER_DUMP_DEST)に出力される。
(データ・)ブロック・ダンプ取得方
法
/opt/app/oracle/admin/xxxxx/udump/xxxxxx_ora_8652.trc
Oracle Database 10g Release 10.2.0.4.0 - 64bit Production
ORACLE_HOME = /opt/app/oracle/product/10.2.0/db
System name: Linux
............... (中略) ............................................
*** SESSION ID:(446.1507) 2010-03-18 11:18:00.905
Start dump data blocks tsn: 5 file#: 5 minblk 7 maxblk 7
buffer tsn: 5 rdba: 0x01400007 (5/7)
scn: 0x0000.0376e690 seq: 0x01 flg: 0x06 tail: 0xe6900601
frmt: 0x02 chkval: 0x1f4b type: 0x06=trans data
Hex dump of block: st=0, typ_found=1 ←しばらくバイナリ・ダンプが続く
Dump of memory from 0x00000000125CE400 to 0x00000000125CEC00
0125CE400 00006206 01400007 0376E690 06010000 [.b....@...v.....]
0125CE410 00001F4B 00000001 00003915 0376E68F [K........9....v.]
............... (中略) ............................................
0125CE480 02660324 00EA01A8 0000002C 00000000 [$.f.....,.......]
0125CE490 100B012C 30303052 30303030 30303030 [,...R00000000000] 10行目
0125CE4A0 30313030 30303010 30303030 30303030 [0010.00000000000]
0125CE4B0 30303030 31311030 31313131 31313131 [00000.1111111111]
............... (中略) ............................................
0125CEB40 3052100B 30303030 30303030 30303030 [..R0000000000000] 1行目
0125CEB50 30103130 30303030 30303030 30303030 [01.0000000000000]
0125CEB60 10303030 31313131 31313131 31313131 [000.111111111111]
0125CEB70 31313131 32323210 32323232 32323232 [1111.22222222222]
0125CEB80 32323232 33331032 33333333 33333333 [22222.3333333333]
0125CEB90 33333333 34103333 34343434 34343434 [333333.444444444]
0125CEBA0 34343434 10343434 35353535 35353535 [4444444.55555555]
0125CEBB0 35353535 35353535 36363610 36363636 [55555555.6666666]
0125CEBC0 36363636 36363636 37371036 37373737 [666666666.777777]
0125CEBD0 37373737 37373737 38103737 38383838 [7777777777.88888]
0125CEBE0 38383838 38383838 10383838 39393939 [88888888888.9999]
0125CEBF0 39393939 39393939 39393939 E6900601 [999999999999....]
(行データはブロック内で下から順に格納されるイメージ)
............... (中略) ............................................
data_block_dump,data header at 0x125ce464
バイナリ(16進)・ダンプ
data_block_dump,data header at 0x125ce464
===============
tsiz: 0x798
hsiz: 0x26
pbl: 0x125ce464
bdba: 0x01400007
76543210
flag=--------
ntab=1 ←ブロックに格納されている表数
nrow=10 ←ブロックに格納されている行数
frre=-1
fsbo=0x26
fseo=0x2c
avsp=0x6
tosp=0x6
0xe:pti[0] nrow=10 offs=0
0x12:pri[0] offs=0x6da ←行情報(ブロック内の行位置)
0x14:pri[1] offs=0x61c pri:pointer record index?
0x16:pri[2] offs=0x55e 1行目(pri[0])~10行目(pri[9])
0x18:pri[3] offs=0x4a0 行内の相対位置(オフセット)を表示
0x1a:pri[4] offs=0x3e2
0x1c:pri[5] offs=0x324
0x1e:pri[6] offs=0x266
0x20:pri[7] offs=0x1a8
0x22:pri[8] offs=0xea
0x24:pri[9] offs=0x2c
block_row_dump: ←論理ダンプの始まり
tab 0, row 0, @0x6da
tl: 190 fb: --H-FL-- lb: 0x1 cc: 11 ←1行目(長さ190byte)
col 0: [16] 52 30 30 30 30 30 30 30 30 30 30 30 30 30 30 31 ←RNO列
col 1: [16] 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 ←COL0列
col 2: [16] 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31
col 3: [16] 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32
col 4: [16] 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33
col 5: [16] 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34
col 6: [16] 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
col 7: [16] 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36
col 8: [16] 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37
col 9: [16] 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38
col 10: [16] 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39
............... (後略) ............................................
論理ブロック・ダンプ
評価フェーズ
tkprofコマンド・オプション
オプション 説明
sort
指定したソート・オプションに基づいて降順にソート
例:EXEELA - 実行に費やされた経過時間
print
最初に整数でソートされたSQL文のみのリスト
を作成
explain
指定されたユーザーとパスワードを使用してデータベースに
接続した後、EXPLAIN PLAN文を発行して実行計画を判断
sys
sys=yes(デフォルト)
SYSが発行したSQL文のリストを作成
aggregate
aggregate=yes(デフォルト)
同じ文の実行は1つのサマリー表に集計
AWRレポートをまとめて出力するTips
SQL> @awr_output.sql
SQL> SELECT TEXT FROM DBA_VIEWS WHERE VIEW_NAME = 'USER_TAB_IDENTITY_COLS';
TEXT
----------------------------------------------------------------------------
select o.name, c.name,
decode(bitand(c.property, 137438953472 + 274877906944),
137438953472, 'ALWAYS',
274877906944, 'BY DEFAULT'),
so.name,
'START WITH: ' || i.startwith ||
', INCREMENT BY: ' || s.increment$ ||
', MAX_VALUE: ' || s.maxvalue ||
', MIN_VALUE: ' || s.minvalue ||
', CYCLE_FLAG: ' || decode (s.cycle#, 0, 'N', 1, 'Y') ||
', CACHE_SIZE: ' || s.cache ||
', ORDER_FLAG: ' || decode (s.order$, 0, 'N', 1, 'Y')
from sys.idnseq$ i, sys.obj$ o, sys.col$ c,
sys.seq$ s, sys.obj$ so
where o.owner# = userenv('SCHEMAID')
and o.obj# = i.obj#
and c.intcol# = i.intcol#
and c.obj# = i.obj#
and s.obj# = i.seqobj#
and so.obj# = i.seqobj#
;
データ・ディクショナリ定義確認
参考情報
お役立ちサイト
• juliandyke.com
http://www.juliandyke.com/Presentations/Presentations.p
hp
• Oracle Data Dictionary
http://www.morganslibrary.org/reference/data_dict.html
今まで検証したテーマ
• オプティマイザ統計の保留
• Oracle12c 新機能:「Identity Column」
• TNS_ADMIN環境変数
• インスタンスのリスナーへの登録
• Oracle12c 新機能:APPROX_COUNT_DISTINCT関数
• Flashback Drop
• USE_INVISIBLE_INDEXESヒント
• インターバル・パーティション
• ADR
• 行移行・行連鎖
etc.
詳しくは「サイクル&オラクル」
http://onefact.jp/wp/
おわり

More Related Content

What's hot

紹介 of Anemometer
紹介 of Anemometer紹介 of Anemometer
紹介 of Anemometeryoku0825
 
Stroustrup11章雑感
Stroustrup11章雑感Stroustrup11章雑感
Stroustrup11章雑感31 00
 
Introduction to Initramfs - Initramfs-tools and Dracut
Introduction to Initramfs - Initramfs-tools and DracutIntroduction to Initramfs - Initramfs-tools and Dracut
Introduction to Initramfs - Initramfs-tools and DracutTaisuke Yamada
 
MySQLerの7つ道具 plus
MySQLerの7つ道具 plusMySQLerの7つ道具 plus
MySQLerの7つ道具 plusyoku0825
 
Maatkit で MySQL チューニング
Maatkit で MySQL チューニングMaatkit で MySQL チューニング
Maatkit で MySQL チューニングKensuke Nagae
 
テーマ「最適化 その2」
テーマ「最適化 その2」テーマ「最適化 その2」
テーマ「最適化 その2」technocat
 
Processing workshop
Processing workshopProcessing workshop
Processing workshopWataru Kani
 
Local php-100828 2
Local php-100828 2Local php-100828 2
Local php-100828 2Akio Ishida
 

What's hot (9)

紹介 of Anemometer
紹介 of Anemometer紹介 of Anemometer
紹介 of Anemometer
 
Stroustrup11章雑感
Stroustrup11章雑感Stroustrup11章雑感
Stroustrup11章雑感
 
Introduction to Initramfs - Initramfs-tools and Dracut
Introduction to Initramfs - Initramfs-tools and DracutIntroduction to Initramfs - Initramfs-tools and Dracut
Introduction to Initramfs - Initramfs-tools and Dracut
 
initramfsについて
initramfsについてinitramfsについて
initramfsについて
 
MySQLerの7つ道具 plus
MySQLerの7つ道具 plusMySQLerの7つ道具 plus
MySQLerの7つ道具 plus
 
Maatkit で MySQL チューニング
Maatkit で MySQL チューニングMaatkit で MySQL チューニング
Maatkit で MySQL チューニング
 
テーマ「最適化 その2」
テーマ「最適化 その2」テーマ「最適化 その2」
テーマ「最適化 その2」
 
Processing workshop
Processing workshopProcessing workshop
Processing workshop
 
Local php-100828 2
Local php-100828 2Local php-100828 2
Local php-100828 2
 

Similar to そうだ 検証、しよう。

YugabyteDBの実行計画を眺める(NewSQL/分散SQLデータベースよろず勉強会 #3 発表資料)
YugabyteDBの実行計画を眺める(NewSQL/分散SQLデータベースよろず勉強会 #3 発表資料)YugabyteDBの実行計画を眺める(NewSQL/分散SQLデータベースよろず勉強会 #3 発表資料)
YugabyteDBの実行計画を眺める(NewSQL/分散SQLデータベースよろず勉強会 #3 発表資料)NTT DATA Technology & Innovation
 
HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLHandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLakirahiguchi
 
RとStanでクラウドセットアップ時間を分析してみたら #TokyoR
RとStanでクラウドセットアップ時間を分析してみたら #TokyoRRとStanでクラウドセットアップ時間を分析してみたら #TokyoR
RとStanでクラウドセットアップ時間を分析してみたら #TokyoRShuyo Nakatani
 
Ipmaster1040a config 9.0
Ipmaster1040a config 9.0Ipmaster1040a config 9.0
Ipmaster1040a config 9.0bgnos
 
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
Scis2017 2007-01-27-02
Scis2017 2007-01-27-02Scis2017 2007-01-27-02
Scis2017 2007-01-27-02Ruo Ando
 
サーバ異常検知入門
サーバ異常検知入門サーバ異常検知入門
サーバ異常検知入門mangantempy
 
[data analytics showcase] B12: サーバー1,000台を監視するということ by 株式会社インサイトテクノロジー 小幡 一郎
[data analytics showcase] B12: サーバー1,000台を監視するということ by 株式会社インサイトテクノロジー 小幡 一郎[data analytics showcase] B12: サーバー1,000台を監視するということ by 株式会社インサイトテクノロジー 小幡 一郎
[data analytics showcase] B12: サーバー1,000台を監視するということ by 株式会社インサイトテクノロジー 小幡 一郎Insight Technology, Inc.
 
Task Spooler を試した
Task Spooler を試したTask Spooler を試した
Task Spooler を試したy-uti
 
第10回 計算機構成
第10回 計算機構成第10回 計算機構成
第10回 計算機構成眞樹 冨澤
 
OOW Tokyo 2012 Unconference つまらない STATSPACK をさらにややこしく解説してみよう
OOW Tokyo 2012 Unconference つまらない STATSPACK をさらにややこしく解説してみようOOW Tokyo 2012 Unconference つまらない STATSPACK をさらにややこしく解説してみよう
OOW Tokyo 2012 Unconference つまらない STATSPACK をさらにややこしく解説してみようTadashi Yamashita
 
Windowsでも使えるシェル
Windowsでも使えるシェルWindowsでも使えるシェル
Windowsでも使えるシェルTetsuya Hasegawa
 
[INSIGHT OUT 2011] A24 sql server wait events(mario broodbakker)
[INSIGHT OUT 2011] A24 sql server wait events(mario broodbakker)[INSIGHT OUT 2011] A24 sql server wait events(mario broodbakker)
[INSIGHT OUT 2011] A24 sql server wait events(mario broodbakker)Insight Technology, Inc.
 
負荷テストを行う際に知っておきたいこと 初心者編
負荷テストを行う際に知っておきたいこと 初心者編負荷テストを行う際に知っておきたいこと 初心者編
負荷テストを行う際に知っておきたいこと 初心者編まべ☆てっく運営
 
Rデモ03_データ分析編2016
Rデモ03_データ分析編2016Rデモ03_データ分析編2016
Rデモ03_データ分析編2016wada, kazumi
 
R's anti sparseness
R's anti sparsenessR's anti sparseness
R's anti sparsenessybenjo
 
[db tech showcase Tokyo 2018] #dbts2018 #D34 『サポートのトップエンジニアが語る - ワンランク上のStats...
[db tech showcase Tokyo 2018] #dbts2018 #D34 『サポートのトップエンジニアが語る - ワンランク上のStats...[db tech showcase Tokyo 2018] #dbts2018 #D34 『サポートのトップエンジニアが語る - ワンランク上のStats...
[db tech showcase Tokyo 2018] #dbts2018 #D34 『サポートのトップエンジニアが語る - ワンランク上のStats...Insight Technology, Inc.
 
Linux Performance Analysis in 15 minutes
Linux Performance Analysis in 15 minutesLinux Performance Analysis in 15 minutes
Linux Performance Analysis in 15 minutesYohei Azekatsu
 
第9回 大規模データを用いたデータフレーム操作実習(3)
第9回 大規模データを用いたデータフレーム操作実習(3)第9回 大規模データを用いたデータフレーム操作実習(3)
第9回 大規模データを用いたデータフレーム操作実習(3)Wataru Shito
 

Similar to そうだ 検証、しよう。 (20)

YugabyteDBの実行計画を眺める(NewSQL/分散SQLデータベースよろず勉強会 #3 発表資料)
YugabyteDBの実行計画を眺める(NewSQL/分散SQLデータベースよろず勉強会 #3 発表資料)YugabyteDBの実行計画を眺める(NewSQL/分散SQLデータベースよろず勉強会 #3 発表資料)
YugabyteDBの実行計画を眺める(NewSQL/分散SQLデータベースよろず勉強会 #3 発表資料)
 
HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLHandlerSocket plugin for MySQL
HandlerSocket plugin for MySQL
 
RとStanでクラウドセットアップ時間を分析してみたら #TokyoR
RとStanでクラウドセットアップ時間を分析してみたら #TokyoRRとStanでクラウドセットアップ時間を分析してみたら #TokyoR
RとStanでクラウドセットアップ時間を分析してみたら #TokyoR
 
Acct v3 binary
Acct v3 binaryAcct v3 binary
Acct v3 binary
 
Ipmaster1040a config 9.0
Ipmaster1040a config 9.0Ipmaster1040a config 9.0
Ipmaster1040a config 9.0
 
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
Scis2017 2007-01-27-02
Scis2017 2007-01-27-02Scis2017 2007-01-27-02
Scis2017 2007-01-27-02
 
サーバ異常検知入門
サーバ異常検知入門サーバ異常検知入門
サーバ異常検知入門
 
[data analytics showcase] B12: サーバー1,000台を監視するということ by 株式会社インサイトテクノロジー 小幡 一郎
[data analytics showcase] B12: サーバー1,000台を監視するということ by 株式会社インサイトテクノロジー 小幡 一郎[data analytics showcase] B12: サーバー1,000台を監視するということ by 株式会社インサイトテクノロジー 小幡 一郎
[data analytics showcase] B12: サーバー1,000台を監視するということ by 株式会社インサイトテクノロジー 小幡 一郎
 
Task Spooler を試した
Task Spooler を試したTask Spooler を試した
Task Spooler を試した
 
第10回 計算機構成
第10回 計算機構成第10回 計算機構成
第10回 計算機構成
 
OOW Tokyo 2012 Unconference つまらない STATSPACK をさらにややこしく解説してみよう
OOW Tokyo 2012 Unconference つまらない STATSPACK をさらにややこしく解説してみようOOW Tokyo 2012 Unconference つまらない STATSPACK をさらにややこしく解説してみよう
OOW Tokyo 2012 Unconference つまらない STATSPACK をさらにややこしく解説してみよう
 
Windowsでも使えるシェル
Windowsでも使えるシェルWindowsでも使えるシェル
Windowsでも使えるシェル
 
[INSIGHT OUT 2011] A24 sql server wait events(mario broodbakker)
[INSIGHT OUT 2011] A24 sql server wait events(mario broodbakker)[INSIGHT OUT 2011] A24 sql server wait events(mario broodbakker)
[INSIGHT OUT 2011] A24 sql server wait events(mario broodbakker)
 
負荷テストを行う際に知っておきたいこと 初心者編
負荷テストを行う際に知っておきたいこと 初心者編負荷テストを行う際に知っておきたいこと 初心者編
負荷テストを行う際に知っておきたいこと 初心者編
 
Rデモ03_データ分析編2016
Rデモ03_データ分析編2016Rデモ03_データ分析編2016
Rデモ03_データ分析編2016
 
R's anti sparseness
R's anti sparsenessR's anti sparseness
R's anti sparseness
 
[db tech showcase Tokyo 2018] #dbts2018 #D34 『サポートのトップエンジニアが語る - ワンランク上のStats...
[db tech showcase Tokyo 2018] #dbts2018 #D34 『サポートのトップエンジニアが語る - ワンランク上のStats...[db tech showcase Tokyo 2018] #dbts2018 #D34 『サポートのトップエンジニアが語る - ワンランク上のStats...
[db tech showcase Tokyo 2018] #dbts2018 #D34 『サポートのトップエンジニアが語る - ワンランク上のStats...
 
Linux Performance Analysis in 15 minutes
Linux Performance Analysis in 15 minutesLinux Performance Analysis in 15 minutes
Linux Performance Analysis in 15 minutes
 
第9回 大規模データを用いたデータフレーム操作実習(3)
第9回 大規模データを用いたデータフレーム操作実習(3)第9回 大規模データを用いたデータフレーム操作実習(3)
第9回 大規模データを用いたデータフレーム操作実習(3)
 

そうだ 検証、しよう。

  • 1. そうだ 検証、しよう。 JPOUG in 15 minutes #1 三原 健一
  • 8. ALTER SESSION SET CURRENT_SCHEMA ~ • デフォルトは ログインユーザ=スキー マ • アプリケーション・コンテキストのセッ ション情報を変更できる 例:SYSユーザでログインして SCOTTスキーマにTEST表を作成
  • 9. SQL> conn / as sysdba 接続されました。 SQL> select SYS_CONTEXT('USERENV','CURRENT_SCHEMA') CURRENT_SCHEMA 2 from dual; CURRENT_SCHEMA -------------- SYS SQL> alter session set CURRENT_SCHEMA = SCOTT; セッションが変更されました。 SQL> select SYS_CONTEXT('USERENV','CURRENT_SCHEMA') CURRENT_SCHEMA 2 from dual; CURRENT_SCHEMA -------------- SCOTT SQL> show user ユーザーは"SYS"です。
  • 10. SQL> create table TEST ( 2 ID number 3 ); 表が作成されました。 SQL> select OWNER,TABLE_NAME from DBA_TABLES 2 where TABLE_NAME = 'TEST'; OWNER TABLE_NAME ------ ----------- SCOTT TEST
  • 12. SQL> DECLARE 2 TYPE tbl_ins IS TABLE OF TEST%ROWTYPE INDEX BY PLS_INTEGER; 3 w_ins tbl_ins; 4 BEGIN 5 FOR i IN 1..100000 LOOP 6 w_ins(i).ID := i; 7 END LOOP; 8 9 FORALL i IN 1..100000 insert into TEST values w_ins(i); 10 commit; 11 END; 12 / PL/SQLプロシージャが正常に完了しました。 SQL> select count(*) from TEST; COUNT(*) ---------- 100000 例:10万件を一括インサート
  • 14. SQL> select name, value from v$diag_info; NAME VALUE --------------------- ------------------------------------------------------------ Diag Enabled TRUE ADR Base /u01/app/oracle ADR Home /u01/app/oracle/diag/rdbms/orcl/orcl Diag Trace /u01/app/oracle/diag/rdbms/orcl/orcl/trace Diag Alert /u01/app/oracle/diag/rdbms/orcl/orcl/alert Diag Incident /u01/app/oracle/diag/rdbms/orcl/orcl/incident Diag Cdump /u01/app/oracle/diag/rdbms/orcl/orcl/cdump Health Monitor /u01/app/oracle/diag/rdbms/orcl/orcl/hm Default Trace File /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_2231.trc Active Problem Count 3 Active Incident Count 5 11行が選択されました。 SQL> alter session set tracefile_identifier = 'SQLTRC'; セッションが変更されました。 SQL> select name, value from v$diag_info 2 where NAME = 'Default Trace File'; NAME VALUE --------------------- ------------------------------------------------------------------- Default Trace File /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_2231_SQLTRC.trc トレースファイル出力場所・名称
  • 15. SQL> alter system set events '10046 trace name context forever,level 12'; システムが変更されました。 SQL> alter system set events '10046 trace name context off'; システムが変更されました。 トレース有効化・無効化 SQL> alter session set events '10046 trace name context forever,level 12'; システムが変更されました。 SQL> alter session set events '10046 trace name context off'; システムが変更されました。 インスタンス単位 セッション単位 c.f. DBMS_SESSION or DBMS_MONITOR(SQLトレース)
  • 16. SQLトレース(10046) レベル 説明 0 無効 1 alter session set SQL_TRACE = TRUE と同じ 4 バインド変数値を含む 8 待機イベント情報を含む 12 バインド変数値+待機イベント情報
  • 18. SQL> set serveroutput on SQL> DECLARE 2 err_msg LONG; 3 err_cod PLS_INTEGER; 4 i PLS_INTEGER; 5 BEGIN 6 FOR err_cod IN 10000..10999 LOOP 7 i := UTL_LMS.GET_MESSAGE (err_cod, 'rdbms', 'ora', 'japanese', err_msg); 8 IF err_msg not like 'Message%not found%' THEN 9 DBMS_OUTPUT.PUT_LINE (TO_CHAR (err_cod, 'FM00000') || ': ' || err_msg); 10 END IF; 11 END LOOP; 12 END; 13 / イベント一覧取得要領
  • 19. 10000: control file debug event, name 'control_file' 10001: control file crash event1 10002: control file crash event2 10003: control file crash event3 10004: block recovery testing - internal error ……………… 10045: free list update operations - ktsrsp, ktsunl 10046: enable SQL statement timing 10047: trace switching of sessions ……………… 10052: don't clean up obj$ 10053: CBO Enable optimizer trace 10054: CBO Enable optimizer trace for recursive statement (RPI) ……………… 10995: general event for materialized views 10997: another startup/shutdown operation of this instance inprogress 10998: event to enable short stack dumps in system state dumps 10999: do not get database enqueue name イベント一覧(抜粋)
  • 21. SQL> SELECT 2 ROWID 3 ,DBMS_ROWID.ROWID_TO_ABSOLUTE_FNO(ROWID,'RM','SMALL_TBL') "FILE#" 4 ,DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) "BLOCK#" 5* FROM RM.SMALL_TBL; ROWID FILE# BLOCK# ------------------ ---------- ---------- AAADkVAAFAAAAAHAAA 5 7 AAADkVAAFAAAAAHAAB 5 7 AAADkVAAFAAAAAHAAC 5 7 AAADkVAAFAAAAAHAAD 5 7 AAADkVAAFAAAAAHAAE 5 7 AAADkVAAFAAAAAHAAF 5 7 AAADkVAAFAAAAAHAAG 5 7 AAADkVAAFAAAAAHAAH 5 7 AAADkVAAFAAAAAHAAI 5 7 AAADkVAAFAAAAAHAAJ 5 7 10 rows selected. ファイル番号、ブロック番号を取得す る
  • 22. 1. ALTER SYSTEM DUMP DATAFILE <データファイルNo.> BLOCK <ブロック No.>; 2. ALTER SYSTEM DUMP DATAFILE <FNO> BLOCK MIN <開始ブロックNo.> BLOCK MAX <終了ブロックNo.>; 結果はDiag Trace(10g以前はUSER_DUMP_DEST)に出力される。 (データ・)ブロック・ダンプ取得方 法
  • 23. /opt/app/oracle/admin/xxxxx/udump/xxxxxx_ora_8652.trc Oracle Database 10g Release 10.2.0.4.0 - 64bit Production ORACLE_HOME = /opt/app/oracle/product/10.2.0/db System name: Linux ............... (中略) ............................................ *** SESSION ID:(446.1507) 2010-03-18 11:18:00.905 Start dump data blocks tsn: 5 file#: 5 minblk 7 maxblk 7 buffer tsn: 5 rdba: 0x01400007 (5/7) scn: 0x0000.0376e690 seq: 0x01 flg: 0x06 tail: 0xe6900601 frmt: 0x02 chkval: 0x1f4b type: 0x06=trans data Hex dump of block: st=0, typ_found=1 ←しばらくバイナリ・ダンプが続く Dump of memory from 0x00000000125CE400 to 0x00000000125CEC00 0125CE400 00006206 01400007 0376E690 06010000 [.b....@...v.....] 0125CE410 00001F4B 00000001 00003915 0376E68F [K........9....v.] ............... (中略) ............................................ 0125CE480 02660324 00EA01A8 0000002C 00000000 [$.f.....,.......] 0125CE490 100B012C 30303052 30303030 30303030 [,...R00000000000] 10行目 0125CE4A0 30313030 30303010 30303030 30303030 [0010.00000000000] 0125CE4B0 30303030 31311030 31313131 31313131 [00000.1111111111] ............... (中略) ............................................ 0125CEB40 3052100B 30303030 30303030 30303030 [..R0000000000000] 1行目 0125CEB50 30103130 30303030 30303030 30303030 [01.0000000000000] 0125CEB60 10303030 31313131 31313131 31313131 [000.111111111111] 0125CEB70 31313131 32323210 32323232 32323232 [1111.22222222222] 0125CEB80 32323232 33331032 33333333 33333333 [22222.3333333333] 0125CEB90 33333333 34103333 34343434 34343434 [333333.444444444] 0125CEBA0 34343434 10343434 35353535 35353535 [4444444.55555555] 0125CEBB0 35353535 35353535 36363610 36363636 [55555555.6666666] 0125CEBC0 36363636 36363636 37371036 37373737 [666666666.777777] 0125CEBD0 37373737 37373737 38103737 38383838 [7777777777.88888] 0125CEBE0 38383838 38383838 10383838 39393939 [88888888888.9999] 0125CEBF0 39393939 39393939 39393939 E6900601 [999999999999....] (行データはブロック内で下から順に格納されるイメージ) ............... (中略) ............................................ data_block_dump,data header at 0x125ce464 バイナリ(16進)・ダンプ
  • 24. data_block_dump,data header at 0x125ce464 =============== tsiz: 0x798 hsiz: 0x26 pbl: 0x125ce464 bdba: 0x01400007 76543210 flag=-------- ntab=1 ←ブロックに格納されている表数 nrow=10 ←ブロックに格納されている行数 frre=-1 fsbo=0x26 fseo=0x2c avsp=0x6 tosp=0x6 0xe:pti[0] nrow=10 offs=0 0x12:pri[0] offs=0x6da ←行情報(ブロック内の行位置) 0x14:pri[1] offs=0x61c pri:pointer record index? 0x16:pri[2] offs=0x55e 1行目(pri[0])~10行目(pri[9]) 0x18:pri[3] offs=0x4a0 行内の相対位置(オフセット)を表示 0x1a:pri[4] offs=0x3e2 0x1c:pri[5] offs=0x324 0x1e:pri[6] offs=0x266 0x20:pri[7] offs=0x1a8 0x22:pri[8] offs=0xea 0x24:pri[9] offs=0x2c block_row_dump: ←論理ダンプの始まり tab 0, row 0, @0x6da tl: 190 fb: --H-FL-- lb: 0x1 cc: 11 ←1行目(長さ190byte) col 0: [16] 52 30 30 30 30 30 30 30 30 30 30 30 30 30 30 31 ←RNO列 col 1: [16] 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 ←COL0列 col 2: [16] 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 col 3: [16] 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 col 4: [16] 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 col 5: [16] 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 col 6: [16] 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 col 7: [16] 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 col 8: [16] 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 col 9: [16] 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 col 10: [16] 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 ............... (後略) ............................................ 論理ブロック・ダンプ
  • 26. tkprofコマンド・オプション オプション 説明 sort 指定したソート・オプションに基づいて降順にソート 例:EXEELA - 実行に費やされた経過時間 print 最初に整数でソートされたSQL文のみのリスト を作成 explain 指定されたユーザーとパスワードを使用してデータベースに 接続した後、EXPLAIN PLAN文を発行して実行計画を判断 sys sys=yes(デフォルト) SYSが発行したSQL文のリストを作成 aggregate aggregate=yes(デフォルト) 同じ文の実行は1つのサマリー表に集計
  • 28. SQL> SELECT TEXT FROM DBA_VIEWS WHERE VIEW_NAME = 'USER_TAB_IDENTITY_COLS'; TEXT ---------------------------------------------------------------------------- select o.name, c.name, decode(bitand(c.property, 137438953472 + 274877906944), 137438953472, 'ALWAYS', 274877906944, 'BY DEFAULT'), so.name, 'START WITH: ' || i.startwith || ', INCREMENT BY: ' || s.increment$ || ', MAX_VALUE: ' || s.maxvalue || ', MIN_VALUE: ' || s.minvalue || ', CYCLE_FLAG: ' || decode (s.cycle#, 0, 'N', 1, 'Y') || ', CACHE_SIZE: ' || s.cache || ', ORDER_FLAG: ' || decode (s.order$, 0, 'N', 1, 'Y') from sys.idnseq$ i, sys.obj$ o, sys.col$ c, sys.seq$ s, sys.obj$ so where o.owner# = userenv('SCHEMAID') and o.obj# = i.obj# and c.intcol# = i.intcol# and c.obj# = i.obj# and s.obj# = i.seqobj# and so.obj# = i.seqobj# ; データ・ディクショナリ定義確認
  • 30. お役立ちサイト • juliandyke.com http://www.juliandyke.com/Presentations/Presentations.p hp • Oracle Data Dictionary http://www.morganslibrary.org/reference/data_dict.html
  • 31. 今まで検証したテーマ • オプティマイザ統計の保留 • Oracle12c 新機能:「Identity Column」 • TNS_ADMIN環境変数 • インスタンスのリスナーへの登録 • Oracle12c 新機能:APPROX_COUNT_DISTINCT関数 • Flashback Drop • USE_INVISIBLE_INDEXESヒント • インターバル・パーティション • ADR • 行移行・行連鎖 etc. 詳しくは「サイクル&オラクル」 http://onefact.jp/wp/