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