[d37]mysqlの真のイノベーションはこれだ!mysql 5.7と「実験室」 by ryusuke...

73
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 1

Upload: insight-technology-inc

Post on 08-May-2015

1.731 views

Category:

Technology


7 download

TRANSCRIPT

Page 1: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 1

Page 2: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 2

MySQL 5.7&MySQL Labs

Sales Consulting Manager, JAPAC 梶山 隆輔 / Ryusuke Kajiyama

Page 3: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 3

以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。また、情報提供を唯一の目的とするものであり、いかなる契約にも組み込むことはできません。以下の事項は、マテリアルやコード、機能を提供することをコミットメント(確約)するものではないため、購買決定を行う際の判断材料になさらないで下さい。オラクル製品に関して記載されている機能の開発、リリースおよび時期については、弊社の裁量により決定されます。

Oracleは、米国オラクル・コーポレーション及びその子会社、関連会社の米国及びその他の国における登録商標または商標です。他社名又は製品名は、それぞれ各社の商標である場合があります。

Page 4: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 4

MySQL 5.5 MySQL Cluster 7.3

MySQL Enterprise Monitor 2.3 MySQL Enterprise Backup

Security Scalability HA Audit

MySQL 5.6 MySQL Workbench 6.0

M y S Q L U t i l i t i e s

M y S Q L A p p l i e r f o r

H a d o o p

MySQL Workbench 5.2 M y S Q L E n t e r p r i s e O r a c l e C e r t i f i c a t i o n s

MySQLのイノベーション

M y S Q L C l u s t e r M a n a g e r Windows installer & Tools

MySQL Cluster 7.2 MySQL Cluster 7.1

MySQL Migration Wizard

Page 5: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 5

MySQL: Everywhere and Growing Platform of Choice for Next Generation Web, Cloud & Embedded Applications

World’s Most Popular

Open Source Database

Database Platform for

Next Gen Web Apps

Leading Database for

Web Applications

Leading Database in the Cloud

Integrated with Hadoop in majority of

Big Data platforms

#1 Linux Career IT skill: MySQL *

* Source: Linux Career IT Skills Watch update July 2013

Downloads & Sales Growth

Best of both Worlds SQL+NoSQL

LAMP + Python +Node.js + Go +...

Awards & Social Media Momentum

Page 6: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 6

DMRs – Development Milestone Releases

  リリース候補版の品質になった機能のみを含む

  年に2-4回リリース

  コミュニティでのテストや使用、フィードバックのため

  機能拡張の加速

  品質の改善

Page 7: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 7

The Open Road to MySQL 5.6

Optimizer: MRR, ICP, File Sort

InnoDB: Split Kernel Mutex, MT Purge

Replication: Crash-Safe, Multi-Thread Slave, Checksums

Memcached API New P_S Partitioning Improvements

*Development Milestone Release

RC Nov 2012

DMR1* April 2011

DMR2 Oct 2011

Optimizer: BKA, New EXPLAIN, Traces

InnoDB: Dump/Restore Buffer Pool

More P_S

DMR3 Dec 2011

Optimizer: Sub-Queries

InnoDB: Full Text Index, Read-Only Optimizations

Condition Handling Fractional Seconds

DMR4 April 2012

Optimizer: JSON EXPLAIN, Sub-Queries

Replication: GTIDs

TIMESTAMP & DATESTAMP More P_S

DMR5 Aug 2012

InnoDB: TT, Online DDL, Memcached API

Replication: Binary Log Group Commit

Password Mgmt More Partitioning

New Server Defaults More Partitioning More GTID, TT

Predictable Releases for the MySQL Community, Allowing Feedback

Page 8: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 8

MySQL 5.7 DMR 新機能

Page 9: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 9

MySQL 5.7.2 DMR

  InnoDB より高いトランザクション処理性能と可用性   レプリケーション より高い拡張性と可用性   Performance Schema より詳細な性能統計情報   オプティマイザ クエリパフォーマンスのEXPLAIN可視化の改良 Available Now! Get it here:

MySQL 5.6をベースに各種機能を改良

