Kouhei Sutou
kou****@clear*****
2014年 4月 15日 (火) 23:26:43 JST
須藤です。 In <CAHB5oTMCCxUkR13o5_o=6VAMK****@mail*****> "[groonga-dev,02222] MroongaストレージモードでINSERT, DELETEが競合してクラッシュ" on Tue, 15 Apr 2014 12:36:22 +0900, "yoku ts." <yoku0****@gmail*****> wrote: > 恒例(?)のクラッシュ報告になります。。 ありがとうございます。。。 > 再現手順は以下の通りです。 > > #下準備 > mysql> CREATE DATABASE mroonga; > mysql> CREATE TABLE test (num int) Engine= Mroonga; > > # ターミナル1 > $ while true; do >> mysql -e "INSERT INTO mroonga.test VALUES (1)" >> done > > # ターミナル2 > mysql> DELETE FROM mroonga.test; > > 1回で落ちないこともたまにあったり(INSERT側でエラーが出たりしました)しますが、 > まあまあまず落ちます。 > > ご確認いただけますか? 直しました! DELETE FROM tableがきたらTRUNCATE TABLE tableと同じ処理をする ようにしていたんですが、TRUNCATEは速い代わりに他のコネクショ ンがつないでいるときに実行してしまうとクラッシュするので、1 件ずつ削除するようにしました。 速く全レコードを消したくてTRUNCATE TABLEを使いたいときは、 > LOCK TABLES mroonga.test WRITE; > TRUNCATE TABLE mroonga.test; > UNLOCK TABLES; としてください! 余談: TRUNCATE TABLEが速いのは1件毎レコードを削除するのではな く、テーブルをまるごと削除してから新しく作りなおしているから です。なので、レコード件数が少ないときはDELETEの方が速いです。 まぁ、テスト用で頻繁にTRUNCATEしたくて、データ量がそんなに大 きくない場合は、MySQLのデータディレクトリーをtmpfsに置くのが 一番速いです。 -- 須藤 功平 <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/code-reader/