SlideShare a Scribd company logo
1 of 29
Download to read offline
TokuDB 試してみる
2014/07/11
yoku0825
MySQL Casual Talks vol.6
\こんばんは/
● I'm yoku0825
● とある企業のDBA
●
オラクれない
● ポスグれない
● マイエスキューエる
●
家に帰ると
● 嫁の夫
●
せがれの父
● ポテトチップスはのりしお派
TokuDB とは
● Tokutek が作った Fractal Tree(R) Index を実
装したストレージエンジン
● MongoDB 向けに実装されたのが TokuMX
● TokuDB 公式バイナリーは MySQL 5.5.37, MariaDB
5.5.37( いずれも 64bit のみ )
●
MariaDB 公式バイナリーでは 5.5.33 以降と 10.0.5
以降
● Percona Server 公式バイナリーでは 5.6.19(7/2 に
GA になりました )
TokuDB
● http://docs.tokutek.com/tokudb/
● オンライン ALTER TABLE(ADD INDEX, ADD
COLUMN) に対応しているらしい
● 圧縮がイケているらしい
●
断片化しないらしい
● クラスターインデックスを複数作れるらしい
● Information_schema, SHOW ENGINE TokuDB
STATUS は慣れるまで大変そう
● FOREIGN KEY 制約はサポートしてない
Fractal Tree(R) Index
● http://tokutek.com/downloads/mysqluc-2010-
fractal-trees.pdf
● 14 ページ目あたりに Fractal Tree Index の構
造説明
● インデックス構造にあらかじめバッファがあるから
INSERT に強い、らしい。
● 28 ページ目あたりにベンチマーク
● 今は InnoDB の性能が上がってるので、交点はもう
ちょっと右にズレてると思う
正直この時点でだいぶやる気ない
テストケース
● user テーブル , follow テーブル , comment
テーブルを用意
● Twitter みたいなことがやりたかったんだよ
● それぞれのテーブルをクロスして、 timeline
テーブルを生成
●
抽出とソートだけここで済ませて、コメントの本文
は comment テーブルから当たる
● どう考えても timeline テーブルの件数がアレ
なので、 TokuDB を考えた
●
使ったのは percona-server-5.6.16-64.2-
tokudb-7.1.5
テストケース
テストケース
● user
●
6 万
● comment
● 1 ユーザーあたり平均 1000 件 = 約 6000 万
● follow
●
1 ユーザーあたり平均 200 人 = 約 1200 万
● timeline
●
1 ユーザーあたり最大で直近 1 万件 = 約 6 億
テストケース
● ロジック
●
follower, followee, 自分のコメントの一覧 , 直
近 1 万件のタイムライン表示
– SELECT .. FROM follow WHERE user_id= ME
● コメントの投稿
– INSERT INTO comment VALUES ..
– INSERT INTO timeline SELECT .. FROM follow WHERE
follower_id= ME
●
コメントの削除
– DELETE FROM timeline ..
– DELETE FROM comment ..
テストケース
● ロジックつづき
●
フォロー
– INSERT INTO follow VALUES ..
– INSERT INTO timeline SELECT .. FROM comment WHERE
user_id= HIM;
● アンフォロー
– DELETE FROM timeline WHERE user_id= ME AND
comment_person= HIM;
– DELETE FROM follow WHERE user_id= ME AND
follower_id= HIM;
テストケース
● ロジックつづき
●
退会
– DELETE FROM timeline WHERE comment_person= ME
– DELETE FROM comment WHERE user_id= ME
– DELETE FROM follow WHERE follower_id= ME
– DELETE FROM user WHERE user_id= ME
● タイムラインの再生成
– DELETE FROM timeline WHERE user_id= ME
– INSERT INTO timeline SELECT .. FROM comment WHERE
user_id IN (MY_FOLLOWERS)
ベンチマークマシン
● CPU
●
Intel(R) Xeon(R) L5520 @ 2.27GHz
● 2P8C16T
●
Memory
● 48GB 、型番とかわからない
●
Storage
● RAID コントローラー + SSD2 本で RAID10
●
Fio でざっくり 100MB/s RW, 20000IOPS R,
2000IOPS W
● 鯖蔵同じスペックで 1 台ずつ
my.cnf はかなりテキトー
● innodb_buffer_pool_size= 30G
● innodb_flush_method= O_DIRECT
● innodb_log_file_size= 1G
● innodb_log_buffer_size= 64M
●
tokudb_directio= 1
● tokudb_cache_size= 30G
● tokudb_lock_timeout= 500000
● ミリ秒単位。デフォルトだと timeline テーブルの
構築時にタイムアウトしてたので。。
●
あとはソートバッファとか。
おことわり
● ベンチマークは飽くまで参考程度に。
●
自分でも納得いかない結果になってるとこもあるの
で。
●
特に InnoDB Compressed, TokuDB UNCOMPRESSED の
試行回数が十分取れてないのであんまりアテになり
ません。
●
あと、テストマシンのストレージ容量の関係で色々
ベンチが制約されてたりとか。
● せがれが熱を出してこの 1 週間くらいほとんど
何もできなかったんですよう。
●
いいわけ
ファイルサイズ
InnoDB Compact InnoDB Compressed TokuDB ZLIB TokuDB uncompressed
0
10
20
30
40
50
60
70
80
90
GB
follower 一覧 (pkey)
1 4 16 32 64
0
5
10
15
20
25
30
35
40
45
50
Latency(ms)
InnoDB – Compact
TokuDB – zlib
InnoDB – Compressed
TokuDB – Uncompressed
followee 一覧 (seckey)
1 4 16 32 64
0
5
10
15
20
25
30
35
Latency(ms)
InnoDB – Compact
TokuDB – zlib
InnoDB – Compressed
TokuDB – Uncompressed
My comment 一覧
1 4 16 32 64
0
20
40
60
80
100
120
140
160
180
200
Latency(ms)
InnoDB – Compact
TokuDB – zlib
InnoDB – Compressed
TokuDB – Uncompressed
timeline 一覧
1 4 16 32 64
0
500
1000
1500
2000
2500
3000
3500
Latency(ms)
InnoDB – Compact
TokuDB – zlib
InnoDB – Compressed
TokuDB – Uncompressed
4 クエリーをまとめたスループット
1 4 16 32 64
0
5
10
15
20
25
30
35
40
Throughput(tps)
InnoDB – Compact
TokuDB – zlib
InnoDB – Compressed
TokuDB – Uncompressed
コメント投稿レイテンシー
1 4 16 32 64
0
50
100
150
200
250
300
350
400
450
Latency(ms)
InnoDB – Compact
TokuDB – zlib
InnoDB – Compressed
TokuDB – Uncompressed
コメント投稿スループット
1 4 16 32 64
0
20
40
60
80
100
120
140
160
Throughput(tps)
InnoDB – Compact
TokuDB – zlib
InnoDB – Compressed
TokuDB – Uncompressed
コメント削除レイテンシー
1 4 16 32 64
0
50
100
150
200
250
300
350
400
Latency(ms)
InnoDB – Compact
TokuDB – zlib
InnoDB – Compressed
TokuDB – Uncompressed
コメント削除スループット
1 4 16 32 64
0
20
40
60
80
100
120
140
160
180
Throughput(tps)
InnoDB – Compact
TokuDB – zlib
InnoDB – Compressed
TokuDB – Uncompressed
ざっくり所感
● InnoDB は user を結構使える。スレッド数超え
ると wait が出始めてスループットが頭打ち。
● TokuDB はかなり CPU をぶん回す。 64 スレッド
だと sys だけで 50% くらい使うし csw が 150k と
か行く。
● InnoDB compressed と比べて 3 倍圧縮が効く。
多少レイテンシーは上がるけど、それを差っ引
いても容量が欲しい時は嬉しい。
● 正直ロック粒度がよくわからん。 InnoDB と同
じつもりでいくと結構 lock wait timeout 食ら
う。
● INSERT INTO .. SELECT でロックにはまること多々
ざっくり所感
● 公式 ML かなり過疎ってる
●
https://groups.google.com/forum/#!forum/tokudb
-user
● パーティショニングしてあってプルーニングが
効かないクエリーがめっさ遅かったと聞いてい
る
●
profiling 見た感じ、 1 つ 1 つのパーティションを
開くのがかなりオーバーヘッドみたい
● COUNT(DISTINCT ..) が遅いぽい
●
https://groups.google.com/forum/#!topic/tokudb
-user/hDnTItxkTTo
● covering index でも遅いってことは GROUP BY 苦手
なのかも。
ざっくり所感
● mysql コマンドラインクライアントからクエ
リーを叩くと、不気味な静寂に包まれることが
ある。
●
RC のやつだけど、何回かはそのままクラッシュし
た
● ばぐれぽはしていない
● どっか影響のないところから進めていくことに
なるかなぁ。
Any Questions?