dev.mysql.com/downloads/mysql/

New!

Page 10: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 10

MySQL 5.7.2 Sysbench Benchmarks

Sysbench Point Select

Intel(R) Xeon(R) CPU X7560 x86_64 4 sockets x 8 cores-HT (64 CPU threads) 2.27GHz, 256G RAM Oracle Linux 6.2

95% Faster than MySQL 5.6 172% Faster than MySQL 5.5

0

100000

200000

300000

400000

500000

600000

8 16 32 64 128 256 512 1024

Que

ries

per S

econ

d

Concurrent User Sessions

MySQL-5.7

MySQL-5.6

MySQL-5.5

500,000 QPS

Page 11: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 11

MySQL 5.7.2 Sysbench Benchmarks OLTP Read Only

Intel(R) Xeon(R) CPU X7560 x86_64 4 sockets x 8 cores-HT (64 CPU threads) 2.27GHz, 256G RAM Oracle Linux 6.2

0

5000

10000

15000

20000

25000

8 16 32 64 128 256 512 1024

Tran

sact

ions

per

Sec

ond

Concurrent User Sessions

MySQL-5.7

MySQL-5.6

MySQL-5.5

17% Faster than MySQL 5.6 134% Faster than MySQL 5.5

sb_OLTP_RO_1M_8tab-ps Max-TPS

Page 12: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 12

0

5000

10000

15000

20000

25000

30000

35000

40000

With Selects Without Select

Con

nect

ions

per

sec

ond

MySQL 5.7.2

MySQL 5.6.9

MySQL 5.7.2: Connections / second 新規接続の処理の高速化

Facebookからの要望をベースに開発 THDの初期化処理とネットワークの初期化処理をワーカースレッドに分離

•  mysql-bench •  25 concurrent client threads •  Executing connect/select/disconnect •  100000 iterations each

+32% +64%

Page 13: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 13

オプティマイザ

Page 14: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 14

MySQL 5.7.2: オプティマイザ

 課題 - あるセッションのクエリの処理に長い時間がかかる  新しいオプション

–  他のセッションに対して EXPLAIN FOR CONNECTION

–  遅延の根本原因を発見できる –  クエリの 適化につなげられる

 コネクションの<id>は SHOW PROCESSLIST で確認

稼働中のクエリに対するEXPLAIN

EXPLAIN [FORMAT=(JSON|TRADITIONAL)] [EXTENDED] FOR CONNECTION <id>;

Page 15: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 15

MySQL 5.7.2: オプティマイザ

