[groonga-dev,04992] mroonga 記号を含む検索クエリのレスポンス長時間化

Back to archive index
増田紘也 koya.****@roote*****
2022年 5月 20日 (金) 15:55:33 JST


お世話になっております。増田と申します。
表題の件について伺います。


## 記号を含む検索クエリのレスポンス長時間化

MariaDB +
Mroongaのストレージモードで利用しています。特定のテーブル、検索クエリで全文検索したときにレスポンスに10秒以上かかる現象が発生しました。テーブルのレコード数はおよそ1,000万行です。この事象が並列で飛ぶとメモリ利用率が高まり、DBがダウンしてしまいます。
内部でも調査しましたが、原因究明に至らなかった為こちらで報告します。

### 環境
MariaDB 10.4.17
Mroonga 10.01

### テーブル定義(詳細は伏せてあります)

```SQL
CREATE TABLE `urls` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `url` mediumtext DEFAULT NULL,
  PRIMARY KEY (`id`),
  FULLTEXT KEY `fulltext_url` (`url`)
) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4;
```

### 再現SQL

```SQL
SELECT `urls`.*
FROM `urls`
WHERE MATCH(urls.url) AGAINST('+https://kirorosuu.com/kiro-f2-04q' IN
BOOLEAN MODE);
```

```SQL
SELECT mroonga_command('select urls --match_columns url --query
+https\\\\://kirorosuu.com/kiro-f2-04q --output_columns _id');
```

### 検証したこと

- Mroongaバージョンのアップグレード
Mroonga 12.02
MariaDB 10.4.24
にて同テーブルを用意して再現することを確認しました。

- テーブルサイズ(レコード数)の変更
レコード数を10万に減らしたテーブルを用意し、再現テストを行いました。
その結果、10万レコードに減らしたテーブルでは再現しませんでした。


正常系(レスポンスが1秒未満)、異常系(レスポンスが10秒以上)でのgroonga.logを比較したところ、異常系では`rehash
temporary`の箇所で時間がかかっていることまで判明しております。

## 添付ファイル

- `正常系_groonga.log`はレコード数を10万行に絞ったテーブルで全文検索したときのgroonga.log
- `異常系_groonga.log`はレコード数が1,000万行のオリジナルテーブルで全文検索したときのgroonga.log


-----
増田
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: <https://lists.osdn.me/mailman/archives/groonga-dev/attachments/20220520/a921ca41/attachment.html>
-------------- next part --------------
テキスト形式以外の添付ファイルを保管しました...
ファイル名: 正常系_groonga.log
型:         application/octet-stream
サイズ:     658 バイト
説明:       無し
URL:        <https://lists.osdn.me/mailman/archives/groonga-dev/attachments/20220520/a921ca41/attachment.obj>
-------------- next part --------------
テキスト形式以外の添付ファイルを保管しました...
ファイル名: 異常系_groonga.log
型:         application/octet-stream
サイズ:     3587 バイト
説明:       無し
URL:        <https://lists.osdn.me/mailman/archives/groonga-dev/attachments/20220520/a921ca41/attachment-0001.obj>


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