SlideShare a Scribd company logo
JPOUG Advent Calendar 2016 – Day15 -
SQLチューニングと
対戦格闘ゲームの
類似性について語る。
柴田 歩
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 !!!
3
Warning!この書き物はポエムです!
この書き物はワイ(柴田 歩)が、
SQLチューニングと対戦格闘ゲームの
類似性について綴ったポエムです。
ポエムであるが故に、技術的に役に立つこ
とは一切書かれてないので、それは予め
ご承知置きして下さいやで彡(゚)(゚)
4
はじめに
5
対戦格闘ゲームとは
そもそも何なのか?
(知らない人向け)
はじめに
6
こういうの
(c)CAPCOM
ストリートファイター2より
7
通常 は 2本 or 3本先取で勝ち
(c)CAPCOM
ストリートファイター2より
8
過去ワイがやりこんだ格ゲー
(c)CAPCOM ストリートファイター2より
スト2(ダルシム) バーチャ2(ラウ)
(c)SEGA バーチャファイター2より
9
過去ワイがやりこんだ格ゲー(キリが無いので次へ
(c)CAPCOM ストリートファイターZERO3より
ストZERO3(Vダルシム) バーチャ4(ブラッド)
(c)SEGA バーチャファイター4
エボリューション より
10
類似点その1
まずは基礎知識が重要
類似点その1
11
類似点1・まずは基礎知識が重要(格ゲーの例)
立ちPの発生フレーム
(軽量級11F, 中量級12F, 重量級13F)
(c)SEGA バーチャファイター5 より
有利/不利(硬化差)
(ガード時-4F, Hit時+5F, Chit時+7F)
(c)SEGA バーチャファイター5 より
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性能計測の知識が必要)
結合順序
結合操作
アクセスパス
実行時間
仕事量
(論理読込、
物理読込)
13
類似点その2
セオリーの重要性
類似点その2
14
類似点2. セオリーの重要性(格ゲーの例)
大きな有利フレームを取ったら… 大技狙いだ!
(c)SEGA バーチャファイター5 より (c)SEGA バーチャファイター5 より
小さな有利フレームを取ったら…
投げと中段の二択だ!
投げ
中段
(c)SEGA バーチャファイター5 より
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|
-------------------------------------------------------------
オプティマイザ統計採取だ!
16
類似点その3
練習と実践(実戦)
類似点その3
17
類似点3. 練習と実践(実戦)(格ゲーの例)
コンボ(連続技)の練習 避け+投げ抜けの練習
(c)SEGA バーチャファイター5 より (c)SEGA バーチャファイター5 より
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トレース)
ここが遅そう。
19
類似点その4
超高速PDCA
類似点その4
20
類似点4. 超高速PDCA(格ゲーの例)
こういう攻防(PDCA)を”フレーム単位”で繰り広げるのが格ゲー
防御行動(ガード、
ぼっしゃが、避け抜け等)
投げ
中段技
成功
(二択へ)
失敗
暴れ(出の速い上下段、
デカい中段、等)
成功
(コンボへ)
成功
(起き攻めへ)
(c)SEGA
バーチャファイター5 より
(c)SEGA
バーチャファイター5 より
(c)SEGA
バーチャファイター5 より
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…
チューニングの試行
22
類似点その5
判り易い結果
類似点その5
23
類似点5. 判り易い結果(格ゲーの例)
勝つか 負けるか
(c)CAPCOM ストリートファイター2より (c)CAPCOM ストリートファイター2より
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
:
25
類似点その6
個性的な
プレイヤー(SQL)
類似点その6
26
類似点6. 個性的なプレイヤー(格ゲーの例)
梅原大吾氏
ウメハラ こと 梅原大吾氏 バーチャ神 こと ちび太氏
格闘新世紀VI優勝時のちび太氏
梅原氏伝説の試合(スト3日米大会準決勝)
(c) CAPCOM ストリートファイター3より
27
類似点6. 個性的なSQL(SQLチューニングの例)
SQLテキスト6700行超・実行計画
500ステップ超の化け物SELECT文
彡(゚)(゚) 「……これの性能要件って何分位ですやろうか?」
お客様「オンライン画面のなんで、3秒ですやで。」
彡(゚)(゚) 「ファッ!?このSQLで3秒は無理なんやないでしょうか…」
お客様「でも偶に10秒位で返ってくるんですよ。」
彡(゚)(゚) 「マ?100%でないとはいえOracleすごいんやな。。。」
※最終的には何とかなりました。。。
210億件から7億件を抽出して
グルーピング/サマリする鬼SQL
お客様 「SQLはアプリでアドホックに動的生成されるので、ヒント
やSPMは使えません。明細データから動的に集計するのがエン
ドユーザ要件なので、事前集計のマートやMviewは使えません。
RFPの記載要件で3秒以内に返ってくる必要があります。。。」
彡(-)(-) 「両手両足縛られた状態で、4km泳げないのは無能で
す。許しません。。。みたいな要件は止めてクレメンス……」
※最終的には何とかなりました。。。
28
まとめ?
29
格ゲーの対戦を楽しむように
(c)SEGA バーチャファイター4 より
(c)SEGA バーチャファイター2 より
(c)CAPCOM ストリートファイター2 より
30
SQLチューニングを楽しめ!
-------------------------------------------
| Id | Operation | Name |
-------------------------------------------
| 0 | SELECT STATEMENT | |
|* 1 | HASH JOIN | |
| 2 | TABLE ACCESS FULL| TEST_TABLE_A |
|* 3 | TABLE ACCESS FULL| TBL_B |
-------------------------------------------
31
果てしない戦いの末に
(c)SEGA バーチャファイター5 より
(c)CAPCOM ストリートファイターZERO3 より
(c)CAPCOM ストリートファイター5 より
32
SQLチューニングと対戦格闘ゲームの真髄を
33
確かみてみろ!
34
画像引用元(引用順)
 (c)CAPCOM ストリートファイター2
 (c)SEGA バーチャファイター2
 (c)CAPCOM ストリートファイターZERO3
 (c)SEGA バーチャファイター4 エボリューション
 (c)SEGA バーチャファイター5
 (c)CAPCOM ストリートファイター5
 STREET FIGHTER III RYU FINAL -闘いの先に-