Total query cost and Per table Volume (in gb/mb/kb) = (# of rows) * (record width)

JSON EXPLAINの拡張

Page 16: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 16

Performance Schema

Page 17: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 17

MySQL 5.7.2 Performance Schema

 メモリに関する利用統計情報 –  200件以上のメモリ関連Instruments(統計項目)

 利用統計情報をグルーピング –  メモリの利用タイプ (キャッシュ、内部バッファなど) –  スレッド/アカウント/ユーザ/ホストの間接的なメモリ利用

 Attributes(属性情報)の種類 –  利用量 (バイト単位)、処理回数、 大値/ 小値

メモリ利用状況

Page 18: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 19

MySQL 5.7.2 Performance Schema

 SQL文の稼働統計を拡張 –  5.6を拡張しストアドプログラムをカバー、必要なコマンドとSQLを追加

 新しいInstruments –  statement/sp/cclose, cfetch, copen –  statement/scheduler/event

 新しいオブジェクトタイプ –  EVENT, FUNCTION, PROCEDURE, TRIGGER

ストアドプログラムの稼働統計

Page 19: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 21

InnoDB

Page 20: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 22

MySQL 5.7.2: InnoDB

  Sysbench READ ONLY の性能が 50-100% 向上(8テーブル)

  Sysbench POINT SELECTにて秒間 約500,000トランザクション   Sysbench OLTP_ROにて秒間 20,000トランザクション超

  5.7では明示的に START TRANSACTION READ ONLY を 実行する必要無し

Better Performance, Scalability

Page 21: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 24

0

500

1000

1500

2000

2500

Tota

l Tim

e in

Sec

onds

MySQL 5.7 versus 5.6 2 - 11 X Improvement

5.6.13

5.7.2

MySQL 5.7.2: InnoDB Temporary Tables 性能の向上

11倍 高速化 CREATE/DROP   テーブルの作成や削除処理中のIOを削減 2-4倍 高速化 INSERT/DELETE/ UPDATE   REDOログの書き込み、ロックおよびチェンジバッファの利用を削減

* sql-bench, modified to use temp-tables * Seed size of 10K for Create/Drop * Seed size of 5M for Insert/Delete/Update

Total time to complete in seconds

11X 2X

4X 2X

Page 22: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 25

MySQL 5.7.2: InnoDB

 オンラインでのインデックス名の変更 –  ALTER TABLE t RENAME INDEX i1 TO i2

 オンラインでのVARCHAR列の変更

オンラインALTER TABLE の拡張

ALTER TABLE t RENAME INDEX i1 to i2;

ALTER TABLE t1 ALGORITHM=INPLACE, CHANGE COLUMN c1 c1 VARCHAR(255);

Page 23: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 26

MySQL 5.7.2: InnoDB

  5.6の innochecksum –  InnoDBの表領域ページのチェックサムを算出、記録し出力

  5.7での改良点: •  アルゴリズムを選択可能に (innodb/crc32/none) •  現在のチェックサムを新しいアルゴリズムで上書き可能 •  新しいチェックサムで強制的に上書き可能 (無効の場合) •  処理中止前に、何件の不一致まで処理するか指定可能 •  複数の表領域、および複数の表領域ファイルに対して実行可能 •  2GB 以上の表領域ファイルに対して実行可能 •  ページタイプごとのサマリ表を出力可能

Innochecksum の改良

Page 24: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 27

レプリケーション

Page 25: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 28

同一スキーマ内でのマルチスレッド スレーブ

 スレーブ内の複数のワーカースレッドがトランザクションを並列で処理 –  並列処理されるトランザクションの対象データが同一で無い場合に限る –  同一スキーマ内でもマルチスレッドで処理可能

 トランザクションの一貫性を保って処理  スレーブのスループットを向上  現在開発中

–  リファクタリング完了

–  チューニングや 適化は現在作業中

スレーブのスループットを向上

Page 26: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 29

Slave Master

MySQL 5.6の準同期レプリケーション

 マスターはバイナリログへの書き込みとストレージエンジンへのコミットを行ってからスレーブにトランザクションを送る

 スレーブからの応答がタイムアウトしても、トランザクションとしては成功となる

 スレーブにトランザクションが渡されていない状態で、マスタが落ちると、成功したトランザクションを喪失する

App commits

Written to Binary log

Send to slave(s)

Commit to SE & externalized

Ack Commit

Write to relay log

Apply txn

Page 27: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 30

Slave Master

“Lossless”準同期レプリケーション

 マスターは指定のスレーブがトランザクションを受信するまで以下の処理を待つ

–  ストレージエンジンへのコミット –  他のクライアントから変更へのアクセス –  アプリケーションへのコミットの応答

 スレーブが変更点を反映させるまでは待たない

–  遅延を 小化

 スレーブに安全にコピーされるまで他のトランザクションが新しいデータを変更できないように

App commits

Written to Binary log

Send to slave(s)

Commit to SE & externalized

Ack Commit

Write to relay log

Apply txn

Page 28: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 31

Slave Master

準同期レプリケーション     MySQL 5.6 MySQL 5.7 “Lossless”

App commits

Written to Binary log

Send to slave(s)

Commit to SE & externalized

Ack Commit

Write to relay log

Apply txn

Slave Master App

commits

Written to Binary log

Send to slave(s)

Commit to SE & externalized

Ack Commit

Write to relay log

Apply txn

Page 29: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 32

マルチソース レプリケーション  複数のマスターでの変更点を1台

のスレーブに集約 –  全ての「シャード」のデータを単一

のビューで分析 –  バックアップ用にデータを集約

 準同期レプリケーションおよびマルチスレッド スレーブに対応

 マスターごとにフィルタと制御可能となる予定

 アプリケーションはマスタごとに個別にアクセス

Binlog

Master 1

Binlog

Master 2

Binlog

Master N

IO 1

Relay 1

Coordinator

W1 W2 … WX

IO 2

Relay 2

Coordinator

W1 W2 … WX

Coordinator

W1 W2 … WX

IO N

Relay N

Coordinator

W1 W2 … WX

Slave

labs.mysql.com

Page 30: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 33

セキュリティ

Page 31: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 34

MySQL 5.7.2: セキュリティ – 監査ログ

 MySQL監査プラグインを有効にして監査ログを出力 –  「誰が、いつ、何を、どこで、どのような」

  ユーザ、日時、ホスト、ステータス …   接続/切断、クエリ、DML、DDL、サーバ&監査の開始/停止…

 MySQL 5.7 での改良点 –  Oracle Audit Vault との統合を改良 –  XMLのサブ要素を使用 –  タイムゾーン

MySQL Enterprise Audit

Page 32: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 35

MySQL 5.7.2: セキュリティ – 監査ログ

5.6 <AUDIT_RECORD

TIMESTAMP="2013-04-15T15:27:27" NAME="Query" CONNECTION_ID="3“ STATUS="0" SQLTEXT="SELECT 1“

/>

5.6 と 5.7 の比較

5.7

Page 33: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 36

その他の改良点

Page 34: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 37

MySQL 5.7.2: トリガの改良

 これまで –  各トリガの組み合わせはテーブル当たり1つずつ

  (INSERT, UPDATE, DELETE) X (BEFORE, AFTER)

 5.7 –  複数のトリガを指定可能

–  実行順を指定可能

一つのテーブルに複数のトリガ

Page 35: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 38

MySQL 5.7.2: トリガーの改良

 テーブル t1 に3個の AFTER INSERT トリガー –  CREATE TRIGGER TRIG1 AFTER INSERT ON t1 FOR EACH ROW ... ; –  CREATE TRIGGER TRIG2 AFTER INSERT ON t1 FOR EACH ROW ... ; –  CREATE TRIGGER TRIG1A AFTER INSERT ON t1 FOR EACH ROW FOLLOWS TRIG1 ... ;

 実行順は: 1) TRIG1 2) TRIG1A 3) TRIG2  関連するInformation_Schema

