47
page Nov, 2013 29th MySQL 5.6への完全移行を実現! TritonnからMroongaへの移行体験記 Kentaro Yoshida at Groonga Night #4 1

MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記

Embed Size (px)

DESCRIPTION

2013年11月29日に開催された「全文検索エンジンGroongaを囲む夕べ 4」での発表資料です。 イベントページ http://atnd.org/events/43461 Ustream動画 http://www.ustream.tv/recorded/41205740

Citation preview

Page 1: MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記

page

Nov, 201329th

MySQL 5.6への完全移行を実現!TritonnからMroongaへの移行体験記Kentaro Yoshida at Groonga Night #4

1

Page 2: MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記

page

1. はじめに

2

Page 3: MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記

page

gihyo.jp へ寄稿しました

3

Page 5: MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記

page

執筆タイトル

5

第6回 [実録] MySQL向け全文検索エンジン「Tritonn」から「mroonga」への移行ガイド(1)

第7回 [実録] MySQL向け全文検索エンジン「Tritonn」から「mroonga」への移行ガイド(2)

第8回 CentOS6でのRPMパッケージを用いた MySQL 5.6 & mroonga & PHP 5.4 環境の作り方

第10回 [実録] MySQL向け全文検索エンジン「Tritonn」から「mroonga」への移行ガイド(3)

Page 6: MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記

page

2. 自己紹介

6

Page 7: MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記

page

自己紹介

7

•よしけんさん

•@yoshi_ken

• (株)リブセンス

• Web系インフラの研究開発エンジニア

好きなプロダクト

Page 8: MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記

お知らせ

Page 9: MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記

page

1. はじめに2. 自己紹介3. 移行するメリット4. 移行計画5. プラクティス6. まとめ

本日の流れ

9

Page 10: MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記

page

3. 移行するメリット

10

Page 11: MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記

page

Tritonnの限界

11

MySQLが持つ1テーブル1インデックスという制約を受け、全文検索以外の条件を加えて絞り込むと遅くなる問題

MyISAMを利用しているため,更新中はテーブルロックとなり参照クエリを発行できない問題

MyISAMを使うため、トランザクション非対応である問題

LIMIT句, COUNT(*), OR条件追加時の検索が遅い問題

Page 12: MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記

page

Mroongaの魅力

12

参照ロックフリー

ストレージエンジンにInnoDBを利用できる

プラガブルストレージエンジンである

bigram以外の豊富なN-gramトークナイザが利用可能

より強化された文字列正規化機能が利用可能

位置情報検索に対応

などなど

Page 13: MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記

page

MySQL 5.6の魅力

13

memcached API

バッファプールの暖機運転

Semi-Synchronous Replication

クラッシュセーフなスレーブ

より強化されたInnoDB Partitioning

ALTER TABLEの高速化

などなど http://www.slideshare.net/nippondanji/mysql-56dbtechshowcase2012

Page 14: MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記

page

4. 移行計画

14

Page 15: MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記

page

2013年7~8月2013年6月2013年4~5月2013年3月

安定稼働移行検証事前調査プラン立案

移行計画 スケジュール

15

Page 16: MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記

page

移行計画 規模

16

対象サイト・データベース数

合計 約20

対象データ容量

合計 約300GB

全文検索テーブルの最大行数

約500万行

MySQL構成

マスタ・スレーブ構成

サイト毎にスレーブ数は異なる

対象DBサーバ

移行前:約20台

移行後:約40台

Page 17: MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記

page

移行計画 構成

17

ハードウェア

旧構成 NEC Express5800/iR120a-1E (4Core/Xeon L5520 2.26GHz)Memory: 16GB, HDD: RAID-1 300GB*2 w/ BBU

新構成 NEC Express5800/R120d-1M (6Core/Xeon E5-2630L 2.0GHz)Memory: 64GB, HDD: RAID-10 300GB*4 w/ BBU

MySQL, OS

旧構成 MySQL 5.0.87 (Tritonn 1.0.12a) on CentOS 5.6

新構成 MySQL 5.6.12-2 (Mroonga 3.05) on CentOS 6.4

Page 18: MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記

page

移行計画 構成変更プラン

18

http://gihyo.jp/dev/clip/01/groonga/0007

Page 19: MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記

page

移行計画 構成変更プラン

19

Page 20: MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記

page

移行計画 構成変更プラン

20

Page 21: MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記

page

移行計画 構成変更プラン

21

Page 22: MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記

page

数字で振り返る移行プロジェクト

22

Page 23: MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記

page

数字で振り返る移行プロジェクト

23

3ヶ月

検証・移行期間

16件

Mroongaの機能改善や不具合改善

273件

Mroongaメイン開発者の須藤 (@ktou) さんとのメンション数

2件

想定外のH/Wトラブル

Page 24: MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記

page 24

Page 25: MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記

page

須藤さんを始めとする クリアーコードの皆様、ありがとうございます!

25

Page 26: MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記

page

5. プラクティス

26

Page 27: MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記

page

全文検索機能の選定

27