中平 正彦(著)・新声社(出版)
35
おわり
ご清聴、サンガツだったやで!

More Related Content

PDF
マイクロにしすぎた結果がこれだよ!
PDF
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
PDF
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
PDF
例外設計における大罪
PDF
「ウチの事業部の商品をWebサイト・アプリで目立たせて!」私だけじゃなかった! 社内政治と落としどころの見つけ方
PDF
ソーシャルゲームのためのデータベース設計
PDF
MySQLアーキテクチャ図解講座
ODP
Guide To AGPL
マイクロにしすぎた結果がこれだよ!
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
例外設計における大罪
「ウチの事業部の商品をWebサイト・アプリで目立たせて!」私だけじゃなかった! 社内政治と落としどころの見つけ方
ソーシャルゲームのためのデータベース設計
MySQLアーキテクチャ図解講座
Guide To AGPL

What's hot (20)

PDF
テスト文字列に「うんこ」と入れるな
PDF
継承やめろマジやめろ。 なぜイケないのか 解説する
PDF
シリコンバレーの「何が」凄いのか
PDF
TDD のこころ
PDF
暗号技術の実装と数学
PDF
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
PDF
Where狙いのキー、order by狙いのキー
PDF
JDKの選択肢とサーバーサイドでの選び方
PPTX
Azure API Management 俺的マニュアル
PDF
Flutter移行の苦労と、乗り越えた先に得られたもの
PDF
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
PDF
Snowflake Architecture and Performance
PDF
Vacuum徹底解説
PDF
IT系エンジニアのためのプレゼンテーション入門
PPTX
分散システムについて語らせてくれ
PDF
PHPからgoへの移行で分かったこと
PPTX
Power BI をアプリに埋め込みたい? ならば Power BI Embedded だ!
PDF
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
PDF
SQL大量発行処理をいかにして高速化するか
PPTX
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
テスト文字列に「うんこ」と入れるな
継承やめろマジやめろ。 なぜイケないのか 解説する
シリコンバレーの「何が」凄いのか
TDD のこころ
暗号技術の実装と数学
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
Where狙いのキー、order by狙いのキー
JDKの選択肢とサーバーサイドでの選び方
Azure API Management 俺的マニュアル
Flutter移行の苦労と、乗り越えた先に得られたもの
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
Snowflake Architecture and Performance
Vacuum徹底解説
IT系エンジニアのためのプレゼンテーション入門
分散システムについて語らせてくれ
PHPからgoへの移行で分かったこと
Power BI をアプリに埋め込みたい? ならば Power BI Embedded だ!
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQL大量発行処理をいかにして高速化するか
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
Ad

Viewers also liked (20)