–  SELECT CREATED FROM INFORMATION_SCHEMA.TRIGGERS –  SELECT ACTION_ORDER FROM INFORMATION_SCHEMA.TRIGGERS –  SHOW CREATE TRIGGER

一つのテーブルに複数のトリガー

Page 36: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 39

MySQL 5.7.2:トリガの改良

 テーブル ‘t1’ には –  ‘c1’ 列がNOT NULL となっている; –  BEFORE INSERT トリガが SET NEW.c1 = 1; を実行 (NULLではない)

 SQL文

– … –  5.6 - 失敗

  "ERROR 1048 (23000): Column 'C1' cannot be null" –  5.7 - 成功

SQL文実行の 後で制約のチェック

INSERT INTO t1 VALUES(NULL) または UPDATE t1 SET c1 = NULL

Page 37: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 40

MySQL 5.7.2: エラーログ

 3つのログレベル: 1.  エラー(ERROR)のみ 2.  エラー(ERROR) + 警告(WARNING) 3.  エラー(ERROR) + 警告(WARNING) + 情報(NOTE) ※デフォルト値

  設定ファイルまたは起動オプションで指定

–  --log-error-verb

  稼働中

ログレベルの制御

--log-error-verbosity=1

SET GLOBAL log_error_verbosity=1;

Page 38: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 41

MySQL 5.7.2: エラーログ

•  UTC タイムスタンプ •  --log_timestamps = SYSTEM | UTC (default)

•  フォーマットの変更 •  タイムスタンプは ISO 8601 / RFC 3339 形式, マイクロ秒単位 •  ログテーブル, TIMESTAMP(6) •  プロセスIDは起動時のみ出力 •  可能な場合は接続IDを出力、それ以外は “0”

出力形式の改良

