Más contenido relacionado La actualidad más candente (20) Similar a MySQL 5.7の次のMySQL 8.0はどんなものになるだろう (20) MySQL 5.7の次のMySQL 8.0はどんなものになるだろう9. MySQL 5.6
InnoDB FTS, InnoDB GIS
InnoDBオンラインALTER TABLE
InnoDB Memcached Plugin
performance̲schemaの強化
GTIDの導⼊
DATETIME型のマイクロ秒対応
マルチスレッドスレーブ
クラッシュセーフスレーブ
8/60
15. 参考
MySQL :: MySQL 8.0 Release Notes
MySQL :: MySQL 8.0 Reference Manual :: 1.5 Server
and Status Variables and Options Added, Deprecated,
or Removed in MySQL 8.0
14/60
17. イマココ
5.1
5.1 5.5 5.6 5.7
5.1, 5.2, 5.3 5.5 10.0 10.1 10.2
5.5 5.6 5.7 8.0
Percona Server
MySQL
MariaDB
16/60
18. ツギココ
5.1
5.1 5.5 5.6 5.7
5.1, 5.2, 5.3 5.5 10.0 10.1 10.2
5.5 5.6 5.7 8.0
Percona Server
MySQL
MariaDB
17/60
20. ちょっと思うこと
MariaDB 10.2では binlog_format=MIXED がデフォルトにな
ったし(MySQL < 5.7はSTATEMENT, 5.7以降はROW)そ
ろそろDBAの目に⾒える範囲で互換性がなくなってきている
10.0くらいまではプラグインとかゴニョる⼈には⾒えたけどDBAには
⾒えない程度の非互換だった
-
MySQLプロトコルレベルでの互換性はあるのでまだそこの⼼配はいら
ないけど
-
19/60
21. ⾯⽩いこと
Window FunctionはMariaDB 10.2で⼊れてきた(あるい
は、MariaDB Column Store(新⽣InfiniDB))ものに対抗し
て後から⾔い始めてる
CTEもMariaDB 10.2の⽅が先だった気がする-
Data At Rest Encryptionが実装された後にInnoDB暗号化
が追いかけて実装された
ログファイル、UNDOファイルの暗号化もMariaDBが先⾏-
MariaDBが先⾏実装する、MySQLが ムキになって それを追
いかける
⇒ 機能が増えて 俺が みんなが楽しい-
Multi Source Replicationもそうだったな-
20/60
24. MySQL de NoSQLの歴史
InnoDB API
Handler API
Executor
Optimizer
Parser
MySQL Protocol HS Protocol
HS Plugin
memcached Protocol
InnoDB Memcached
HTTP/MySQL X
23/60
26. InnoDB Memcached Plugin
MySQL 5.6〜
基本的な⽅向性はHandlerSocketといっしょ
より⼀般的なmemcachedプロトコルを選んだところまでは
良かったものの
ちなみに、MySQL Clusterにもmemcached NDB engineと
いうmemcachedをしゃべるプラグイン(︖)がある
RDSでサポートされている唯⼀のMySQL de NoSQLインタ
ーフェース
25/60
27. MySQL HTTP Plugin
ラボ版MySQL 5.7のみ
たぶんもう開発されない
考え⽅としては「かっ⾶ばして⾼速化/軽量化」ではなく、
「HTTPをしゃべれる全てのライブラリーがデータベースの
クライアントになれる」ってことのような気がする
ちなみにMySQL Clusterにもmod̲ndbというHTTPをしゃ
べるプラグイン(︖)がある
26/60
28. MySQL HTTP Pugin(lab)
$ mysql -e "SELECT * FROM myhttp.simple"
+----+------------------+
| id | col_a |
+----+------------------+
| 1 | Hello |
| 2 | |
| 3 | world! |
| 4 | yoku0825 is here |
+----+------------------+
$ curl --user a:b "127.0.0.1:8080/sql/myhttp/SELECT+%2A+FROM+simple"
[
{
"meta":[
{"type":3,"catalog":"def","database":"myhttp","table":"simple","org_table":"simple","column":"id","org_col
umn":"id","charset":63,"length":11,"flags":16899,"decimals":0},
{"type":253,"catalog":"def","database":"myhttp","table":"simple","org_table":"simple","column":"col_a","or
g_column":"col_a","charset":33,"length":765,"flags":0,"decimals":0}
],
"data":[
["1","Hello"],
["2"," "],
["3","world!"],
["4","yoku0825 is here"]
],
"status":[{"server_status":34,"warning_count":0}]
}
]
27/60
30. MySQL de NoSQLの歴史
InnoDB API
Handler API
Executor
Optimizer
Parser
MySQL Protocol HS Protocol
HS Plugin
memcached Protocol
InnoDB Memcached
HTTP/MySQL X
29/60
31. MySQL X (X protocol)
MySQL 5.7.12〜 (GA #とは)
JSONデータ型、JSON関数群と若⼲の兼ね合いアリ
それらと合わせて「MySQL Document Store」という概念で売り込
みたいらしい
-
SQLパーサーをかっ⾶ばさない系
なのでgeneral̲logやスローログやbinlogに影響を及ぼさない-
サーバー側の「MySQL X」、クライアント側の「MySQL
Shell」または「X Dev API」で対になっている
30/60
35. 非同期クライアント構想 in MySQL X(未実装)
http://mysqlserverteam.com/mysql-5-7-12-part-2-improving-
the-mysql-protocol/
34/60
39. 新しい構⽂(1)
共通テーブル式(CTE)のサポート(WITH / WITH RECURSIVE
句)(8.0)
derivedテーブル(FROM句サブクエリー)の機能を使って実装され
ている
-
5.7で暗黙のテンポラリーテーブルのInnoDB化を頑張ったから実現し
た ︖
-
ロールとデフォルトロールの追加(8.0)
構⽂としては新しい SET ROLE, CREATE ROLE などなど-
ログインユーザーに権限をプラスする感じ-
38/60
40. 新しい構⽂(2)
降順インデックス( KEY idx̲name ( column̲name
DESC ) )のサポート
SELECT .. NOWAIT , SELECT .. SKIP LOCKED 構⽂のサ
ポート
SELECT .. FOR UPDATE NOWAIT ⇒ ロック待ちせずに即アボート-
SELECT .. FOR UPDATE SKIP LOCKED ⇒ ロックを取れなかった⾏は取
らずに、取れた⾏だけロックと結果を返却
キューっぽいテーブルにいいんじゃない︖ ってドキュメントに書いてあった
-
Window Function ︕︖ (未実装)
https://www.slideshare.net/DagHWanvik/sql-window-
functions-for-mysql
-
39/60
43. レプリケーション関連(1)
5.6, 5.7と (特に準同期) レプリケーションのスループット
をとにかく上げようとしてきた
バイナリーログのグループコミット(5.6)
Bug#70669のFixでロック粒度がすごくでかい(5.6)
5.7でロックを分割し、スループットを向上させた
-
マルチスレッドスレーブ(5.6)
5.7ではバイナリーログのマスターでのグループコミット状況に合わせたパラレル化が
可能に(いわゆるスキーマ内マルチスレッドスレーブ)
-
42/60
44. レプリケーション関連(2)
master̲info, relay̲log̲info のInnoDB化
リレーログから取り出したイベントとrelay̲log̲infoを “1つのトラン
ザクションとしてコミット” し、 “コミットされていないリレーログ
はSQLスレッドが⽌まったら全部消す” ことでクラッシュセーフスレ
ーブを構成可能(5.6)
-
テーブル化することで複数の構造を容易に保存できるようになり、マ
ルチソースレプリケーションが実現(5.7)
-
GTID関連の使い勝⼿向上
オンラインでGTIDの有効化(5.7)-
SET GTID_PURGED ="+gtid_set" 構⽂のサポート(8.0)-
レプリケーション関連ステータスのperformance̲schema
へのポート(5.7)
5.7では SHOW SLAVE STATUS を完全に置き換えることはできなかった
ので8.0に期待
-
43/60
51. Hello, Dictator InnoDB
今まで プラガブルだったからできなかったこと を実現して
いく
データディクショナリーを .ibd ファイルのヘッダに載せる
ことで、InnoDBの耐久性をテーブル定義情報にも適⽤
MyISAMの都合を考えずに特化した結果に得られそうなもの
(予定) バッファプールに載ってるかどうかでオプティマイザーコスト
を打ち分けられるオプティマイザー
-
(予定) ネイティブパーティショニング (これ⾃体は実装済み) による
外部キー制約の撤廃
-
(噂) ページ内パーシャルアップデート(JSONデータ型だけ︖)-
50/60
53. MySQL InnoDB Cluster
MySQL Group Replication
ちょっと強い相互準同期レプリケーションを実現するプラグイン(5.7)-
ちょっと強い準同期 = 独⾃リレーログを送ってコンフリクトしないか
どうかの判定まで
-
コンフリクトしないことまでは即時保証だけど適⽤が終了するのは非
同期
-
グループレプリケーション内で相互に更新をやり取りするのでマルチ
マスター構成が可能
-
52/60
54. MySQL InnoDB Cluster
MySQL Router
グループレプリケーションのメンバー情報を問い合わせてキャッシュ-
キャッシュに沿って⽣きているサーバーにコネクションをルーティン
グ
コネクションのルーティングであってトランザクションの再開とかはできない
-
53/60
59. R.I.P. MySQL Fabric
MySQL Fabric support was removed.
MySQL :: MySQL Router Release Notes :: Changes in
MySQL Router 2.1.2 (2017-03-06, Release Candidate)
58/60