基本に戻ってinnodbの話をします

45
そろそろ基本に立ち戻って InnoDB の話をします か? 2013/11/30 yoku0825 Chiba.pm #4.1

Upload: yoku0825

Post on 20-Jun-2015

7.188 views

Category:

Technology


0 download

DESCRIPTION

2013/11/30 Chiba.pm #4

TRANSCRIPT

Page 1: 基本に戻ってInnoDBの話をします

そろそろ基本に立ち戻ってInnoDBの話をします

か?

2013/11/30yoku0825

Chiba.pm #4.1

Page 2: 基本に戻ってInnoDBの話をします

Hi, All! I'm very sorry.Today, I don't talk about Percona

たいへんもうしわけありませんが、きょうはPer

Page 3: 基本に戻ってInnoDBの話をします

Hi, All! I'm very sorry.Today, I don't talk about Percona

たいへんもうしわけありませんが、きょうはPerconaのはなしを

Page 4: 基本に戻ってInnoDBの話をします

Hi, All! I'm very sorry.Today, I don't talk about Percona

たいへんもうしわけありませんが、きょうはPerconaのはなしをしません

Page 5: 基本に戻ってInnoDBの話をします

Σ(゚д゚ lll) えっ

Page 6: 基本に戻ってInnoDBの話をします

今日はMySQLの話をします

\安定のChiba.db/

Page 7: 基本に戻ってInnoDBの話をします

みなさん、InnoDB使ってますか?

Page 8: 基本に戻ってInnoDBの話をします

What is most important parameterfor InnoDB?

Page 9: 基本に戻ってInnoDBの話をします

innodb_buffer_pool_size

Page 10: 基本に戻ってInnoDBの話をします

Why?

Page 11: 基本に戻ってInnoDBの話をします

What's InnoDB Buffer Pool?

Page 12: 基本に戻ってInnoDBの話をします

InnoDBテーブルのデータとインデックスの

キャッシュ領域?

Page 13: 基本に戻ってInnoDBの話をします

間違いじゃないけど、それだけだとこれの説明がつかなくなる

Page 14: 基本に戻ってInnoDBの話をします

mysql> SHOW CREATE TABLE t1\G*************************** 1. row *************************** Table: t1Create Table: CREATE TABLE `t1` ( `num` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `val` varchar(32) DEFAULT NULL, UNIQUE KEY `num` (`num`), KEY `val` (`val`)) ENGINE=InnoDB AUTO_INCREMENT=100000001 DEFAULT CHARSET=utf8mb41 row in set (0.03 sec)

【 innodb_buffer_pool_size= 4G】$ time bin/mysql -uroot d1 < ~/dump.sql

real 344m4.664suser 1m32.631ssys 0m5.872s

【 innodb_buffer_pool_size= 32M】$ time bin/mysql -uroot d1 < ~/dump.sql

real 1222m16.982suser 1m47.038ssys 0m6.243s

Page 15: 基本に戻ってInnoDBの話をします

更新も速くなるということは、ライトキャッシュも兼ねてる?

Page 16: 基本に戻ってInnoDBの話をします

今度はこれの説明がつかない

Page 17: 基本に戻ってInnoDBの話をします

【innodb_buffer_pool_size= 4G】mysql> DROP TABLE t1;Query OK, 0 rows affected (2.20 sec)

【 innodb_buffer_pool_size= 32M】mysql> DROP TABLE t1;Query OK, 0 rows affected (1.86 sec)

Page 18: 基本に戻ってInnoDBの話をします

うわテストケース微妙すぎた。。

トラフィックがあってバッファプールが数十GBになるとバージョンにもよるけど目に見えて違います

(最近のはだいぶマシ)

Page 19: 基本に戻ってInnoDBの話をします

なんで?

Page 20: 基本に戻ってInnoDBの話をします

俺は`バッファプールこそがデータ原本だから'

と説明することにしてる

Page 21: 基本に戻ってInnoDBの話をします

SELECTのとき

● バッファプール見る● あればそれを使う● なければテーブルスペースファイルを読んでバッファプールに載せる

Page 22: 基本に戻ってInnoDBの話をします

INSERT, UPDATE, DELETEのとき

● バッファプールに書く● バッファプールに空きがなければ、古いページを押し出してから書く

● DELETEでさえも、書く

● その後、ログファイルに書く● 非同期でログファイルを読んでテーブルスペースファイルに書く

● テーブルスペースファイル+ ログファイルで初めて完全なデータ

● バッファプール上にあってテーブルスペースファイルにないデータ(ダーティページ)が一定割合を超えると強制チェックポイント

Page 23: 基本に戻ってInnoDBの話をします

DROPのとき

● そのテーブルの全てのページをバッファプールから追い出す

● その後、ログファイルに書いたりテーブルスペースファイルが削除される

Page 24: 基本に戻ってInnoDBの話をします

常に最新の情報はバッファプールとログファイルに書き込まれる

Page 25: 基本に戻ってInnoDBの話をします

バッファプールが足りないとしょっちゅうストレージアクセス

Page 26: 基本に戻ってInnoDBの話をします

まずは、これを足りさせること

RDSとかでMemoryか IOPSかって思ったらまずはMemoryに突っ込んだ方が良い

Page 27: 基本に戻ってInnoDBの話をします

次にログファイル

Page 28: 基本に戻ってInnoDBの話をします

innodb_log_file_size×

innodb_log_files_in_group

Page 29: 基本に戻ってInnoDBの話をします

基本的にログファイルの性能はこの値に依存する

64M* 3と 96M* 2はほぼいっしょ

Page 30: 基本に戻ってInnoDBの話をします

5.6未満だと、ログファイルサイズを変える,ログファイルの数を減らすのにちょっと手間

ファイルを増やすのは再起動だけでOK

Page 31: 基本に戻ってInnoDBの話をします

1つでも壊れたらアウトなので、個人的には2つを推奨

Page 32: 基本に戻ってInnoDBの話をします

ログファイルが詰まると全てのCOMMIMTが詰まる

Page 33: 基本に戻ってInnoDBの話をします

innodb_flush_log_at_trx

Page 34: 基本に戻ってInnoDBの話をします

毎回はfsyncせずwriteだけで終わらせるのでログファイルの詰まりが減る

Page 35: 基本に戻ってInnoDBの話をします

ただしfsyncしていないのでDurabilityを犠牲にしているのを忘れずに

Page 36: 基本に戻ってInnoDBの話をします

innodb_file_format

Page 37: 基本に戻ってInnoDBの話をします

*個別テーブルスペースファイルの*ファイルフォーマット

共有テーブルスペースは関係ない

Page 38: 基本に戻ってInnoDBの話をします

Barracuda一択で良いが、それだけで性能は変わらない

Page 39: 基本に戻ってInnoDBの話をします

innodb_io_capacityinnodb_*_io_threads

Page 40: 基本に戻ってInnoDBの話をします

SSDとかRAIDとか、IOPSが高いなら上げる

HDD 1玉なら触らない方が無難

Page 41: 基本に戻ってInnoDBの話をします

他にも色々

Page 42: 基本に戻ってInnoDBの話をします

真面目に調べ始めると奥が深くて楽しい

Page 43: 基本に戻ってInnoDBの話をします

Chiba.pmの mは MySQLの m

Page 44: 基本に戻ってInnoDBの話をします

楽しみましょう :)

Page 45: 基本に戻ってInnoDBの話をします

ご清聴ありがとうございました