Contenu connexe
Similaire à 2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15 (20)
2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15
- 2. 2
自己紹介代わりの
コンテンツ類
DDD 2013 SQLチューニングに
必要な考え方と最新テクニック
http://www.oracle.com/technet
work/jp/ondemand/ddd-2013-
2051348-ja.html
ブログ「ねら~ITエンジニア雑記」
http://d.hatena.ne.jp/gonsuke777/
Bind Peek をもっと使おうぜ!
-JPOUG Advent Calendar 2014-
http://d.hatena.ne.jp/gonsuke777/
20141205/1417710300
まだ統計固定で消耗してるの?
-JPOUG Advent Calendar 2015-
http://d.hatena.ne.jp/gonsuke777/
20151208/1449587953
JPOUG Tech Talk Night #6
「固定化か?最新化か?オプティ
マイザ統計の運用をもう一度考え
る。」
http://d.hatena.ne.jp/gonsuke777
/20160226/1456488499
Oracle DDD 2016
- オラクル・コンサルが語る!- SQL
性能を最大限に引き出す
DB 12c クエリー・オプティマイザ 新
機能活用 と 統計情報運用の戦略
http://www.oracle.com/technetwork/j
p/ondemand/ddd-2016-3373953-
ja.html
Here comes new challenger !!!
- 7. 7
通常 は 2本 or 3本先取で勝ち
(c)CAPCOM
ストリートファイター2より
- 12. 12
類似点1・まずは基礎知識が重要(SQLチューニングの例)
SQL> SELECT * FROM
TABLE(DBMS_XPLAN.DISPLAY_CURSOR('g9gnrhjwajfnn', NULL,
‘ALL ALLSTATS LAST'));
-------------------------------------------
| Id | Operation | Name |
-------------------------------------------
| 0 | SELECT STATEMENT | |
|* 1 | HASH JOIN | |
| 2 | TABLE ACCESS FULL| TEST_TABLE_A |
|* 3 | TABLE ACCESS FULL| TBL_B |
-------------------------------------------
実行計画の確認(実行計画の
取り方、読み方の知識が必要)
10:48:08 SQL> SELECT /*+ MONITOR */
10:48:08 2 A.*
10:48:08 3 FROM TEST_TABLE_A A
10:48:08 4 , TBL_B B
10:48:08 5 WHERE A.P_NO2 = B.P_NO
10:48:08 6 AND A.P_CHAR = B.P_CHAR
10:48:08 7 AND TO_CHAR(B.P_DATE, 'YYYYMMDD') =
'20120801';
1102 rows selected.
Elapsed: 00:00:04.71
:
Statistics
----------------------------------------------------------
8994 consistent gets
59 physical reads
SQLの性能計測、ボトルネック特定
(正しいSQL性能計測の知識が必要)
結合順序
結合操作
アクセスパス
実行時間
仕事量
(論理読込、
物理読込)
- 15. 15
類似点2. セオリーの重要性(SQLチューニングの例)
FULL SCANには… INDEXだ!
-------------------------------------------
| Id | Operation | Name |
-------------------------------------------
| 0 | SELECT STATEMENT | |
|* 1 | HASH JOIN | |
| 2 | TABLE ACCESS FULL| TEST_TABLE_A |
|* 3 | TABLE ACCESS FULL| TBL_B |
-------------------------------------------
----------------------------------------------
| Id | Operation | Name |
----------------------------------------------
| 0 | SELECT STATEMENT | |
| 1 | NESTED LOOPS | |
|* 2 | TABLE ACCESS FULL| TBL_B |
|* 3 | INDEX RANGE SCAN | TEST_TABLE_A_I2 |
----------------------------------------------
-------------------------------------------------------------
| Id | Operation | Name | E-Rows | A-Rows |
-------------------------------------------------------------
| 0 | SELECT STATEMENT | | | 1102 |
|* 1 | HASH JOIN | | 81 | 1102 |
| 2 | TABLE ACCESS FULL| TEST_TABLE_A | 0 | 2600K|
|* 3 | TABLE ACCESS FULL| TBL_B | 300 | 11 |
-------------------------------------------------------------
0件統計には…
-------------------------------------------------------------
| Id | Operation | Name | E-Rows | A-Rows |
-------------------------------------------------------------
| 0 | SELECT STATEMENT | | | 1102 |
|* 1 | HASH JOIN | | 30012 | 1102 |
|* 2 | TABLE ACCESS FULL| TBL_B | 300 | 11 |
| 3 | TABLE ACCESS FULL| TEST_TABLE_A | 2600K| 2600K|
-------------------------------------------------------------
オプティマイザ統計採取だ!
- 18. 18
類似点3. 練習と実践(実戦)(SQLチューニングの例)
ボトルネック特定の練習(リアルタイムSQL監視)
===================================================================================
| Id | Operation | Name | Activity | Activity Detail |
| | | | (%) | (# samples) |
===================================================================================
| 0 | SELECT STATEMENT | | | |
| 1 | SORT UNIQUE | | | |
| 2 | UNION-ALL | | | |
| : | : | : | : | : |
| 7 | VIEW | VM_NWVW_1 | | |
| -> 8 | HASH GROUP BY | | 92.11 | Cpu (1168) |
| -> 9 | HASH JOIN | | 7.57 | Cpu (96) |
| 10 | INDEX RANGE SCAN | xxxx11101 | | |
| : | : | : | : | : |
| 20 | TABLE ACCESS FULL | xxxx111 | | |
===================================================================================
ここが遅そう。
Rows (1st) Rows (avg) Rows (max) Row Source Operation
---------- ---------- ---------- ----------------------------------
1102 1102 1102 HASH JOIN (cr… time=13798759 ...
2600026 2600026 2600026 TABLE ACCESS FULL TEST_TABLE_A (cr=8831 ... time=276773 ...
11 11 11 TABLE ACCESS FULL TBL_B (cr... time=16130 ...
Enterprise Edition の Option が無くたって特定だ!(SQLトレース)
ここが遅そう。
- 21. 21
類似点4. 超高速PDCA(SQLチューニングの例)
こういう攻防(PDCA)を”分~秒単位”で
繰り広げるのが、SQLチューニング
EXPLAIN PLAN
-------------------------------------------
| Id | Operation | Name |
-------------------------------------------
| 0 | SELECT STATEMENT | |
|* 1 | HASH JOIN | |
| 2 | TABLE ACCESS FULL| TEST_TABLE_A |
|* 3 | TABLE ACCESS FULL| TBL_B |
-------------------------------------------
実行計画の確認(EXPLAIN)
10:48:08 SQL> SELECT /*+ MONITOR */
:
Elapsed: 00:00:04.71
:
Statistics
------------------------------------------------------
8994 consistent gets
59 physical reads
SQL性能計測
=========================================================================
| Id | Operation | Name | Activity Detail |
=========================================================================
| 0 | SELECT STATEMENT | | |
| 1 | HASH JOIN | | Cpu (9) |
| | | | direct path write temp (1) |
| 2 | TABLE ACCESS FULL | TEST_TABLE_A | Cpu (1) |
| 3 | TABLE ACCESS FULL | TBL_B | |
=========================================================================
ボトルネック特定
-- 索引作成
CREATE INDEX~
-- 統計採取
EXEC DBMS_STATS.GATHER_TABLE_STATS~
-- チューニング・アドバイザ
EXEC DBMS_SQLTUNE.EXECUTE_TUNING_TASK~
-- ヒント文
SELECT /*+ LEADING(B A) USE_HASH(A) */ ~
etc…
チューニングの試行
- 24. 24
類似点5. 判り易い結果(SQLチューニングの例)
速くなるか 遅くなる(変わらない)か
21:25:11 SQL> SELECT /*+ MONITOR …
:
Elapsed: 00:00:04.09
:
Statistics
----------------------------------------------
121997 consistent gets
11129 physical reads
:
21:05:34 SQL> SELECT /*+ MONITOR …
:
Elapsed: 00:00:00.99
:
Statistics
-----------------------------------------------
8986 consistent gets
8901 physical reads
:
21:05:34 SQL> SELECT /*+ MONITOR …
:
Elapsed: 00:00:00.99
:
Statistics
-----------------------------------------------
8986 consistent gets
8901 physical reads
:
21:22:49 SQL> SELECT /*+ MONITOR
:
Elapsed: 00:00:00.14
:
Statistics
----------------------------------------------------------
254 consistent gets
140 physical reads
:
- 34. 34
画像引用元(引用順)
(c)CAPCOM ストリートファイター2
(c)SEGA バーチャファイター2
(c)CAPCOM ストリートファイターZERO3
(c)SEGA バーチャファイター4 エボリューション
(c)SEGA バーチャファイター5
(c)CAPCOM ストリートファイター5
STREET FIGHTER III RYU FINAL -闘いの先に-
中平 正彦(著)・新声社(出版)