More Related Content

What's hot

Handlersocket etc. 20110906
Handlersocket etc. 20110906Handlersocket etc. 20110906
Handlersocket etc. 20110906akirahiguchi
 
How to backup your mroonga database?
How to backup your mroonga database?How to backup your mroonga database?
How to backup your mroonga database?yoku0825
 
イルカさんチームからゾウさんチームに教えたいMySQLレプリケーション
イルカさんチームからゾウさんチームに教えたいMySQLレプリケーションイルカさんチームからゾウさんチームに教えたいMySQLレプリケーション
イルカさんチームからゾウさんチームに教えたいMySQLレプリケーションyoku0825
 
MySQL 初めてのチューニング
MySQL 初めてのチューニングMySQL 初めてのチューニング
MySQL 初めてのチューニングCraft works
 
(JP) GPGPUがPostgreSQLを加速する
(JP) GPGPUがPostgreSQLを加速する(JP) GPGPUがPostgreSQLを加速する
(JP) GPGPUがPostgreSQLを加速するKohei KaiGai
 
CasualなMongoDBのサービス運用Tips
CasualなMongoDBのサービス運用TipsCasualなMongoDBのサービス運用Tips
CasualなMongoDBのサービス運用TipsNaoki Sega
 
PostgreSQL v9.5の新機能~CustomScan/Join Interface
PostgreSQL v9.5の新機能~CustomScan/Join InterfacePostgreSQL v9.5の新機能~CustomScan/Join Interface
PostgreSQL v9.5の新機能~CustomScan/Join InterfaceKohei KaiGai
 