--log_timestamps = SYSTEM | UTC (default)

Page 39: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 42

MySQL 5.7.2: エラーハンドリング

 スタックされた例外情報を取得するコマンドを実装 (SQL標準で定義)

– . –  スタックされた領域から情報を取得 –  GET [CURRENT] DIAGNOSTICS は現在の診断領域から情報を取得

 ストアドプログラムの開発者にメリット –  より多くの情報を取得可能 –  エラー情報を調査して修正が可能

Stacked Diagnostics

GET STACKED DIAGNOSTICS

Page 40: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 43

MySQL 5.7.2: Error Reporting

CREATE TABLE ids(id INT NOT NULL, UNIQUE(id)); CREATE TABLE errors(id INT NOT NULL, text VARCHAR(2000)); CREATE PROCEDURE insert_id(id INT) BEGIN DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN GET STACKED DIAGNOSTICS CONDITION 1 @msg = MESSAGE_TEXT; INSERT INTO errors VALUES(id, @msg); GET STACKED DIAGNOSTICS CONDITION 1 @errno = MYSQL_ERRNO; IF @errno = 1213 THEN

RESIGNAL; END IF;

END; INSERT INTO ids VALUES(id); END;

例: Stacked Diagnostics

Running

> CALL insert_id(0);CALL insert_id(1);CALL insert_id(0); > select text from errors; Duplicate entry '0' for key 'id'

Page 41: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 44

MySQL 5.7.2: Error Reporting

mysql> DROP TABLE no_such_table; ERROR 1051 (42S02): Unknown table 'test.no_such_table'

mysql> CREATE EVENT e ON SCHEDULE EVERY 1 SECOND DO DELETE FROM t; Query OK, 0 rows affected (0.35 sec)

// 5.6: mysql> SHOW ERRORS; +-------+------+------------------------------------+ | Level | Code | Message | +-------+------+------------------------------------+ | Error | 1051 | Unknown table 'test.no_such_table' | +-------+------+------------------------------------+ 1 row in set (0.00 sec) // 5.7: mysql> SHOW ERRORS; Empty set (0.00 sec)

例: Clear Diagnostics Area

Page 42: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 45

MySQL Labs Releases

Page 43: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 46

MySQL Labs Releases

  新機能をいち早くお試しいただき、フィードバックをいただくため  DMRに含めることができる品質にはなっていない  本番環境での利用はお勧めしない  実験的とはいえ、将来的にはメインの開発ツリーに含めることを視野に

–  例) MySQL 5.6のInnoDB memcached API

http://labs.mysql.com

Please, DO NOT USE THESE BINARIES IN PRODUCTION.

新しい機能をいち早く公開する「実験室」

Page 44: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 47

labs.mysql.com

Page 45: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 48

MySQL Labs Releases

 Hadoop Applier for MySQL

 MySQL JSON UDFs

 MySQL Multi-source Replication

 MySQL Utilities - Fabric

2013年11月現在のLabs版

Page 46: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 49

Hadoop Applier for MySQL

Page 47: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 50

BI Solutions

ACQUIRE

ORGANIZE ANALYZE

DECIDE

Applier

MySQL in the Big Data Lifecycle

Page 48: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 51

MySQL Applier for Hadoop MySQLからHadoopへのリアルタイムストリーミング

 バイナリログの内容をlibhdfsライブラリ経由でHDFSに書き込み

 リアルタイムでのデータ分析を実現

 Hadoop用各種ツールとMySQLデータの統合

http://labs.mysql.com/

Page 49: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 52

Mapping Between MySQL and HDFS Schema

Page 50: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 53

MySQL JSON UDFs

Page 51: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 54

MySQL JSON UDFs

 CのプログラムをMySQLの関数として利用するUDFを活用 http://dev.mysql.com/doc/refman/5.6/en/adding-functions.html

  JSONデータの検証、検索、更新など行う関数群  CREAET FUNCTION コマンドで追加

http://www.slideshare.net/yoyamasaki/my-sql-jsonudf

JSONデータを扱うユーザ定義関数

Page 52: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 55

