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

3,801 views

Published on

2013年11月29日に開催された「全文検索エンジンGroongaを囲む夕べ 4」での発表資料です。

イベントページ
http://atnd.org/events/43461

Ustream動画
http://www.ustream.tv/recorded/41205740

Published in: Technology
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,801
On SlideShare
0
From Embeds
0
Number of Embeds
172
Actions
Shares
0
Downloads
13
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

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

  1. 1. 29th Nov, 2013 MySQL 5.6への完全移行を実現! TritonnからMroongaへの移行体験記 Kentaro Yoshida at Groonga Night #4 page 1
  2. 2. 1. はじめに page 2
  3. 3. gihyo.jp へ寄稿しました page 3
  4. 4. http://gihyo.jp/dev/clip/01/groonga page 4
  5. 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 5
  6. 6. 2. 自己紹介 page 6
  7. 7. 自己紹介 • よしけんさん • @yoshi_ken • (株)リブセンス • Web系インフラの 研究開発エンジニア 好きなプロダクト page 7
  8. 8. お知らせ
  9. 9. 1. はじめに 2. 自己紹介 本日の流れ 3. 移行するメリット 4. 移行計画 5. プラクティス 6. まとめ page 9
  10. 10. 3. 移行するメリット page 10
  11. 11. Tritonnの限界 MySQLが持つ1テーブル1インデックスという制約を受け、 全文検索以外の条件を加えて絞り込むと遅くなる問題 MyISAMを利用しているため,更新中はテーブルロックとなり 参照クエリを発行できない問題 MyISAMを使うため、トランザクション非対応である問題 LIMIT句, COUNT(*), OR条件追加時の検索が遅い問題 page 11
  12. 12. Mroongaの魅力 参照ロックフリー ストレージエンジンにInnoDBを利用できる プラガブルストレージエンジンである bigram以外の豊富なN-gramトークナイザが利用可能 より強化された文字列正規化機能が利用可能 位置情報検索に対応 などなど page 12
  13. 13. MySQL 5.6の魅力 memcached API バッファプールの暖機運転 Semi-Synchronous Replication クラッシュセーフなスレーブ より強化されたInnoDB Partitioning ALTER TABLEの高速化 などなど page 13 http://www.slideshare.net/nippondanji/mysql-56dbtechshowcase2012
  14. 14. 4. 移行計画 page 14
  15. 15. 移行計画 スケジュール プラン立案 事前調査 2013年3月 page 15 検証 2013年4∼5月 2013年6月 移行 安定稼働 2013年7∼8月
  16. 16. 移行計画 規模 対象サイト・データベース数 合計 約20 対象データ容量 合計 約300GB 全文検索テーブルの最大行数 約500万行 page 16 MySQL構成 マスタ・スレーブ構成 サイト毎にスレーブ数は異なる 対象DBサーバ 移行前:約20台 移行後:約40台
  17. 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 17
  18. 18. 移行計画 構成変更プラン http://gihyo.jp/dev/clip/01/groonga/0007 page 18
  19. 19. 移行計画 構成変更プラン page 19
  20. 20. 移行計画 構成変更プラン page 20
  21. 21. 移行計画 構成変更プラン page 21
  22. 22. 数字で振り返る移行プロジェクト page 22
  23. 23. 数字で振り返る移行プロジェクト 3ヶ月 検証・移行期間 16件 Mroongaの機能改善や不具合改善 273件 Mroongaメイン開発者の須藤 (@ktou) さんとのメンション数 2件 想定外のH/Wトラブル page 23
  24. 24. page 24
  25. 25. 須藤さんを始めとする  クリアーコードの皆様、 ありがとうございます! page 25
  26. 26. 5. プラクティス page 26
  27. 27. 全文検索機能の選定 Solr・ElasticSearch アプリの改修工数的に今回は採用を見送り InnoDB FullText Search 人柱すぎる&当時はメモリリーク不具合があるため採用を見送り ftppc (full text parser plugin collection) MyISAM依存・速度面・Wプラグマ非対応な点から採用を見送り Mroonga 根気と突破力で潰した不具合ラッシュも落ち着いたので、採用決定 注) 2013年秋現在は不都合無く安定稼働中 page 27
  28. 28. 移行後のパフォーマンス サービス毎に特性が違いすぎたため、詳細データは取っていません 早くなった/変わらない/遅くなったサービス、それぞれあります オプティマイザの仕組みが変わった影響のようです MySQL 5.1よりスロークエリの秒数をオンラインで変更できるため、 是非活用してボトルネック箇所をつぶしましょう。 実行時間0.5秒以上のスロークエリを記録するなら次のクエリです。 SET GLOBAL long_query_time = 0.5; page 28
  29. 29. mysql_upgradeコマンド mysql_upgradeは使わずに、mysqldumpコマンドを使いました MySQL 5.0 → 5.1 → 5.5 → 5.6 というアップグレードであるため、 1つずつバージョンアップするのは手間が掛かる ibdata1が”超”肥大化している事で作り直しが必要であったため innodb_file_per_table化を実現したかった page 29
  30. 30. mysqldumpコマンド その1 MySQL 5.6環境からmysqldumpコマンドでMySQL5.0に繋がらない mysqldump: Couldn’t execute ‘SELECT @@GTID_MODE’: Unknown system variable ‘GTID_MODE’ (1193) 対処法としては、 --set-gtid-purged=OFF を付ける page 30
  31. 31. mysqldumpコマンド その2 MySQL 5.0環境からmysqldumpコマンドでMySQL5.6に繋がらない 対処法としては、MySQL 5.6で実行する 参考ページ http://www.mk-mode.com/octopress/2013/06/02/mysql-5-6-mysqldumpset-option-error/ page 31
  32. 32. TritonnとMroongaのスキーマ -- 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 32
  33. 33. TritonnとMroongaのスキーマ -- 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 33
  34. 34. TritonnとMroongaのスキーマ -- 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 34
  35. 35. 移行計画 ハマったこと 従来の全文検索クエリでヒットする件数が同程度になるよう、 トークナイザやノーマライザの組み合わせの比較検討 MroongaストレージモードとInnoDBのAutoIncrementの挙動が同じであ るため、MyISAMのそれとは異なる挙動であったこと MySQL 5.6で改善されたオプティマイザにより、 逆に遅くなったクエリの調整 MySQL 5.6でより厳格となったSQLMODEへの追従 page 35
  36. 36. Tritonnからmroongaへの移行Tips その他の詳細な移行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 36
  37. 37. 6. まとめ page 37
  38. 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 38
  39. 39. まとめ Now, mroonga is ready for production! page 39
  40. 40. We’re hiring!
  41. 41. お知らせ
  42. 42. Thanks! ご清聴ありがとうございました。 page 47

×