Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
yoku0825を支える技術
MySQLユーザ会会 in 長野 2017
NSEG #87
2017/05/14
yoku0825
yoku0825 #とは
空前絶後のぉ
とある企業のDBA
MySQLを愛し
MySQLに愛された男
※プライバシー保護のため一部音声を変えてあります
GMOペパボの福利厚生
※ここの社員じゃないです
はてなの外部API
MySQLが趣味仕事
ズンドコストレージエンジンの作者
$ wget http://dev.mysql.com/get/Downloads/MySQL‐5.6/mysql‐5.6.29.tar.
$ tar xf mysql‐5.6.29.tar.gz
$ cd m...
キ・ヨ・シ!!
mysql> CREATE TABLE t1 (val varchar(32)) Engine= zundoko;
mysql> SELECT * FROM t1;
+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+
| val   ...
ウーパールーパー ピンクのおとうふ が
目印
※行き倒れていたのはわたしではないです
のbot
:﴾;゙゚'ω゚'﴿:
を支える技術
面白いことがないと生きていけない
なので最近yoku0825‐botを面白がらせている技術を紹介しま
す
\こんにちは/
yoku0825@とある企業のDBA
オラクれない
ポスグれない
マイエスキューエる
生息域
Twitter: @yoku0825
Blog: 日々の覚書
MyNA ML: 日本MySQLユーザ会
MySQL Casual's ...
botが最近気に入っているMySQLの機能
GTID﴾Global Transaction ID﴿
MTS﴾Multi Thread Slave﴿
Defer Table Index
HANDLERステートメント
PMM﴾Percona Mon...
botが最近気に入っているMySQLの機能
GTID﴾Global Transaction ID﴿
MTS﴾Multi Thread Slave﴿
Defer Table Index
HANDLERステートメント
PMM﴾Percona Mon...
GTID﴾Global Transaction ID﴿
MySQL 5.6とそれ以降
5.6は再起動が必要なパラメーター、5.7はオンライン変更
( SET GLOBAL )可能
トランザクションを一意に識別するだけで、バイナリーログ
のイベン...
GTID﴾Global Transaction ID﴿
b7200c05‐1e8d‐11e7‐9e57‐0201a32caf75:2006
サーバー識別子(マスターの @@server_uuid )、ソースを追っ
かけるならSIDNO(Sour...
GTIDの表現
 b7200c05‐1e8d‐11e7‐9e57‐0201a32caf75:2006 
 b7200c05‐1e8d‐11e7‐9e57‐0201a32caf75:1‐2006 
 b7200c05‐1e8d‐11e7‐9e57...
GTIDとマスター
バイナリーログにGTIDを埋め込むようになる…くらいしか違い
はない
とはいえ gtid_mode= ON には enforce_gtid_consistency= ON が
必要なので、マスターの振る舞いとしては違いは少な...
GTIDとI/Oスレッド
 master_auto_position= 1 の場合、「このファイルのこのポジ
ションから寄越せ!」の代わりに、「この(=スレーブが既に
適用済みの)GTID 以外 のバイナリーログを頼む」になる
サーバー側が動的...
GTIDとI/Oスレッド
I/OスレッドとBinlog Dumpスレッドがよしなにやってくれる
ので、  master_log_file と master_log_pos を設定する必要は
もうない
mysql> CHANGE MASTER T...
GTIDとSQLスレッド
これから実行するトランザクションのGTID( gtid_next )が
実行済み( gtid_executed に含まれる)の場合、実行しない
(スキップする)
これによってスレーブクラッシュ時の「リレーログの二
重適...
botが最近気に入っているMySQLの機能
GTID﴾Global Transaction ID﴿
MTS﴾Multi Thread Slave﴿
Defer Table Index
HANDLERステートメント
PMM﴾Percona Mon...
MTSのアーキテクチャー
MTSのアーキテクチャー
1. マスターのバイナリーログがリレーログに記録されるところ
までは一緒
2. SQL Thread﴾coordinator﴿がリレーログからイベントを取り出す
3. coordinatorがslave_worker_...
MTSのアーキテクチャー
1. マスターのバイナリーログがリレーログに記録されるところ
までは一緒
2. SQL Thread﴾coordinator﴿がリレーログからイベントを取り出す
3. coordinatorがslave_worker_...
MTSコーディネーター
前後のイベントが互いに干渉しない(順序を入れ替えても問
題ない)かどうかの責任を持つ
ただし順序が入れ替わる(線形でない)ことが大前提の
ため、シングルスレッドレプリケーションよりも結果整
合性の色が強い
MTSコーディネーター
5.6ではスキーマが分かれていることで干渉しないことを担保
(5.7の slave_parallel_type= DATABASE 相当)
5.7ではマスターでbinlogに記録された時の直前のコミットの
タイムスタンプ...
MTSのアーキテクチャー
1. マスターのバイナリーログがリレーログに記録されるところ
までは一緒
2. SQL Thread﴾coordinator﴿がリレーログからイベントを取り出す
3. coordinatorがslave_worker_...
MTSワーカー
独立して動作するため、RR(Repeatable‐Read)でもマスター
と同一のデータベース全体のスナップショットを保証できな
い
5.6ではスレーブ側のバイナリーログの中身は順序を保証でき
ない(5.7では slave_pr...
MTSおいしいです
 slave_parallel_type= LOGICAL_CLOCK ,  slave_worker_thread= 4 
4000 Updates/secくらい(?)
こんなに効くと思わなかった
botが最近気に入っているMySQLの機能
GTID﴾Global Transaction ID﴿
MTS﴾Multi Thread Slave﴿
Defer Table Index
HANDLERステートメント
PMM﴾Percona Mon...
Defer Table Index
正式名称は不明。 mysqlpump の ‐‐defer‐table‐index のこと
データをバルクロードする時にセカンダリーインデックスを
つけないでおいて、後から ALTER TABLE で追加するや...
botが最近気に入っているMySQLの機能
GTID﴾Global Transaction ID﴿
MTS﴾Multi Thread Slave﴿
Defer Table Index
HANDLERステートメント
PMM﴾Percona Mon...
MySQLのフォアグラウンドスレッドの一
生
たとえばHandlerSocketはこのへんをハッ
ク
HANDLERステートメントはここをハック
(?)
﴾ ー`дー´﴿ < MySQLのオプティマイザーは
馬鹿だから
﴾ ´∀`﴿ < SQLからでもオプティマイザー
かっとばして自己実装できるお!
テーブルを開いて、インデックスのカー
ソルを開いて
mysql80> HANDLER t1 OPEN;
Query OK, 0 rows affected (0.01 sec)
mysql80> HANDLER t1 READ flg_2 = ...
㌧㌧㌧と
mysql80> HANDLER t1 READ flg_2 PREV;
+‐‐‐‐‐‐+‐‐‐‐‐‐+
| id   | flg  |
+‐‐‐‐‐‐+‐‐‐‐‐‐+
| 9999 |    0 |
+‐‐‐‐‐‐+‐‐‐‐‐‐+
...
オプティマイザーのアレが気にくわない
方はやってみると楽しいです(いやマジ
で)
https://dev.mysql.com/doc/refman/5.6/ja/handler.html
botが最近気に入っているMySQLの機能
GTID﴾Global Transaction ID﴿
MTS﴾Multi Thread Slave﴿
Defer Table Index
HANDLERステートメント
PMM﴾Percona Mon...
botが最近気に入っているMySQLの機能
GTID﴾Global Transaction ID﴿
MTS﴾Multi Thread Slave﴿
Defer Table Index
HANDLERステートメント
PMM﴾Percona Mon...
PMM﴾Percona Monitoring and
Management﴿
PMM﴾Percona Monitoring and
Management﴿
エージェント/サーバー型のパフォーマンスメトリクス収集ツ
ール
エージェントはrpmとかでパッケージされている
サーバーはDockerイメージ, Virtual Bo...
PMMサーバー
データのコンテナ化とか考えないならこれだけで十分
$ sudo docker pull percona/pmm‐server
$ sudo docker run ‐d ‐p 8080:80 percona/pmm‐server
PMMクライアント
percona‐releaseを使えるようにしておく
$ sudo yum install ‐‐enablerepo="percona*" pmm‐client
$ sudo pmm‐admin config 
> ‐‐se...
PMMクライアントの設定
 linux:metrics はホスト全体のCPUとかI/Oとか
$ sudo pmm‐admin add linux:metrics
OK, now monitoring this system.
$ sudo pm...
PMMクライアントの設定
 mysql:metrics はMySQLのメトリクス(PMPみたいな)
 ‐‐create‐user 
$ sudo pmm‐admin add mysql:metrics 
> ‐‐create‐user ‐‐so...
PMMクライアントの設定
 mysql:queries はクエリーアナライザー(MEMのクエリーア
ナライザーにちょっとだけ似ている)
$ sudo pmm‐admin add mysql:queries 
> ‐‐socket /usr/my...
PMM設定が終わると
$ sudo pmm‐admin list
..
‐‐‐‐‐‐‐‐‐‐‐‐‐‐ ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ ‐‐‐‐‐‐‐‐‐‐‐ ‐‐‐‐‐‐‐‐ ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
SERVICE TYPE   N...
PMM設定その後
 ‐‐create‐user で作ったユーザーのパスワードとかはYAMLフ
ァイルに記録される
$ cat /usr/local/percona/pmm‐client/pmm.yml
server_address: 127.0...
PMMの画面
こっそり画面見せます
意外と かなり良さそうでしょ?
正直自分でスクラッチせずにここまで情報が得られるのはあ
りがたい
自分でスクラッチするとビジュアル化がつらいところだ
し
だがしかし
これ1台だけで1か月くらいしか保管してないんだけど MySQL
Performance Schema のメトリクスを開くと
top ‐ 03:38:48 up 290 days, 16:39,  0 users,  load ave...
ごめんこれちょっとDockerから引きはが
さないと無理。。
誰か頼んだ
あとオマケ
危惧する副代表
日本人の秘伝のタレに是非とも入れるべ
き設定
$ vim /etc/my.cnf
..
[mysqld]
character_set_server = utf8mb4
collation_server = utf8mb4_ja_0900_as_...
MySQLの正しい発音
マイエスキューエル
The official way to pronounce “MySQL” is “My Ess Que Ell” ﴾not
“my sequel”﴿, but we do not mind if y...
MySQLの名前の由来
Myちゃん
MySQL is named after co‐founder Monty Widenius's daughter,
My.
http://dev.mysql.com/doc/refman/5.7/en/hi...
MariaDBの名前の由来
Mariaちゃん
MariaDB continues this tradition by being named after his
younger daughter, Maria.
https://mariadb....
宿命のライバル(?)のツーショット
http://www.slideshare.net/Codemotion/my‐sql‐
mariadbstorycodemotion
MySQLのロゴ、あのイルカの名前
サキラまたはサキーラ
The name of the MySQL Dolphin ﴾our logo﴿ is “Sakila,”
http://dev.mysql.com/doc/refman/5.7/en/...
伝説のBug#2
MySQL Bugs: #2: Does not make Toast
Fixing MySQL Bug#2: now MySQL makes toast!
まさかの8.0でリグレッション
#0  0x00007f11bf9cc741 in __pthread_kill (threadid=<optimized out>, s
#1  0x00000000018514ca in my_write_c...
Questions and/or Suggestions?
Upcoming SlideShare
Loading in …5
×

わたしを支える技術

5,338 views

Published on

2017/05/13 NSEG #87

Published in: Technology
  • Hello! Get Your Professional Job-Winning Resume Here - Check our website! https://vk.cc/818RFv
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

わたしを支える技術

  1. 1. yoku0825を支える技術 MySQLユーザ会会 in 長野 2017 NSEG #87 2017/05/14 yoku0825
  2. 2. yoku0825 #とは
  3. 3. 空前絶後のぉ とある企業のDBA
  4. 4. MySQLを愛し MySQLに愛された男 ※プライバシー保護のため一部音声を変えてあります
  5. 5. GMOペパボの福利厚生 ※ここの社員じゃないです
  6. 6. はてなの外部API
  7. 7. MySQLが趣味仕事
  8. 8. ズンドコストレージエンジンの作者 $ wget http://dev.mysql.com/get/Downloads/MySQL‐5.6/mysql‐5.6.29.tar. $ tar xf mysql‐5.6.29.tar.gz $ cd mysql‐5.6.29 $ cp ‐r /path/to/zundoko_storage_engine storage/ $ cmake . $ make $ sudo make install mysql> INSTALL PLUGIN zundoko SONAME 'ha_zundoko.so';
  9. 9. キ・ヨ・シ!! mysql> CREATE TABLE t1 (val varchar(32)) Engine= zundoko; mysql> SELECT * FROM t1; +‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+ | val                | +‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+ | ドコ               | | ドコ               | | ズン               | | ズン               | | ドコ               | | ズン               | | ドコ               | | ズン               | | ズン               | | ズン               | | ズン               | | ズン               | | ドコ               | | キ・ヨ・シ!       | +‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+ 14 rows in set (0.00 sec)
  10. 10. ウーパールーパー ピンクのおとうふ が 目印 ※行き倒れていたのはわたしではないです
  11. 11. のbot
  12. 12. :﴾;゙゚'ω゚'﴿:
  13. 13. を支える技術 面白いことがないと生きていけない なので最近yoku0825‐botを面白がらせている技術を紹介しま す
  14. 14. \こんにちは/ yoku0825@とある企業のDBA オラクれない ポスグれない マイエスキューエる 生息域 Twitter: @yoku0825 Blog: 日々の覚書 MyNA ML: 日本MySQLユーザ会 MySQL Casual's Slack: MySQL Casual
  15. 15. botが最近気に入っているMySQLの機能 GTID﴾Global Transaction ID﴿ MTS﴾Multi Thread Slave﴿ Defer Table Index HANDLERステートメント PMM﴾Percona Monitoring and Management﴿
  16. 16. botが最近気に入っているMySQLの機能 GTID﴾Global Transaction ID﴿ MTS﴾Multi Thread Slave﴿ Defer Table Index HANDLERステートメント PMM﴾Percona Monitoring and Management﴿
  17. 17. GTID﴾Global Transaction ID﴿ MySQL 5.6とそれ以降 5.6は再起動が必要なパラメーター、5.7はオンライン変更 ( SET GLOBAL )可能 トランザクションを一意に識別するだけで、バイナリーログ のイベントを一意に識別するわけではない これ意外と見落とされがち
  18. 18. GTID﴾Global Transaction ID﴿ b7200c05‐1e8d‐11e7‐9e57‐0201a32caf75:2006 サーバー識別子(マスターの @@server_uuid )、ソースを追っ かけるならSIDNO(Source ID NO) datadir/auto.cnfに保管されるので、リストア時に注意 トランザクション識別子(マスター上でトランザクションが コミットされた連番)、ソースを追っかけるなら GNO(Group NO)
  19. 19. GTIDの表現  b7200c05‐1e8d‐11e7‐9e57‐0201a32caf75:2006   b7200c05‐1e8d‐11e7‐9e57‐0201a32caf75:1‐2006   b7200c05‐1e8d‐11e7‐9e57‐0201a32caf75:1‐2006,n758f64f0‐ 1e93‐11e7‐a3fc‐0201a32caf75:1‐99   758f64f0‐1e93‐11e7‐a3fc‐0201a32caf75:1‐99,n758f64f0‐1e93‐ 11e7‐a3fc‐0201a32caf75:1000‐10000 
  20. 20. GTIDとマスター バイナリーログにGTIDを埋め込むようになる…くらいしか違い はない とはいえ gtid_mode= ON には enforce_gtid_consistency= ON が 必要なので、マスターの振る舞いとしては違いは少なくとも サーバーとしての振る舞いはちょっと違う 明らかにトランザクションアンセーフなステートメント の実行を拒否するようになる
  21. 21. GTIDとI/Oスレッド  master_auto_position= 1 の場合、「このファイルのこのポジ ションから寄越せ!」の代わりに、「この(=スレーブが既に 適用済みの)GTID 以外 のバイナリーログを頼む」になる サーバー側が動的にファイル名とポジションに変換して 送信してくれる。
  22. 22. GTIDとI/Oスレッド I/OスレッドとBinlog Dumpスレッドがよしなにやってくれる ので、  master_log_file と master_log_pos を設定する必要は もうない mysql> CHANGE MASTER TO master_host = '..',     ‐>   master_port = ..,      ‐>   master_auto_position = 1;
  23. 23. GTIDとSQLスレッド これから実行するトランザクションのGTID( gtid_next )が 実行済み( gtid_executed に含まれる)の場合、実行しない (スキップする) これによってスレーブクラッシュ時の「リレーログの二 重適用」が完全に回避できる sql/sql_parse.cc:mysql_execute_commandの中で分岐する ので、エグゼキューターがそもそも(ほぼ)動かない。 エグゼキューターなので、SQLスレッドに限らずフツーの スレッドでも同じ動作。
  24. 24. botが最近気に入っているMySQLの機能 GTID﴾Global Transaction ID﴿ MTS﴾Multi Thread Slave﴿ Defer Table Index HANDLERステートメント PMM﴾Percona Monitoring and Management﴿
  25. 25. MTSのアーキテクチャー
  26. 26. MTSのアーキテクチャー 1. マスターのバイナリーログがリレーログに記録されるところ までは一緒 2. SQL Thread﴾coordinator﴿がリレーログからイベントを取り出す 3. coordinatorがslave_worker_threadにイベントを渡す 4. slave_worker_threadはそれぞれExecutorを叩いてストレージと バイナリーログを更新する
  27. 27. MTSのアーキテクチャー 1. マスターのバイナリーログがリレーログに記録されるところ までは一緒 2. SQL Thread﴾coordinator﴿がリレーログからイベントを取り出す 3. coordinatorがslave_worker_threadにイベントを渡す 4. slave_worker_threadはそれぞれExecutorを叩いてストレージと バイナリーログを更新する
  28. 28. MTSコーディネーター 前後のイベントが互いに干渉しない(順序を入れ替えても問 題ない)かどうかの責任を持つ ただし順序が入れ替わる(線形でない)ことが大前提の ため、シングルスレッドレプリケーションよりも結果整 合性の色が強い
  29. 29. MTSコーディネーター 5.6ではスキーマが分かれていることで干渉しないことを担保 (5.7の slave_parallel_type= DATABASE 相当) 5.7ではマスターでbinlogに記録された時の直前のコミットの タイムスタンプをベースに干渉しないことを担保するモード が登場( slave_parallel_type= LOGICAL_CLOCK ) マスター上でロックが競合せずにグループコミットの中 に入れたってことはスレーブでも競合しないってことだ よね? という理屈
  30. 30. MTSのアーキテクチャー 1. マスターのバイナリーログがリレーログに記録されるところ までは一緒 2. SQL Thread﴾coordinator﴿がリレーログからイベントを取り出す 3. coordinatorがslave_worker_threadにイベントを渡す 4. slave_worker_threadはそれぞれExecutorを叩いてストレージと バイナリーログを更新する
  31. 31. MTSワーカー 独立して動作するため、RR(Repeatable‐Read)でもマスター と同一のデータベース全体のスナップショットを保証できな い 5.6ではスレーブ側のバイナリーログの中身は順序を保証でき ない(5.7では slave_preserve_commit_order でLOGICAL_CLOCK ベースの順序を保証できるようになった) というか、position=100, 200, 300を受け取った時に200だけコ ミットに失敗した場合とかGTIDベースでないとかなりつらい 気がする(未体験)
  32. 32. MTSおいしいです  slave_parallel_type= LOGICAL_CLOCK ,  slave_worker_thread= 4  4000 Updates/secくらい(?) こんなに効くと思わなかった
  33. 33. botが最近気に入っているMySQLの機能 GTID﴾Global Transaction ID﴿ MTS﴾Multi Thread Slave﴿ Defer Table Index HANDLERステートメント PMM﴾Percona Monitoring and Management﴿
  34. 34. Defer Table Index 正式名称は不明。 mysqlpump の ‐‐defer‐table‐index のこと データをバルクロードする時にセカンダリーインデックスを つけないでおいて、後から ALTER TABLE で追加するやり方 1億行で30分くらいかかってたロードが15分くらいになる 日々の覚書: MySQLインスタンス間でテーブルを移行する 投げ遣りベンチマーク 元ネタはSH2さんのMySQL 5.6における大量データロード時の 考慮点
  35. 35. botが最近気に入っているMySQLの機能 GTID﴾Global Transaction ID﴿ MTS﴾Multi Thread Slave﴿ Defer Table Index HANDLERステートメント PMM﴾Percona Monitoring and Management﴿
  36. 36. MySQLのフォアグラウンドスレッドの一 生
  37. 37. たとえばHandlerSocketはこのへんをハッ ク
  38. 38. HANDLERステートメントはここをハック (?)
  39. 39. ﴾ ー`дー´﴿ < MySQLのオプティマイザーは 馬鹿だから ﴾ ´∀`﴿ < SQLからでもオプティマイザー かっとばして自己実装できるお!
  40. 40. テーブルを開いて、インデックスのカー ソルを開いて mysql80> HANDLER t1 OPEN; Query OK, 0 rows affected (0.01 sec) mysql80> HANDLER t1 READ flg_2 = (0, 10000); +‐‐‐‐‐‐‐+‐‐‐‐‐‐+ | id    | flg  | +‐‐‐‐‐‐‐+‐‐‐‐‐‐+ | 10000 |    0 | +‐‐‐‐‐‐‐+‐‐‐‐‐‐+ 1 row in set (0.00 sec)
  41. 41. ㌧㌧㌧と mysql80> HANDLER t1 READ flg_2 PREV; +‐‐‐‐‐‐+‐‐‐‐‐‐+ | id   | flg  | +‐‐‐‐‐‐+‐‐‐‐‐‐+ | 9999 |    0 | +‐‐‐‐‐‐+‐‐‐‐‐‐+ 1 row in set (0.01 sec) mysql80> HANDLER t1 READ flg_2 PREV; +‐‐‐‐‐‐+‐‐‐‐‐‐+ | id   | flg  | +‐‐‐‐‐‐+‐‐‐‐‐‐+ | 9998 |    0 | +‐‐‐‐‐‐+‐‐‐‐‐‐+ 1 row in set (0.00 sec)
  42. 42. オプティマイザーのアレが気にくわない 方はやってみると楽しいです(いやマジ で) https://dev.mysql.com/doc/refman/5.6/ja/handler.html
  43. 43. botが最近気に入っているMySQLの機能 GTID﴾Global Transaction ID﴿ MTS﴾Multi Thread Slave﴿ Defer Table Index HANDLERステートメント PMM﴾Percona Monitoring and Management﴿
  44. 44. botが最近気に入っているMySQLの機能 GTID﴾Global Transaction ID﴿ MTS﴾Multi Thread Slave﴿ Defer Table Index HANDLERステートメント PMM﴾Percona Monitoring and Management﴿
  45. 45. PMM﴾Percona Monitoring and Management﴿
  46. 46. PMM﴾Percona Monitoring and Management﴿ エージェント/サーバー型のパフォーマンスメトリクス収集ツ ール エージェントはrpmとかでパッケージされている サーバーはDockerイメージ, Virtual Box, AMI 常用するならDockerから引きはがす努力が必要だと 思う
  47. 47. PMMサーバー データのコンテナ化とか考えないならこれだけで十分 $ sudo docker pull percona/pmm‐server $ sudo docker run ‐d ‐p 8080:80 percona/pmm‐server
  48. 48. PMMクライアント percona‐releaseを使えるようにしておく $ sudo yum install ‐‐enablerepo="percona*" pmm‐client $ sudo pmm‐admin config  > ‐‐server=__PMMサーバーのIPアドレス__:__PMMサーバーのポート__ OK, PMM server is alive. PMM Server      | xxx.xxx.xxx.xxx:yyyy Client Name     | 163‐44‐175‐117 Client Address  | 172.17.0.1
  49. 49. PMMクライアントの設定  linux:metrics はホスト全体のCPUとかI/Oとか $ sudo pmm‐admin add linux:metrics OK, now monitoring this system. $ sudo pmm‐admin list .. ‐‐‐‐‐‐‐‐‐‐‐‐‐‐ ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ ‐‐‐‐‐‐‐‐‐‐‐ ‐‐‐‐‐‐‐‐ ‐‐‐‐‐‐‐‐‐‐‐‐ ‐‐‐‐ SERVICE TYPE   NAME            LOCAL PORT  RUNNING  DATA SOURCE  OPTI ‐‐‐‐‐‐‐‐‐‐‐‐‐‐ ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ ‐‐‐‐‐‐‐‐‐‐‐ ‐‐‐‐‐‐‐‐ ‐‐‐‐‐‐‐‐‐‐‐‐ ‐‐‐‐ linux:metrics  163‐44‐175‐117  42000       YES      ‐
  50. 50. PMMクライアントの設定  mysql:metrics はMySQLのメトリクス(PMPみたいな)  ‐‐create‐user  $ sudo pmm‐admin add mysql:metrics  > ‐‐create‐user ‐‐socket /usr/mysql/8.0.1/data/mysql.sock  > my_8.0.1_metrics OK, now monitoring MySQL metrics using DSN pmm:***@unix(/usr/mysql/8.
  51. 51. PMMクライアントの設定  mysql:queries はクエリーアナライザー(MEMのクエリーア ナライザーにちょっとだけ似ている) $ sudo pmm‐admin add mysql:queries  > ‐‐socket /usr/mysql/8.0.1/data/mysql.sock  > ‐‐query‐source perfschema my_8.0.1_queries OK, now monitoring MySQL queries from perfschema using DSN pmm:***@un
  52. 52. PMM設定が終わると $ sudo pmm‐admin list .. ‐‐‐‐‐‐‐‐‐‐‐‐‐‐ ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ ‐‐‐‐‐‐‐‐‐‐‐ ‐‐‐‐‐‐‐‐ ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ SERVICE TYPE   NAME              LOCAL PORT  RUNNING  DATA SOURCE     ‐‐‐‐‐‐‐‐‐‐‐‐‐‐ ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ ‐‐‐‐‐‐‐‐‐‐‐ ‐‐‐‐‐‐‐‐ ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ mysql:queries  my_8.0.1_queries  ‐           YES      pmm:***@unix(/u linux:metrics  163‐44‐175‐117    42000       YES      ‐               mysql:metrics  my_8.0.1_metrics  42002       YES      pmm:***@unix(/u
  53. 53. PMM設定その後  ‐‐create‐user で作ったユーザーのパスワードとかはYAMLフ ァイルに記録される $ cat /usr/local/percona/pmm‐client/pmm.yml server_address: 127.0.0.1:50080 client_address: 172.17.0.1 bind_address: 172.17.0.1 client_name: 163‐44‐175‐117 mysql_password: ',W;9kM8s4HR_4l;sCmL,'
  54. 54. PMMの画面 こっそり画面見せます 意外と かなり良さそうでしょ? 正直自分でスクラッチせずにここまで情報が得られるのはあ りがたい 自分でスクラッチするとビジュアル化がつらいところだ し
  55. 55. だがしかし これ1台だけで1か月くらいしか保管してないんだけど MySQL Performance Schema のメトリクスを開くと top ‐ 03:38:48 up 290 days, 16:39,  0 users,  load average: 1.23, 0.3 Tasks:  22 total,   1 running,  21 sleeping,   0 stopped,   0 zombie %Cpu(s): 21.2 us,  0.3 sy,  0.0 ni, 78.5 id,  0.0 wa,  0.0 hi,  0.0 s KiB Mem:  32645548 total, 25757552 used,  6887996 free,       36 buff KiB Swap: 23068664 total,  2033152 used, 21035512 free.  7141436 cach   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ C    31 pmm       20   0  363040 306064  11744 S 679.4  0.9   0:47.79 p    51 root      20   0 1427448  11040   4328 S   2.3  0.0   0:01.54 n   467 mysql     20   0 1420524  72780   7732 S   0.7  0.2   0:01.49 m    16 pmm       20   0   44556  14928   8164 S   0.3  0.0   0:00.60 c   541 pmm       20   0  362504   8228   3944 S   0.3  0.0   0:00.15 o     1 root      20   0   17964   1564   1300 S   0.0  0.0   0:00.03 e    12 root      20   0   60628  14032   3664 S   0.0  0.0   0:00.12 s    15 mysql     20   0    4440    760    604 S   0.0  0.0   0:00.01 m    17 grafana   20   0 1593380  18936   8388 S   0.0  0.1   0:00.25 g    19 root      20   0   85912   4216   3060 S   0.0  0.0   0:00.01 n    23 root      20   0   23648   1040    828 S   0.0  0.0   0:00.00 c    27 pmm       20   0   17948   1408   1164 S   0.0  0.0   0:00.00 b
  56. 56. ごめんこれちょっとDockerから引きはが さないと無理。。 誰か頼んだ
  57. 57. あとオマケ
  58. 58. 危惧する副代表
  59. 59. 日本人の秘伝のタレに是非とも入れるべ き設定 $ vim /etc/my.cnf .. [mysqld] character_set_server = utf8mb4 collation_server = utf8mb4_ja_0900_as_cs みんなに おしえて あげよう!
  60. 60. MySQLの正しい発音 マイエスキューエル The official way to pronounce “MySQL” is “My Ess Que Ell” ﴾not “my sequel”﴿, but we do not mind if you pronounce it as “my sequel” or in some other localized way. http://dev.mysql.com/doc/refman/5.7/en/what‐is‐mysql.html
  61. 61. MySQLの名前の由来 Myちゃん MySQL is named after co‐founder Monty Widenius's daughter, My. http://dev.mysql.com/doc/refman/5.7/en/history.html ただしMyちゃんの名前の発音は ミィ
  62. 62. MariaDBの名前の由来 Mariaちゃん MariaDB continues this tradition by being named after his younger daughter, Maria. https://mariadb.com/kb/en/mariadb/why‐is‐the‐project‐ called‐mariadb/
  63. 63. 宿命のライバル(?)のツーショット http://www.slideshare.net/Codemotion/my‐sql‐ mariadbstorycodemotion
  64. 64. MySQLのロゴ、あのイルカの名前 サキラまたはサキーラ The name of the MySQL Dolphin ﴾our logo﴿ is “Sakila,” http://dev.mysql.com/doc/refman/5.7/en/history.html
  65. 65. 伝説のBug#2 MySQL Bugs: #2: Does not make Toast Fixing MySQL Bug#2: now MySQL makes toast!
  66. 66. まさかの8.0でリグレッション #0  0x00007f11bf9cc741 in __pthread_kill (threadid=<optimized out>, s #1  0x00000000018514ca in my_write_core (sig=6) at /git/mysql‐8.0.1_d #2  0x0000000000e81e91 in handle_fatal_signal (sig=6) at /git/mysql‐8 #3  <signal handler called> #4  0x00007f11bdd601d7 in __GI_raise (sig=sig@entry=6) at ../nptl/sys #5  0x00007f11bdd618c8 in __GI_abort () at abort.c:90 #6  0x0000000001bcd31c in ut_dbg_assertion_failed (expr=0x2233ba3 "pu     at /git/mysql‐8.0.1_dbg/storage/innobase/ut/ut0dbg.cc:67 #7  0x0000000001b63d44 in check_if_burned (sandwich=0x7f11b1be8868,to #8  0x0000000001b640d7 in make_toast (arg=0x0) at /git/mysql‐8.0.1_db #9  0x00007f11bf9c7dc5 in start_thread (arg=0x7f118b7fd700) at pthrea #10 0x00007f11bde2273d in clone () at ../sysdeps/unix/sysv/linux/x86_
  67. 67. Questions and/or Suggestions?

×