Solr・ElasticSearchアプリの改修工数的に今回は採用を見送りInnoDB FullText Search人柱すぎる&当時はメモリリーク不具合があるため採用を見送りftppc (full text parser plugin collection)MyISAM依存・速度面・Wプラグマ非対応な点から採用を見送り

Mroonga

根気と突破力で潰した不具合ラッシュも落ち着いたので、採用決定注) 2013年秋現在は不都合無く安定稼働中

Page 28: MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記

page

移行後のパフォーマンス

28

サービス毎に特性が違いすぎたため、詳細データは取っていません

早くなった/変わらない/遅くなったサービス、それぞれあります

オプティマイザの仕組みが変わった影響のようです

MySQL 5.1よりスロークエリの秒数をオンラインで変更できるため、是非活用してボトルネック箇所をつぶしましょう。実行時間0.5秒以上のスロークエリを記録するなら次のクエリです。SET GLOBAL long_query_time = 0.5;

Page 29: MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記

page

mysql_upgradeコマンド

29

mysql_upgradeは使わずに、mysqldumpコマンドを使いました

MySQL 5.0 → 5.1 → 5.5 → 5.6 というアップグレードであるため、1つずつバージョンアップするのは手間が掛かる

ibdata1が”超”肥大化している事で作り直しが必要であったため

innodb_file_per_table化を実現したかった

Page 30: MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記

page

mysqldumpコマンド その1

30

MySQL 5.6環境からmysqldumpコマンドでMySQL5.0に繋がらない

mysqldump: Couldn’t execute ‘SELECT @@GTID_MODE’: Unknown system variable ‘GTID_MODE’ (1193)

対処法としては、 --set-gtid-purged=OFF を付ける

Page 31: MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記

page

mysqldumpコマンド その2

31

MySQL 5.0環境からmysqldumpコマンドでMySQL5.6に繋がらない

対処法としては、MySQL 5.6で実行する

参考ページhttp://www.mk-mode.com/octopress/2013/06/02/mysql-5-6-mysqldump-set-option-error/

Page 32: MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記

page

TritonnとMroongaのスキーマ

32

-- Tritonnでの定義

CREATE TABLE test ( id INTEGER AUTO_INCREMENT, PRIMARY KEY (id), text TEXT NOT NULL, FULLTEXT INDEX USING MECAB (text)) ENGINE = MyISAM DEFAULT CHARSET utf8;

Page 33: MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記

page

TritonnとMroongaのスキーマ

33

-- mroongaストレージモードでの定義

CREATE TABLE test ( id INTEGER AUTO_INCREMENT, PRIMARY KEY (id), text TEXT NOT NULL, FULLTEXT INDEX `fulltext` (text) COMMENT 'parser "TokenMecab"') ENGINE = mroonga DEFAULT CHARSET utf8;

Page 34: MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記

page

TritonnとMroongaのスキーマ

34

-- mroongaラッパーモード(MyISAM)での定義

CREATE TABLE test ( id INTEGER AUTO_INCREMENT, PRIMARY KEY (id), text TEXT NOT NULL, FULLTEXT INDEX `fulltext` (text) COMMENT 'parser "TokenMecab"') ENGINE = mroonga DEFAULT CHARSET=utf8 COMMENT='engine "MyISAM"';

Page 35: MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記

page

移行計画 ハマったこと

35

従来の全文検索クエリでヒットする件数が同程度になるよう、トークナイザやノーマライザの組み合わせの比較検討

MroongaストレージモードとInnoDBのAutoIncrementの挙動が同じであるため、MyISAMのそれとは異なる挙動であったこと

MySQL 5.6で改善されたオプティマイザにより、逆に遅くなったクエリの調整

MySQL 5.6でより厳格となったSQLMODEへの追従

Page 36: MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記

page

Tritonnからmroongaへの移行Tips

36

その他の詳細な移行Tipsに関しては、gihyo.jp連載にまとめていますTritonnからmroongaへのテーブルスキーマ書き換えガイドTritonnからmroongaへの全文検索クエリ書き換えガイドTritonnからmroongaへ移行する際の要注意ポイントRPMパッケージを使ってMySQL 5.6.12,mroonga,PHP 5.4の環境を作る方法などなど、http://gihyo.jp/dev/clip/01/groonga にまとめています。

Page 37: MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記

page

6. まとめ

37

Page 38: MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記

page

まとめ

38

MySQL 5.0 サーバの撤廃を実現した

MySQL 5.6 + Mroonga 環境への移行を実現した

Mroongaは4~5月の不具合修正ラッシュ以降はかなり安定した

memcached APIは メモリリーク Bug #68530 のため結局使えず↑ MySQL 5.6.16で治るそうです!http://bugs.mysql.com/bug.php?id=70757

Page 39: MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記

page

まとめ

39

Now, mroonga is ready for production!

Page 40: MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記

We’re hiring!

Page 41: MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記

お知らせ

Page 42: MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記
Page 43: MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記
Page 44: MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記
Page 45: MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記
Page 46: MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記
Page 47: MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記

page

Thanks!

47

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