35
JPOUG Advent Calendar 2016 – Day15 - SQL チチチチチチチ チチチチチチチチ チチチチチチチチチチチ チ

2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15

  • Upload
    -

  • View
    541

  • Download
    1

Embed Size (px)

Citation preview

Page 1: 2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15

JPOUG Advent Calendar 2016 – Day15 -SQL チューニングと

対戦格闘ゲームの類似性について語る。

柴田 歩

Page 2: 2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15

2

自己紹介代わりのコンテンツ類

DDD 2013 SQL チューニングに必要な考え方と最新テクニック

http://www.oracle.com/technetwork/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/jp/ondemand/ddd-2016-3373953-ja.html

Here comes new challenger !!!

Page 3: 2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15

3

Warning !この書き物はポエムです!

この書き物はワイ ( 柴田 歩 ) が、SQL チューニングと対戦格闘ゲームの

類似性について綴ったポエムです。ポエムであるが故に、技術的に役に立つことは一切書かれてないので、それは予めご承知置きして下さいやで彡 ( ゚ )( ゚ )

Page 4: 2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15

4

はじめに

Page 5: 2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15

5

対戦格闘ゲームとはそもそも何なのか?( 知らない人向け )

はじめに

Page 6: 2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15

6

こういうの

(c)CAPCOMストリートファイター 2より

Page 7: 2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15

7

通常 は 2 本 or 3 本先取で勝ち

(c)CAPCOMストリートファイター 2より

Page 8: 2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15

8

過去ワイがやりこんだ格ゲー

(c)CAPCOM ストリートファイター 2 より

スト 2( ダルシム ) バーチャ 2( ラウ )

(c)SEGA バーチャファイター 2 より

Page 9: 2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15

9

過去ワイがやりこんだ格ゲー ( キリが無いので次へ

(c)CAPCOM ストリートファイター ZERO3 より

スト ZERO3(V ダルシム ) バーチャ 4( ブラッド )

(c)SEGA バーチャファイター 4エボリューション より

Page 10: 2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15

10

類似点その 1まずは基礎知識が重要

類似点その 1

Page 11: 2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15

11

類似点 1 ・まずは基礎知識が重要 ( 格ゲーの例 )立ち P の発生フレーム

( 軽量級 11F, 中量級 12F, 重量級13F)

(c)SEGA バーチャファイター 5 より

有利/不利 ( 硬化差 )( ガード時 -4F, Hit 時 +5F, Chit 時

+7F)

(c)SEGA バーチャファイター 5 より

Page 12: 2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15

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 A10:48:08 4 , TBL_B B10:48:08 5 WHERE A.P_NO2 = B.P_NO10:48:08 6 AND A.P_CHAR = B.P_CHAR10: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 性能計測の知識が必要 )

結合順序

結合操作

アクセスパス

実行時間

仕事量( 論理読

込、物理読込 )

Page 13: 2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15

13

類似点その 2セオリーの重要性

類似点その 2

Page 14: 2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15

14

類似点 2. セオリーの重要性 ( 格ゲーの例 )

大きな有利フレームを取ったら… 大技狙いだ!

(c)SEGA バーチャファイター 5 より (c)SEGA バーチャファイター 5 より

小さな有利フレームを取ったら…投げと中段の二択だ!

投げ

中段(c)SEGA バーチャファイター 5 より

Page 15: 2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 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|-------------------------------------------------------------

オプティマイザ統計採取だ!

Page 16: 2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15

16

類似点その 3練習と実践 ( 実戦 )

類似点その 3

Page 17: 2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15

17

類似点 3. 練習と実践 ( 実戦 )( 格ゲーの例 )

コンボ ( 連続技 ) の練習 避け+投げ抜けの練習

(c)SEGA バーチャファイター 5 より (c)SEGA バーチャファイター 5 より

Page 18: 2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15

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 トレース )

ここが遅そう。

Page 19: 2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15

19

類似点その 4超高速 PDCA

類似点その 4

Page 20: 2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15

20

類似点 4. 超高速 PDCA( 格ゲーの例 )

こういう攻防 (PDCA) を”フレーム単位”で繰り広げるのが格ゲー