セットアップ方法(Linux/UNIX環境の場合) ※詳細はREADMEファイル参照

1. http://labs.mysql.com/ から“MySQL JSON UDFs”を   ダウンロード 2.ダウンロードしたファイルに含まれている“libmy_json_udf.so”を plugin_dir に配置   (plugin_dirの確認方法:mysql> show global variables like 'plugin_dir';) 3.CREATE FUNCTIONコマンドでUDFを作成

※UDF(User-DefinedFunction:ユーザ定義関数)

Page 53: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 56

mysql> create function json_valid returns integer soname 'libmy_json_udf.so'; mysql> create function json_search returns string soname 'libmy_json_udf.so'; mysql> create function json_extract returns string soname 'libmy_json_udf.so'; mysql> create function json_replace returns string soname 'libmy_json_udf.so'; mysql> create function json_append returns string soname 'libmy_json_udf.so'; mysql> create function json_remove returns string soname 'libmy_json_udf.so'; mysql> create function json_set returns string soname 'libmy_json_udf.so'; mysql> create function json_merge returns string soname 'libmy_json_udf.so'; mysql> create function json_contains_key returns integer soname 'libmy_json_udf.so';

■CREATE FUNCTION

セットアップ方法(Linux/UNIX環境の場合) ※詳細はREADMEファイル参照

Page 54: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 57

補足:READMEファイルのバグ

Linux/UNIX環境に関して、ファンクション作成コマンドが 以下の通り紹介されているが、ライブラリファイルの名前は ‘libmy_json_udf.so’となっている。  ファンクション作成コマンド   create function json_valid returns integer soname 'libmy_json.so'; ※http://bugs.mysql.com/bug.php?id=70392

Page 55: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 58

サンプルテーブル

mysql> select * from json;

+----+--------------------------------------------------------------------------------+

| id | col1 |

+----+--------------------------------------------------------------------------------+

| 1 | {"id":1,"Name":"Farmer grandmas","price":50000,"Conditions":["farms",15]} |

| 2 | {"id":2,"Name":"Worker grandmas","price":300000,"Conditions":["factories",15]} |

| 3 | {"id":3,"Name":"Miner grandmas","price":1000000,Conditions:["mines",15]} |

| 4 | {"id":4,"Name":"Yoshiaki Yamasaki"} |

+----+--------------------------------------------------------------------------------+

4 rows in set (0.00 sec)

※id=3の列には、フォーマット間違い有り (””が抜けている)

※id=4の列はNameだけ

Page 56: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 59

json_valid:JSONドキュメントのフォーマットチェック (フォーマットが正しければ1、正しくなければ0)

mysql> select id,json_valid(col1) from json;

+----+------------------+

| id | json_valid(col1) |

+----+------------------+

| 1 | 1 |

| 2 | 1 |

| 3 | 0 |

| 4 | 1 |

+----+------------------+

4 rows in set (0.00 sec)

Page 57: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 60

json_search:値が含まれるキーを検索

mysql> select id,json_search(col1,'"Farmer grandmas"') from json where id=1; +----+---------------------------------------+ | id | json_search(col1,'"Farmer grandmas"') | +----+---------------------------------------+ | 1 | Name:: | +----+---------------------------------------+ 1 row in set (0.00 sec) mysql> select json_search(col1,'"farms"') from json; +-----------------------------+ | json_search(col1,'"farms"') | +-----------------------------+ | 0:Conditions:: | | NULL | | NULL | | NULL | +-----------------------------+ 4 rows in set (0.00 sec)

Page 58: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 61

json_replace:値を置換

mysql> select id,json_replace(col1,'Conditions','0','10') from json where id=1; +----+----------------------------------------------------------------------+ | id | json_replace(col1,'Conditions','0','10') | +----+----------------------------------------------------------------------+ | 1 | {"id":1,"Name":"Farmer grandmas","price":50000,"Conditions":[10,15]} | +----+----------------------------------------------------------------------+ 1 row in set (0.00 sec) mysql> select id,json_replace(col1,'Conditions','1','10') from json where id=1; +----+---------------------------------------------------------------------------+ | id | json_replace(col1,'Conditions','1','10') | +----+---------------------------------------------------------------------------+ | 1 | {"id":1,"Name":"Farmer grandmas","price":50000,"Conditions":["farms",10]} | +----+---------------------------------------------------------------------------+ 1 row in set (0.00 sec)

