Kouhei Sutou
kou****@clear*****
2013年 8月 27日 (火) 14:50:33 JST
須藤です。 In <CANM+****@mail*****> "[groonga-dev,01685] Re: 仮想メモリサイズを超えるmroongaのインデックス構築について" on Mon, 26 Aug 2013 02:12:47 +0900, Naoya Murakami <visio****@gmail*****> wrote: > 60GB程度のインデックスの場合、スワップを追加することでmysqldがクラッシュする > ことが回避できましたが、さらに大きいインデックスの場合(90GB超程度)、 > スワップをいくら足してもインデックス構築中にmysqldがクラッシュすることが判明しました。 確認ありがとうございます。 制限に引っかかっているのがスワップではなくなったということです ね。 > どうにかして、インデックス90GB超のデータを構築する方法はないでしょうか? どこでクラッシュしているかがわかればヒントになりそうなんです が。。。mysqld.logにクラッシュ時のバックトレースもでていない んですよね。 面倒なので、お願いするのがとても申し訳ないのですが、デバッグ オプション付きでビルドしてgdbでバックトレースをとってもらうこ とはできるでしょうか? 手順は以下のような感じになります。試していないので間違いがあ るはずです。途中でうまくいかなかったときはエラーメッセージを 見せてもらえると手順をどう直せばよいかお伝えできます。 MySQLのビルド(MySQL 5.5.14じゃなくて5.5.33でアレですが。。。): % sudo yum install gcc gcc-c++ make ncurses-devel cmake % wget http://cdn.mysql.com/Downloads/MySQL-5.5/mysql-5.5.33.tar.gz % tar xzf mysql-5.5.33.tar.gz % cd mysql-5.5.33 % BUILD/compile-amd64-debug-max-no-ndb % sudo make install # /usr/local/mysql/以下にインストールされます groongaのビルド: % git clone https://github.com/groonga/groonga % cd groonga % ./autogen.sh % ./configure --with-debug % make -j > /dev/null % sudo make install # /usr/local/以下にインストールされます groonga-normalizer-mysqlのビルド: % git clone https://github.com/groonga/groonga-normalizer-mysql % cd groonga-normalizer-mysql % ./autogen.sh % ./configure PKG_CONFIG_PATH=/usr/local/lib/pkgconfig % make -j > /dev/null % sudo make install # /usr/local/以下にインストールされます mroongaのビルド: % git clone https://github.com/mroonga/mroonga % cd mroonga % ./autogen.sh % ./configure PKG_CONFIG_PATH=/usr/local/lib/pkgconfig CFLAGS="-g3 -O0" CXXFLAGS="-g3 -O0" --with-mysql-source=${↑のMySQL 5.5.33を展開したディレクトリー} --with-mysql-config=/usr/local/mysql/bin/mysql_config % make -j > /dev/null % sudo make install # /usr/local/mysql/lib/plugin/以下にインストールされます MySQLの起動: % sudo mv /etc/mysql/my.cnf{,.bak} # システムの設定ファイルを無効にする # 同じ設定ファイルを使った方が # いい気もするのでこれはやらない方がいいかも % sudo /sbin/service mysqld stop # システムのMySQLを無効にする % cd /usr/local/mysql % scripts/mysql_install_db # my.cnfを使いまわすなら # sudoが必要そう % gdb --args bin/mysqld --gdb # my.cnfを使いまわすなら # sudo -u mysql -Hが必要そう 別のターミナルから: % /usr/local/bin/mysql -u root < problem.sql ↑のSQLにはmroongaをインストールする↓のようなSQLも含めてくだ さい。 INSTALL PLUGIN mroonga SONAME 'ha_mroonga.so'; CREATE FUNCTION mroonga_command RETURNS STRING SONAME 'ha_mroonga.so'; たぶん、問題が再現すると思います。そのとき、 % gdb --args bin/mysqld --gdb を実行したターミナルが (gdb) というプロンプトをだして止まっているはずです。 このプロンプトに (gdb) thread apply all backtrace full と入れてください。すると Thread 18 (Thread 0x7ffff453c700 (LWP 9956)): #0 do_sigwait (set=<optimized out>, sig=0x7ffff453bed8) at ../nptl/sysdeps/unix/sysv/linux/../../../../../sysdeps/unix/sysv/linux/sigwait.c:64 ret = <optimized out> tmpset = {__val = {32985348835966, 16416264, 0, 140737488347792, 4096, 140737292519168, 140737292517088, 140737351945653, 4121419525973344261, 0, 11691928, 140737349688240, 0, 140737292517088, 1, 140737351971317}} #1 0x00007ffff7bcdfdb in __sigwait (set=<optimized out>, sig=<optimized out>) at ../nptl/sysdeps/unix/sysv/linux/../../../../../sysdeps/unix/sysv/linux/sigwait.c:99 oldtype = 0 result = <optimized out> #2 0x000000000054b140 in signal_hand (arg=0x0) ... みたいなのが長々と出力されます。それを教えてもらいたいです。 注意する点として、デバッグオプション付きのビルドでは最適化を 無効にしているので処理が遅いことです。これまで再現までにかかっ た時間よりも倍くらい遅くなるかもしれません。。。 > インデックス構築に最低限必要なメモリ、ディスク容量の計算方法はありませんでしょうか? 今のところ、確立していません。 確立できないか検討してみます。 > しかし、インデックス構築にはSSD4本のRAID0でも9時間ほどかかり、 > また、データが毎回破壊されるので、トライアンドエラーもほんとうに大変です。 す、すみません。。。 -- 須藤 功平 <kou****@clear*****> 株式会社クリアコード <http://www.clear-code.com/> (03-6231-7270) groongaサポート: http://groonga.org/ja/support/ パッチ採用はじめました: http://www.clear-code.com/recruitment/ コミットへのコメントサービスはじめました: http://www.clear-code.com/services/commit-comment.html