防御行動 ( ガード、ぼっしゃが、避け抜け

等 )投げ

中段技

成功( 二択へ )

失敗

暴れ ( 出の速い上下段、

デカい中段、等 )

成功( コンボへ )

成功(起き攻めへ )

(c)SEGAバーチャファイター 5 より

(c)SEGAバーチャファイター 5 より

(c)SEGAバーチャファイター 5 より

Page 21: 2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15

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…

チューニングの試行

Page 22: 2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15

22

類似点その 5判り易い結果

類似点その 5

Page 23: 2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15

23

類似点 5. 判り易い結果 ( 格ゲーの例 )

勝つか 負けるか

(c)CAPCOM ストリートファイター 2 より (c)CAPCOM ストリートファイター 2 より

Page 24: 2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15

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:

Page 25: 2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15

25

類似点その 6個性的な

プレイヤー (SQL)

類似点その 6

Page 26: 2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15

26

類似点 6. 個性的なプレイヤー ( 格ゲーの例 )

梅原大吾氏

ウメハラ こと 梅原大吾氏 バーチャ神 こと ちび太氏

格闘新世紀 VI優勝時のちび太氏

梅原氏伝説の試合 ( スト 3日米大会準決勝 )(c) CAPCOM ストリートファイター 3 より

Page 27: 2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15

27

類似点 6. 個性的な SQL(SQL チューニングの例 )SQL テキスト 6700 行超・実行計画500 ステップ超の化け物 SELECT文

彡 ( ゚ )( ゚ ) 「……これの性能要件って何分位ですやろうか?」お客様「オンライン画面のなんで、 3秒ですやで。」彡 ( ゚ )( ゚ ) 「ファッ !? この SQL で 3秒は無理なんやないでしょうか…」お客様「でも偶に 10秒位で返ってくるんですよ。」彡 ( ゚ )( ゚ ) 「マ? 100% でないとはいえ Oracle すごいんやな。。。」※最終的には何とかなりました。。。

210億件から 7億件を抽出してグルーピング/サマリする鬼 SQL

お客様 「 SQL はアプリでアドホックに動的生成されるので、ヒントや SPM は使えません。明細データから動的に集計するのがエンドユーザ要件なので、事前集計のマートや Mview は使えません。 RFP の記載要件で 3秒以内に返ってくる必要があります。。。」

彡 (-)(-) 「両手両足縛られた状態で、 4km泳げないのは無能です。許しません。。。みたいな要件は止めてクレメンス……」※最終的には何とかなりました。。。

Page 28: 2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15

28

まとめ?

Page 29: 2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15

29

格ゲーの対戦を楽しむように

(c)SEGA バーチャファイター 4 より

(c)SEGA バーチャファイター 2 より

(c)CAPCOM ストリートファイター 2 より

Page 30: 2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15

30

SQL チューニングを楽しめ!-------------------------------------------| Id | Operation | Name |-------------------------------------------| 0 | SELECT STATEMENT | ||* 1 | HASH JOIN | || 2 | TABLE ACCESS FULL| TEST_TABLE_A ||* 3 | TABLE ACCESS FULL| TBL_B |-------------------------------------------

Page 31: 2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15

31

果てしない戦いの末に

(c)SEGA バーチャファイター 5 より

(c)CAPCOM ストリートファイター ZERO3 より

(c)CAPCOM ストリートファイター 5 より

Page 32: 2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15

32

SQL チューニングと対戦格闘ゲームの真髄を

Page 33: 2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15

33

確かみてみろ!

Page 34: 2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15

34

画像引用元 ( 引用順 ) (c)CAPCOM ストリートファイター 2 (c)SEGA バーチャファイター 2 (c)CAPCOM ストリートファイター ZERO3 (c)SEGA バーチャファイター 4 エボリューション (c)SEGA バーチャファイター 5 (c)CAPCOM ストリートファイター 5 STREET FIGHTER III RYU FINAL - 闘いの先に -中平 正彦 (著 ) ・新声社 ( 出版 )

Page 35: 2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15

35

おわり

ご清聴、サンガツだったやで!