binary log と 2PC と Group Commit
binary log と 2PC と Group Commitbinary log と 2PC と Group Commit
binary log と 2PC と Group CommitTakanori Sejima
 
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールC/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールMITSUNARI Shigeo
 
MongoDB on EC2 #mongodbcasual
MongoDB on EC2 #mongodbcasualMongoDB on EC2 #mongodbcasual
MongoDB on EC2 #mongodbcasualYasuhiro Matsuo
 
sysloadや監視などの話(仮)
sysloadや監視などの話(仮)sysloadや監視などの話(仮)
sysloadや監視などの話(仮)Takanori Sejima
 
MongoDB Configパラメータ解説
MongoDB Configパラメータ解説MongoDB Configパラメータ解説
MongoDB Configパラメータ解説Shoken Fujisaki
 
GPUをJavaで使う話(Java Casual Talks #1)
GPUをJavaで使う話(Java Casual Talks #1)GPUをJavaで使う話(Java Casual Talks #1)
GPUをJavaで使う話(Java Casual Talks #1)なおき きしだ
 
プロセスとコンテキストスイッチ
プロセスとコンテキストスイッチプロセスとコンテキストスイッチ
プロセスとコンテキストスイッチKazuki Onishi
 
Javaで簡単にgpgpu aparapi
Javaで簡単にgpgpu aparapiJavaで簡単にgpgpu aparapi
Javaで簡単にgpgpu aparapiKen'ichi Sakiyama
 
MySQL Casual Talks in Fukuoka vol.2
MySQL Casual Talks in Fukuoka vol.2MySQL Casual Talks in Fukuoka vol.2
MySQL Casual Talks in Fukuoka vol.2学 松崎
 

What's hot (20)

Handlersocket etc. 20110906
Handlersocket etc. 20110906Handlersocket etc. 20110906
Handlersocket etc. 20110906
 
How to backup your mroonga database?
How to backup your mroonga database?How to backup your mroonga database?
How to backup your mroonga database?
 
イルカさんチームからゾウさんチームに教えたいMySQLレプリケーション
イルカさんチームからゾウさんチームに教えたいMySQLレプリケーションイルカさんチームからゾウさんチームに教えたいMySQLレプリケーション
イルカさんチームからゾウさんチームに教えたいMySQLレプリケーション
 
Mysql casial01
Mysql casial01Mysql casial01
Mysql casial01
 
MySQL 初めてのチューニング
MySQL 初めてのチューニングMySQL 初めてのチューニング
MySQL 初めてのチューニング
 
Memory sanitizer
Memory sanitizerMemory sanitizer
Memory sanitizer
 
(JP) GPGPUがPostgreSQLを加速する
(JP) GPGPUがPostgreSQLを加速する(JP) GPGPUがPostgreSQLを加速する
(JP) GPGPUがPostgreSQLを加速する
 
CasualなMongoDBのサービス運用Tips
CasualなMongoDBのサービス運用TipsCasualなMongoDBのサービス運用Tips
CasualなMongoDBのサービス運用Tips
 
PostgreSQL v9.5の新機能~CustomScan/Join Interface
PostgreSQL v9.5の新機能~CustomScan/Join InterfacePostgreSQL v9.5の新機能~CustomScan/Join Interface
PostgreSQL v9.5の新機能~CustomScan/Join Interface
 
binary log と 2PC と Group Commit
binary log と 2PC と Group Commitbinary log と 2PC と Group Commit
binary log と 2PC と Group Commit
 
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールC/C++プログラマのための開発ツール
C/C++プログラマのための開発ツール
 
Maatkitの紹介
Maatkitの紹介Maatkitの紹介
Maatkitの紹介
 
MongoDB on EC2 #mongodbcasual
MongoDB on EC2 #mongodbcasualMongoDB on EC2 #mongodbcasual
MongoDB on EC2 #mongodbcasual
 
sysloadや監視などの話(仮)
sysloadや監視などの話(仮)sysloadや監視などの話(仮)
sysloadや監視などの話(仮)
 
MongoDB Configパラメータ解説
MongoDB Configパラメータ解説MongoDB Configパラメータ解説
MongoDB Configパラメータ解説
 
GPUをJavaで使う話(Java Casual Talks #1)
GPUをJavaで使う話(Java Casual Talks #1)GPUをJavaで使う話(Java Casual Talks #1)
GPUをJavaで使う話(Java Casual Talks #1)
 
プロセスとコンテキストスイッチ
プロセスとコンテキストスイッチプロセスとコンテキストスイッチ
プロセスとコンテキストスイッチ
 
Javaで簡単にgpgpu aparapi
Javaで簡単にgpgpu aparapiJavaで簡単にgpgpu aparapi
Javaで簡単にgpgpu aparapi
 
Open VZ
Open VZOpen VZ
Open VZ
 
MySQL Casual Talks in Fukuoka vol.2
MySQL Casual Talks in Fukuoka vol.2MySQL Casual Talks in Fukuoka vol.2
MySQL Casual Talks in Fukuoka vol.2
 

Viewers also liked

20140711 MySQL Casual Talks vol.6 / 続・Amazon RDS Casual Talks
20140711 MySQL Casual Talks vol.6 / 続・Amazon RDS Casual Talks20140711 MySQL Casual Talks vol.6 / 続・Amazon RDS Casual Talks
20140711 MySQL Casual Talks vol.6 / 続・Amazon RDS Casual TalksMori Tetsuya
 
N:1 Replication meets MHA
N:1 Replication meets MHAN:1 Replication meets MHA
N:1 Replication meets MHAdo_aki
 
mysqlcasual6-next-key-lock
mysqlcasual6-next-key-lockmysqlcasual6-next-key-lock
mysqlcasual6-next-key-lockkarupanerura
 
mysqlcasual6-fabric
mysqlcasual6-fabricmysqlcasual6-fabric
mysqlcasual6-fabricdoublemarket
 
My sql casual talks vol.6
My sql casual talks vol.6My sql casual talks vol.6
My sql casual talks vol.6Satoshi Suzuki
 
MySQL 5.7の次のMySQLは
MySQL 5.7の次のMySQLはMySQL 5.7の次のMySQLは
MySQL 5.7の次のMySQLはyoku0825
 

Viewers also liked (8)

MHA on AWS+Rails
MHA on AWS+RailsMHA on AWS+Rails
MHA on AWS+Rails
 
20140711 MySQL Casual Talks vol.6 / 続・Amazon RDS Casual Talks
20140711 MySQL Casual Talks vol.6 / 続・Amazon RDS Casual Talks20140711 MySQL Casual Talks vol.6 / 続・Amazon RDS Casual Talks
20140711 MySQL Casual Talks vol.6 / 続・Amazon RDS Casual Talks
 
N:1 Replication meets MHA
N:1 Replication meets MHAN:1 Replication meets MHA
N:1 Replication meets MHA
 
mysqlcasual6-next-key-lock
mysqlcasual6-next-key-lockmysqlcasual6-next-key-lock
mysqlcasual6-next-key-lock
 
mysqlcasual6-fabric
mysqlcasual6-fabricmysqlcasual6-fabric
mysqlcasual6-fabric
 
My sql casual talks vol.6
My sql casual talks vol.6My sql casual talks vol.6
My sql casual talks vol.6
 
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
 
MySQL 5.7の次のMySQLは
MySQL 5.7の次のMySQLはMySQL 5.7の次のMySQLは
MySQL 5.7の次のMySQLは
 

Similar to TokuDB試してみる

140607 lib o-mini_con-ryoon
140607 lib o-mini_con-ryoon140607 lib o-mini_con-ryoon
140607 lib o-mini_con-ryoonRyo ONODERA
 
Java Drag Race Tuning
Java Drag Race TuningJava Drag Race Tuning
Java Drag Race Tuningnekop
 
20120706-readablecode
20120706-readablecode20120706-readablecode
20120706-readablecodeMasanori Kado
 
シーサーでのInfiniBand導入事例
シーサーでのInfiniBand導入事例シーサーでのInfiniBand導入事例
シーサーでのInfiniBand導入事例Naoto MATSUMOTO
 
ゆるふわLinux-HA 〜PostgreSQL編〜
ゆるふわLinux-HA 〜PostgreSQL編〜ゆるふわLinux-HA 〜PostgreSQL編〜
ゆるふわLinux-HA 〜PostgreSQL編〜Taro Matsuzawa
 
NAND Flash から InnoDB にかけての話(仮)
NAND Flash から InnoDB にかけての話(仮)NAND Flash から InnoDB にかけての話(仮)
NAND Flash から InnoDB にかけての話(仮)Takanori Sejima
 
Routerboard勉強会vol5
Routerboard勉強会vol5Routerboard勉強会vol5
Routerboard勉強会vol5kometch H
 
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2Preferred Networks
 
PF部第19回資料 poor man's JTAG
PF部第19回資料 poor man's JTAGPF部第19回資料 poor man's JTAG
PF部第19回資料 poor man's JTAGdaye001
 
MySQLやSSDとかの話 後編
MySQLやSSDとかの話 後編MySQLやSSDとかの話 後編
MySQLやSSDとかの話 後編Takanori Sejima
 
GPGPUによるパーソナルスーパーコンピュータの可能性
GPGPUによるパーソナルスーパーコンピュータの可能性GPGPUによるパーソナルスーパーコンピュータの可能性
GPGPUによるパーソナルスーパーコンピュータの可能性Yusaku Watanabe
 
tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1Ryosuke IWANAGA
 
Routerboard勉強会 tips
Routerboard勉強会 tipsRouterboard勉強会 tips
Routerboard勉強会 tipskometch H
 
Docker on RHEL & Project Atomic 入門 - #Dockerjp 4
Docker on RHEL & Project Atomic 入門 - #Dockerjp 4Docker on RHEL & Project Atomic 入門 - #Dockerjp 4
Docker on RHEL & Project Atomic 入門 - #Dockerjp 4Emma Haruka Iwao
 
hbstudy25 劇的ビフォーアフター
hbstudy25 劇的ビフォーアフターhbstudy25 劇的ビフォーアフター
hbstudy25 劇的ビフォーアフターsemind
 
An Intelligent Storage?
An Intelligent Storage?An Intelligent Storage?
An Intelligent Storage?Kohei KaiGai
 
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)NTT DATA Technology & Innovation
 
ファイルシステム比較
ファイルシステム比較ファイルシステム比較
ファイルシステム比較NaoyaFukuda
 

Similar to TokuDB試してみる (20)

140607 lib o-mini_con-ryoon
140607 lib o-mini_con-ryoon140607 lib o-mini_con-ryoon
140607 lib o-mini_con-ryoon
 
Java Drag Race Tuning
Java Drag Race TuningJava Drag Race Tuning
Java Drag Race Tuning
 
20120706-readablecode
20120706-readablecode20120706-readablecode
20120706-readablecode
 
retrobsd-2012-JUL-07 at JNUG BSD BoF
retrobsd-2012-JUL-07 at JNUG BSD BoFretrobsd-2012-JUL-07 at JNUG BSD BoF
retrobsd-2012-JUL-07 at JNUG BSD BoF
 
シーサーでのInfiniBand導入事例
シーサーでのInfiniBand導入事例シーサーでのInfiniBand導入事例
シーサーでのInfiniBand導入事例
 
ゆるふわLinux-HA 〜PostgreSQL編〜
ゆるふわLinux-HA 〜PostgreSQL編〜ゆるふわLinux-HA 〜PostgreSQL編〜
ゆるふわLinux-HA 〜PostgreSQL編〜
 
NAND Flash から InnoDB にかけての話(仮)
NAND Flash から InnoDB にかけての話(仮)NAND Flash から InnoDB にかけての話(仮)
NAND Flash から InnoDB にかけての話(仮)
 
Routerboard勉強会vol5
Routerboard勉強会vol5Routerboard勉強会vol5
Routerboard勉強会vol5
 
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
 
PF部第19回資料 poor man's JTAG
PF部第19回資料 poor man's JTAGPF部第19回資料 poor man's JTAG
PF部第19回資料 poor man's JTAG
 
MySQLやSSDとかの話 後編
MySQLやSSDとかの話 後編MySQLやSSDとかの話 後編
MySQLやSSDとかの話 後編
 
GPGPUによるパーソナルスーパーコンピュータの可能性
GPGPUによるパーソナルスーパーコンピュータの可能性GPGPUによるパーソナルスーパーコンピュータの可能性
GPGPUによるパーソナルスーパーコンピュータの可能性
 
tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1
 
20150630_MySQL勉強会
20150630_MySQL勉強会20150630_MySQL勉強会
20150630_MySQL勉強会
 
Routerboard勉強会 tips
Routerboard勉強会 tipsRouterboard勉強会 tips
Routerboard勉強会 tips
 
Docker on RHEL & Project Atomic 入門 - #Dockerjp 4
Docker on RHEL & Project Atomic 入門 - #Dockerjp 4Docker on RHEL & Project Atomic 入門 - #Dockerjp 4
Docker on RHEL & Project Atomic 入門 - #Dockerjp 4
 
hbstudy25 劇的ビフォーアフター
hbstudy25 劇的ビフォーアフターhbstudy25 劇的ビフォーアフター
hbstudy25 劇的ビフォーアフター
 
An Intelligent Storage?
An Intelligent Storage?An Intelligent Storage?
An Intelligent Storage?
 
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
 
ファイルシステム比較
ファイルシステム比較ファイルシステム比較
ファイルシステム比較
 

More from yoku0825

逝くぞ最新版、罠の貯蔵は十分か
逝くぞ最新版、罠の貯蔵は十分か逝くぞ最新版、罠の貯蔵は十分か
逝くぞ最新版、罠の貯蔵は十分かyoku0825
 
サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技
サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技
サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技yoku0825
 
MySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれやMySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれやyoku0825
 
MySQL 8.0で憶えておいてほしいこと
MySQL 8.0で憶えておいてほしいことMySQL 8.0で憶えておいてほしいこと
MySQL 8.0で憶えておいてほしいことyoku0825
 
MySQLステータスモニタリング
MySQLステータスモニタリングMySQLステータスモニタリング
MySQLステータスモニタリングyoku0825
 
わかった気になるMySQL
わかった気になるMySQLわかった気になるMySQL
わかった気になるMySQLyoku0825
 
わたしを支える技術
わたしを支える技術わたしを支える技術
わたしを支える技術yoku0825
 
MySQL 5.7の次のMySQL 8.0はどんなものになるだろう
MySQL 5.7の次のMySQL 8.0はどんなものになるだろうMySQL 5.7の次のMySQL 8.0はどんなものになるだろう
MySQL 5.7の次のMySQL 8.0はどんなものになるだろうyoku0825
 
Dockerイメージで誰でも気軽にMroonga体験
Dockerイメージで誰でも気軽にMroonga体験Dockerイメージで誰でも気軽にMroonga体験
Dockerイメージで誰でも気軽にMroonga体験yoku0825
 
MySQLアンチパターン
MySQLアンチパターンMySQLアンチパターン
MySQLアンチパターンyoku0825
 
MySQLerの7つ道具 plus
MySQLerの7つ道具 plusMySQLerの7つ道具 plus
MySQLerの7つ道具 plusyoku0825
 
MySQLerの7つ道具
MySQLerの7つ道具MySQLerの7つ道具
MySQLerの7つ道具yoku0825
 
MHAの次を目指す mikasafabric for MySQL
MHAの次を目指す mikasafabric for MySQLMHAの次を目指す mikasafabric for MySQL
MHAの次を目指す mikasafabric for MySQLyoku0825
 
5.7の次のMySQL
5.7の次のMySQL5.7の次のMySQL
5.7の次のMySQLyoku0825
 
mikasafabric for MySQL
mikasafabric for MySQLmikasafabric for MySQL
mikasafabric for MySQLyoku0825
 
とあるイルカの近況報告
とあるイルカの近況報告とあるイルカの近況報告
とあるイルカの近況報告yoku0825
 
MySQL Fabricでぼっこぼこにされたはなし
MySQL FabricでぼっこぼこにされたはなしMySQL Fabricでぼっこぼこにされたはなし
MySQL Fabricでぼっこぼこにされたはなしyoku0825
 
MySQLと正規形のはなし
MySQLと正規形のはなしMySQLと正規形のはなし
MySQLと正規形のはなしyoku0825
 
MySQLおじさんの逆襲
MySQLおじさんの逆襲MySQLおじさんの逆襲
MySQLおじさんの逆襲yoku0825
 
地雷職人の朝は早い
地雷職人の朝は早い地雷職人の朝は早い
地雷職人の朝は早いyoku0825
 

More from yoku0825 (20)

逝くぞ最新版、罠の貯蔵は十分か
逝くぞ最新版、罠の貯蔵は十分か逝くぞ最新版、罠の貯蔵は十分か
逝くぞ最新版、罠の貯蔵は十分か
 
サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技
サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技
サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技
 
MySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれやMySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれや
 
MySQL 8.0で憶えておいてほしいこと
MySQL 8.0で憶えておいてほしいことMySQL 8.0で憶えておいてほしいこと
MySQL 8.0で憶えておいてほしいこと
 
MySQLステータスモニタリング
MySQLステータスモニタリングMySQLステータスモニタリング
MySQLステータスモニタリング
 
わかった気になるMySQL
わかった気になるMySQLわかった気になるMySQL
わかった気になるMySQL
 
わたしを支える技術
わたしを支える技術わたしを支える技術
わたしを支える技術
 
MySQL 5.7の次のMySQL 8.0はどんなものになるだろう
MySQL 5.7の次のMySQL 8.0はどんなものになるだろうMySQL 5.7の次のMySQL 8.0はどんなものになるだろう
MySQL 5.7の次のMySQL 8.0はどんなものになるだろう
 
Dockerイメージで誰でも気軽にMroonga体験
Dockerイメージで誰でも気軽にMroonga体験Dockerイメージで誰でも気軽にMroonga体験
Dockerイメージで誰でも気軽にMroonga体験
 
MySQLアンチパターン
MySQLアンチパターンMySQLアンチパターン
MySQLアンチパターン
 
MySQLerの7つ道具 plus
MySQLerの7つ道具 plusMySQLerの7つ道具 plus
MySQLerの7つ道具 plus
 
MySQLerの7つ道具
MySQLerの7つ道具MySQLerの7つ道具
MySQLerの7つ道具
 
MHAの次を目指す mikasafabric for MySQL
MHAの次を目指す mikasafabric for MySQLMHAの次を目指す mikasafabric for MySQL
MHAの次を目指す mikasafabric for MySQL
 
5.7の次のMySQL
5.7の次のMySQL5.7の次のMySQL
5.7の次のMySQL
 
mikasafabric for MySQL
mikasafabric for MySQLmikasafabric for MySQL
mikasafabric for MySQL
 
とあるイルカの近況報告
とあるイルカの近況報告とあるイルカの近況報告
とあるイルカの近況報告
 
MySQL Fabricでぼっこぼこにされたはなし
MySQL FabricでぼっこぼこにされたはなしMySQL Fabricでぼっこぼこにされたはなし
MySQL Fabricでぼっこぼこにされたはなし
 
MySQLと正規形のはなし
MySQLと正規形のはなしMySQLと正規形のはなし
MySQLと正規形のはなし
 
MySQLおじさんの逆襲
MySQLおじさんの逆襲MySQLおじさんの逆襲
MySQLおじさんの逆襲
 
地雷職人の朝は早い
地雷職人の朝は早い地雷職人の朝は早い
地雷職人の朝は早い
 

TokuDB試してみる

  • 2. \こんばんは/ ● I'm yoku0825 ● とある企業のDBA ● オラクれない ● ポスグれない ● マイエスキューエる ● 家に帰ると ● 嫁の夫 ● せがれの父 ● ポテトチップスはのりしお派
  • 3. TokuDB とは ● Tokutek が作った Fractal Tree(R) Index を実 装したストレージエンジン ● MongoDB 向けに実装されたのが TokuMX ● TokuDB 公式バイナリーは MySQL 5.5.37, MariaDB 5.5.37( いずれも 64bit のみ ) ● MariaDB 公式バイナリーでは 5.5.33 以降と 10.0.5 以降 ● Percona Server 公式バイナリーでは 5.6.19(7/2 に GA になりました )
  • 4. TokuDB ● http://docs.tokutek.com/tokudb/ ● オンライン ALTER TABLE(ADD INDEX, ADD COLUMN) に対応しているらしい ● 圧縮がイケているらしい ● 断片化しないらしい ● クラスターインデックスを複数作れるらしい ● Information_schema, SHOW ENGINE TokuDB STATUS は慣れるまで大変そう ● FOREIGN KEY 制約はサポートしてない
  • 5. Fractal Tree(R) Index ● http://tokutek.com/downloads/mysqluc-2010- fractal-trees.pdf ● 14 ページ目あたりに Fractal Tree Index の構 造説明 ● インデックス構造にあらかじめバッファがあるから INSERT に強い、らしい。 ● 28 ページ目あたりにベンチマーク ● 今は InnoDB の性能が上がってるので、交点はもう ちょっと右にズレてると思う
  • 7. テストケース ● user テーブル , follow テーブル , comment テーブルを用意 ● Twitter みたいなことがやりたかったんだよ ● それぞれのテーブルをクロスして、 timeline テーブルを生成 ● 抽出とソートだけここで済ませて、コメントの本文 は comment テーブルから当たる ● どう考えても timeline テーブルの件数がアレ なので、 TokuDB を考えた ● 使ったのは percona-server-5.6.16-64.2- tokudb-7.1.5
  • 9. テストケース ● user ● 6 万 ● comment ● 1 ユーザーあたり平均 1000 件 = 約 6000 万 ● follow ● 1 ユーザーあたり平均 200 人 = 約 1200 万 ● timeline ● 1 ユーザーあたり最大で直近 1 万件 = 約 6 億
  • 10. テストケース ● ロジック ● follower, followee, 自分のコメントの一覧 , 直 近 1 万件のタイムライン表示 – SELECT .. FROM follow WHERE user_id= ME ● コメントの投稿 – INSERT INTO comment VALUES .. – INSERT INTO timeline SELECT .. FROM follow WHERE follower_id= ME ● コメントの削除 – DELETE FROM timeline .. – DELETE FROM comment ..
  • 11. テストケース ● ロジックつづき ● フォロー – INSERT INTO follow VALUES .. – INSERT INTO timeline SELECT .. FROM comment WHERE user_id= HIM; ● アンフォロー – DELETE FROM timeline WHERE user_id= ME AND comment_person= HIM; – DELETE FROM follow WHERE user_id= ME AND follower_id= HIM;
  • 12. テストケース ● ロジックつづき ● 退会 – DELETE FROM timeline WHERE comment_person= ME – DELETE FROM comment WHERE user_id= ME – DELETE FROM follow WHERE follower_id= ME – DELETE FROM user WHERE user_id= ME ● タイムラインの再生成 – DELETE FROM timeline WHERE user_id= ME – INSERT INTO timeline SELECT .. FROM comment WHERE user_id IN (MY_FOLLOWERS)
  • 13. ベンチマークマシン ● CPU ● Intel(R) Xeon(R) L5520 @ 2.27GHz ● 2P8C16T ● Memory ● 48GB 、型番とかわからない ● Storage ● RAID コントローラー + SSD2 本で RAID10 ● Fio でざっくり 100MB/s RW, 20000IOPS R, 2000IOPS W ● 鯖蔵同じスペックで 1 台ずつ
  • 14. my.cnf はかなりテキトー ● innodb_buffer_pool_size= 30G ● innodb_flush_method= O_DIRECT ● innodb_log_file_size= 1G ● innodb_log_buffer_size= 64M ● tokudb_directio= 1 ● tokudb_cache_size= 30G ● tokudb_lock_timeout= 500000 ● ミリ秒単位。デフォルトだと timeline テーブルの 構築時にタイムアウトしてたので。。 ● あとはソートバッファとか。
  • 15. おことわり ● ベンチマークは飽くまで参考程度に。 ● 自分でも納得いかない結果になってるとこもあるの で。 ● 特に InnoDB Compressed, TokuDB UNCOMPRESSED の 試行回数が十分取れてないのであんまりアテになり ません。 ● あと、テストマシンのストレージ容量の関係で色々 ベンチが制約されてたりとか。 ● せがれが熱を出してこの 1 週間くらいほとんど 何もできなかったんですよう。 ● いいわけ
  • 16. ファイルサイズ InnoDB Compact InnoDB Compressed TokuDB ZLIB TokuDB uncompressed 0 10 20 30 40 50 60 70 80 90 GB
  • 17. follower 一覧 (pkey) 1 4 16 32 64 0 5 10 15 20 25 30 35 40 45 50 Latency(ms) InnoDB – Compact TokuDB – zlib InnoDB – Compressed TokuDB – Uncompressed
  • 18. followee 一覧 (seckey) 1 4 16 32 64 0 5 10 15 20 25 30 35 Latency(ms) InnoDB – Compact TokuDB – zlib InnoDB – Compressed TokuDB – Uncompressed
  • 19. My comment 一覧 1 4 16 32 64 0 20 40 60 80 100 120 140 160 180 200 Latency(ms) InnoDB – Compact TokuDB – zlib InnoDB – Compressed TokuDB – Uncompressed
  • 20. timeline 一覧 1 4 16 32 64 0 500 1000 1500 2000 2500 3000 3500 Latency(ms) InnoDB – Compact TokuDB – zlib InnoDB – Compressed TokuDB – Uncompressed
  • 21. 4 クエリーをまとめたスループット 1 4 16 32 64 0 5 10 15 20 25 30 35 40 Throughput(tps) InnoDB – Compact TokuDB – zlib InnoDB – Compressed TokuDB – Uncompressed
  • 22. コメント投稿レイテンシー 1 4 16 32 64 0 50 100 150 200 250 300 350 400 450 Latency(ms) InnoDB – Compact TokuDB – zlib InnoDB – Compressed TokuDB – Uncompressed
  • 23. コメント投稿スループット 1 4 16 32 64 0 20 40 60 80 100 120 140 160 Throughput(tps) InnoDB – Compact TokuDB – zlib InnoDB – Compressed TokuDB – Uncompressed
  • 24. コメント削除レイテンシー 1 4 16 32 64 0 50 100 150 200 250 300 350 400 Latency(ms) InnoDB – Compact TokuDB – zlib InnoDB – Compressed TokuDB – Uncompressed
  • 25. コメント削除スループット 1 4 16 32 64 0 20 40 60 80 100 120 140 160 180 Throughput(tps) InnoDB – Compact TokuDB – zlib InnoDB – Compressed TokuDB – Uncompressed
  • 26. ざっくり所感 ● InnoDB は user を結構使える。スレッド数超え ると wait が出始めてスループットが頭打ち。 ● TokuDB はかなり CPU をぶん回す。 64 スレッド だと sys だけで 50% くらい使うし csw が 150k と か行く。 ● InnoDB compressed と比べて 3 倍圧縮が効く。 多少レイテンシーは上がるけど、それを差っ引 いても容量が欲しい時は嬉しい。 ● 正直ロック粒度がよくわからん。 InnoDB と同 じつもりでいくと結構 lock wait timeout 食ら う。 ● INSERT INTO .. SELECT でロックにはまること多々
  • 27. ざっくり所感 ● 公式 ML かなり過疎ってる ● https://groups.google.com/forum/#!forum/tokudb -user ● パーティショニングしてあってプルーニングが 効かないクエリーがめっさ遅かったと聞いてい る ● profiling 見た感じ、 1 つ 1 つのパーティションを 開くのがかなりオーバーヘッドみたい ● COUNT(DISTINCT ..) が遅いぽい ● https://groups.google.com/forum/#!topic/tokudb -user/hDnTItxkTTo ● covering index でも遅いってことは GROUP BY 苦手 なのかも。
  • 28. ざっくり所感 ● mysql コマンドラインクライアントからクエ リーを叩くと、不気味な静寂に包まれることが ある。 ● RC のやつだけど、何回かはそのままクラッシュし た ● ばぐれぽはしていない ● どっか影響のないところから進めていくことに なるかなぁ。