[groonga-dev,04973] Re: Mroongaのalloc_countの増加について、cache_limitの恒久設定方法

Back to archive index
OHTSUKA Soushi (=?iso-2022-jp?B?GyRCQmdETRsoQiAbJEJBbTtKGyhC?=) so****@ayd*****
2022年 4月 22日 (金) 14:06:21 JST


soushiです。

> が、吉田さんの再現条件と違ってデータがないと再現しないようで
> す。実データを参考にして現象が再現するダミーデータを作れない
> か試してもらえませんか?
> 
> 「ml_master.open_date >=」が怪しそうなので、
> ml_master.open_dateでの比較が必要になるようなレコードが数個
> よいできれば再現するのではないかという気がします。

もう少し追加の挙動も分かったのでそちらも含めて検証情報を改めて連絡します。

[作成テーブル]
・ml_master(InnoDB)
CREATE TABLE `ml_master` (
  `entry_id` int(11) NOT NULL,
  `title` varchar(200) DEFAULT NULL,
  `open_date` datetime NOT NULL DEFAULT '1900-01-01 00:00:00',
  `del_flag` int(11) NOT NULL DEFAULT 0,
   PRIMARY KEY (`entry_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 `encrypted`=YES ;

・ml_text(Mroonga)
CREATE TABLE `ml_text` (
  `entry_id` int(11) NOT NULL,
  `entry_text` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`entry_id`),
  FULLTEXT KEY `entry_text` (`entry_text`)
) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4;

[挿入データ]
・ml_master
INSERT INTO `ml_master` (`entry_id`, `title`, `open_date`, `del_flag`) VALUES
(1, 'テストです。', '2022-04-30 00:00:00', 0);

・ml_text
INSERT INTO `ml_text` (`entry_id`, `entry_text`) VALUES
(1, 'あいうえお');

[実行クエリ]
・alloc_countが1増加
SELECT
  `ml_master`.`entry_id`
FROM
  `ml_master`
  INNER JOIN `ml_text` ON `ml_master`.`entry_id` = `ml_text`.`entry_id`
    AND MATCH(ml_text.entry_text) AGAINST('*D+ \"あいうえお\"' IN BOOLEAN MODE)
WHERE
  ml_master.open_date >= NOW();

・alloc_countが2増加
SELECT
  `ml_master`.`entry_id`
FROM
  `ml_master`
  INNER JOIN `ml_text` ON `ml_master`.`entry_id` = `ml_text`.`entry_id`
    AND MATCH(ml_text.entry_text) AGAINST('*D+ \"あいう\"' IN BOOLEAN MODE)
    AND MATCH(ml_text.entry_text) AGAINST('*D+ \"えお\"' IN BOOLEAN MODE)
WHERE
  ml_master.open_date >= NOW();

・alloc_countが20以上増加
SELECT
  `ml_master`.`entry_id`
FROM
  `ml_master`
  INNER JOIN `ml_text` ON `ml_master`.`entry_id` = `ml_text`.`entry_id`
    AND MATCH(ml_text.entry_text) AGAINST('*DOR \"あいう\" \"えお\"' IN BOOLEAN MODE)
WHERE
  ml_master.open_date >= NOW();

・alloc_countが増加しない条件
1.ml_master.open_dateの比較で真になるデータが存在しない時
2.NOW()関数を利用しない時(固定日付にするとalloc_countが増加しない)

特にDORを使うと面白いようにalloc_countが増加していきました。
ただ時折、alloc_countが減少する事もあり、総合すると少し増加傾向にあるとい
う感じです。

///////////////////////////////////////////////////////////////
 [NAME] 大塚 総司 - OTSUKA Soushi
 [Mail] so****@ayd*****



groonga-dev メーリングリストの案内
Back to archive index