[groonga-dev,01195] Re: mroongaストレージモード、マルチインデックスでの絞り込み不具合

アーカイブの一覧に戻る

Kouhei Sutou kou****@clear*****
2013年 2月 9日 (土) 12:09:39 JST


須藤です。

In <CAGyvMCRVHxJ6uj8MmjF4V1HYiPtCkKT2_FyTqe****@mail*****>
  "[groonga-dev,01194] Re: mroongaストレージモード、マルチインデックスでの絞り込み不具合" on Fri, 8 Feb 2013 17:24:24 +0900,
  b senboku <senbo****@gmail*****> wrote:

>> 手元にあったMySQL 5.5.28で試してみたら再現しました!
>> 再現SQLがあってとても助かります。ありがとうございます。
> 
> 
> まずは再現可能ということでホッとしております。

修正しました!

groongaの方の問題でした。
groongaがmroonga用に提供している機能があるのですが、そこに問
題がありました。なので、groonga単独で使っている場合は問題が
ないのですが、mroongaから使っていると問題に遭遇することがあ
りました。

で、ストレージモードだけで起こりえるのかラッパーモードでも起
こりえるのかですが、ストレージモードだけでしか起こりえません。
あと、インデックスはマルチカラムインデックスかどうか関係なく
起こりえます。

再現コードを小さくして自動でテストできるようにしたものをコミッ
トしてあります。
  https://github.com/mroonga/mroonga/commit/d77dc9514aabb43fe7542206021971ca71f2874a

ふつうのインデックスならこれで再現します。

  SET NAMES utf8;
  CREATE TABLE scores (
    value INT,
    INDEX (value)
  );

  INSERT INTO scores VALUES (21);
  INSERT INTO scores VALUES (21);
  INSERT INTO scores VALUES (22);

  SELECT count(*) FROM scores WHERE value >= 20;
  UPDATE scores SET value = 11 WHERE value = 21;
  SELECT count(*) FROM scores WHERE value >= 20;

マルチカラムインデックスならこれで再現します。

  CREATE TABLE scores (
    deleted BOOLEAN,
    value INT,
    INDEX (deleted, value)
  );

  INSERT INTO scores VALUES (FALSE, 1);
  INSERT INTO scores VALUES (FALSE, 1);
  INSERT INTO scores VALUES (FALSE, 2);

  SELECT count(*) FROM scores WHERE deleted = FALSE;
  UPDATE scores SET deleted = TRUE WHERE value = 1;
  SELECT count(*) FROM scores WHERE deleted = FALSE;

ただ、いつでも発生するわけではなく、インデックスの最初の方の
値が同じで、その値が別の値に変更された場合に発生しやすくなり
ます。例えば、21と22だと10の位の2が同じですが、これが別の値
に変更されると発生しやすいです。マルチカラムインデックスの場
合でも最初のカラムの最初の方の値が影響しやすいです。


で、この修正がいつ反映されるかなんですが、今日のリリースには
間に合わなくて、今月末のリリースに反映される予定です。
時間があってすみません。。。

ちなみに、groonga側の修正は↓の3行です。
  https://github.com/groonga/groonga/commit/60a00564d2e9b99c898a25e4ecb3f5c43fb8cf97

-- 
須藤 功平 <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




groonga-dev メーリングリストの案内
アーカイブの一覧に戻る