Page 59: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 62

Multi-source Replication

Page 60: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 63

マルチソース レプリケーション  複数のマスターでの変更点を1台

のスレーブに集約 –  全ての「シャード」のデータを単一

のビューで分析 –  バックアップ用にデータを集約

 準同期レプリケーションおよびマルチスレッド スレーブに対応

 マスターごとにフィルタと制御可能となる予定

 アプリケーションはマスタごとに個別にアクセス

Binlog

Master 1

Binlog

Master 2

Binlog

Master N

IO 1

Relay 1

Coordinator

W1 W2 … WX

IO 2

Relay 2

Coordinator

W1 W2 … WX

Coordinator

W1 W2 … WX

IO N

Relay N

Coordinator

W1 W2 … WX

Slave

labs.mysql.com

Page 61: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 64

MySQL Utilities - Fabric

Page 62: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 66

MySQL Utilities 運用管理に関するPythonスクリプト

データベース管理

データベース運用

レプリケーション管理

設定管理

MySQL Utilities

Page 63: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 67

MySQL Utilities

mysqldbcompare 同一サーバ内または2つのサーバ間のデータや定義の比較

mysqldbcopy 別のサーバにデータベースをコピー

mysqldbexport データとメタデータをエクスポート

mysqldbimport データとメタデータをインスポート

mysqldiff 2つのサーバ間のテーブルなどオブジェクトの定義を比較

データおよびデータベース管理

Page 64: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 68

MySQL Utilities

mysqldiskusage デーブルおよびデータファイルのサイズを表示

mysqlindexcheck インデックスの重複をチェック

mysqlmetagrep テーブル定義などのメタデータをgrep mysqlprocgrep INFORMATION_SCHEMA.PROCESSLISTをgrep mysqluserclone 別のサーバにユーザアカウントををコピー

サーバ運用各種

Page 65: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 69

MySQL Utilities

mysqlreplicate レプリケーションを設定

mysqlrplcheck レプリケーションが正しく設定されているかの確認

mysqlrplshow レプリケーショントポロジ(親子関係)を図示

mysqlfailover レプリケーションの自動フェールオーバー switchover 手動でのレプリケーションの切り替え mysqlrpladmin レプリケーションの各種管理

レプリケーション関連

Page 66: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 70

MySQL Utilities

mysqlserverclone 既存のMySQLサーバのコピーを作成

mysqlserverinfo サーバの稼働状況を表示

設定関連&その他

mysqluc MySQL Utilitiesコマンド用ユーザコンソール

Page 67: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 71

MySQL Utilities - Fabric   「シャーディング」による拡張性  コネクタ

–  Python –  Java –  PHP

 アプリケーションでの分割キー –  Range または Hash –  シャード再構成も可能 –  シャード全体の更新も可能

 MySQL Utilities 1.4.0として提供

MySQL Fabric

Connector

Application

Read-slaves

mappings

SQL

Master group

Read-slaves

Master group

labs.mysql.com

Page 68: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 72

MySQL Utilities - Fabric +

MySQL Multi-source Replication +

Multi Thread Slave

Page 69: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 73

MySQL開発の優先課題

Page 70: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 74

 Web、クラウドインフラ、組み込みへの 適化  よりシンプルに、プラガブル アーキテクチャ

-  メンテナンス性向上、さらなる拡張性 -  さらなるNoSQLオプション(HTTP, JSON, JavaScript, etc.)

 リファクタリング -  InnoDBのデータディクショナリ -  オプティマイザ/パーサ/プロトコル

  InnoDB   性能、オンラインDDL、バッファプール

  高可用性構成、レプリケーション、シャーディング

MySQL開発の優先課題

Page 71: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 75

The world's most popular open source database 世界で も普及しているオープンソース データベース

Page 72: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 76

Page 73: [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 77