PPTX
iostat await svctm の 見かた、考え方
PDF
固定化か?最新化か?オプティマイザ統計の運用をもう一度考える。 -JPOUG Tech Talk Night #6-
PPTX
DBA から開発者への情報提供
PDF
Sql server 2016 always on 可用性グループ new features
PDF
まだ統計固定で消耗してるの? - Bind Peek をもっと使おうぜ! 2015 Edition -
PPTX
Sql server 2016 ctp 3.0 新機能
PDF
Bind Peek をもっと使おうぜ!(柴田 歩) - JPOUG Advent Calendar 2014(Day 5) -
PDF
Dbts2013 特濃jpoug log_file_sync
PDF
Corruption And Revive - db tech showcase 2013 特濃JPOUG
PDF
DDDのすすめ
PDF
Oracle APEX実践報告 @Hackers Champoloo 2016 LT
PDF
Oracle Database Connect 2017 / JPOUG#1
PDF
デザパタ勉強会(上級編)
PDF
Oracle Databaseを用いて学ぶ RDBMSの基本 (抜粋版) - JPOUG Oracle Database入学式 2016
PDF
Oracle Database Entrance Ceremony - Touchdown
PDF
Oracle運用Tips大放出! ~ RAC環境のRMANのパラレル化を極める 編 ~ @2016-02-23 JPOUG
PDF
Asaoka0721
PDF
Jpoug presents なーんでだ2 db tech showcase 2015 tokyo
PDF
Pacemaker+PostgreSQLレプリケーションで共有ディスクレス高信頼クラスタの構築@OSC 2013 Tokyo/Spring
PDF
Meetup! jpoug oracle cloud world - なーんでだ1
iostat await svctm の 見かた、考え方
固定化か?最新化か?オプティマイザ統計の運用をもう一度考える。 -JPOUG Tech Talk Night #6-
DBA から開発者への情報提供
Sql server 2016 always on 可用性グループ new features
まだ統計固定で消耗してるの? - Bind Peek をもっと使おうぜ! 2015 Edition -
Sql server 2016 ctp 3.0 新機能
Bind Peek をもっと使おうぜ!(柴田 歩) - JPOUG Advent Calendar 2014(Day 5) -
Dbts2013 特濃jpoug log_file_sync
Corruption And Revive - db tech showcase 2013 特濃JPOUG
DDDのすすめ
Oracle APEX実践報告 @Hackers Champoloo 2016 LT
Oracle Database Connect 2017 / JPOUG#1
デザパタ勉強会(上級編)
Oracle Databaseを用いて学ぶ RDBMSの基本 (抜粋版) - JPOUG Oracle Database入学式 2016
Oracle Database Entrance Ceremony - Touchdown
Oracle運用Tips大放出! ~ RAC環境のRMANのパラレル化を極める 編 ~ @2016-02-23 JPOUG
Asaoka0721
Jpoug presents なーんでだ2 db tech showcase 2015 tokyo
Pacemaker+PostgreSQLレプリケーションで共有ディスクレス高信頼クラスタの構築@OSC 2013 Tokyo/Spring
Meetup! jpoug oracle cloud world - なーんでだ1
Ad

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

PPTX
V$SQLとその周辺でER図を描いてみよう!
PPT
20090107 Postgre Sqlチューニング(Sql編)
PDF
Databasedesignforsocialgames 110115195940-phpapp02
PPTX
Tuning on my_sql
PDF
プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009
PDF
Webで役立つRDBの使い方
PDF
[db tech showcase Tokyo 2015] B36:Hitachi Advanced Data Binder 実践SQLチューニング方法 ...
PDF
YugabyteDBの実行計画を眺める(NewSQL/分散SQLデータベースよろず勉強会 #3 発表資料)
PDF
DDD 2016 DB 12c クエリー・オプティマイザ新機能活用と統計情報運用の戦略
PPTX
02 kueri zui_shi_hua_notamenopuroziekushiyonshe_ji_
PDF
NTT DATA と PostgreSQL が挑んだ総力戦
PDF
ソーシャルゲームの為のデータベース設計
PDF
[Oracle Code Tokyo 2017] Live Challenge!! SQLパフォーマンスの高速化の限界を目指せ!
PDF
Introduction of Oracle Database Architecture
PPTX
Apuri she ji_gaido_puroziekushiyonshe_ji__v1.0
PDF
分割と整合性と戦う
PDF
2019年度 若手技術者向け講座 実行計画
PDF
Amazon DynamoDB Advanced Design Pattern
PPTX
SQLチューニング入門 入門編
PPTX
爆速!DBチューニング超入門 〜DB性能の基礎とPG-Stromによる高速化〜 2025/2/21
V$SQLとその周辺でER図を描いてみよう!
20090107 Postgre Sqlチューニング(Sql編)
Databasedesignforsocialgames 110115195940-phpapp02
Tuning on my_sql
プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009
Webで役立つRDBの使い方
[db tech showcase Tokyo 2015] B36:Hitachi Advanced Data Binder 実践SQLチューニング方法 ...
YugabyteDBの実行計画を眺める(NewSQL/分散SQLデータベースよろず勉強会 #3 発表資料)
DDD 2016 DB 12c クエリー・オプティマイザ新機能活用と統計情報運用の戦略
02 kueri zui_shi_hua_notamenopuroziekushiyonshe_ji_
NTT DATA と PostgreSQL が挑んだ総力戦
ソーシャルゲームの為のデータベース設計
[Oracle Code Tokyo 2017] Live Challenge!! SQLパフォーマンスの高速化の限界を目指せ!
Introduction of Oracle Database Architecture
Apuri she ji_gaido_puroziekushiyonshe_ji__v1.0
分割と整合性と戦う
2019年度 若手技術者向け講座 実行計画
Amazon DynamoDB Advanced Design Pattern
SQLチューニング入門 入門編
爆速!DBチューニング超入門 〜DB性能の基礎とPG-Stromによる高速化〜 2025/2/21

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