Kouhei Sutou
kou****@clear*****
2013年 8月 12日 (月) 14:46:48 JST
須藤です。 In <BAY17****@phx*****> "[groonga-dev,01595] mroonga適用テーブルへの「WHERE IN 多数」クエリでエラー" on Sat, 10 Aug 2013 22:59:23 +0900, K A <a_kira1****@hotma*****> wrote: > 最近mroongaをいじり始めた者ですが、導入前には通っていた(※注)はずのクエリがたびたびエラーを起こすようになりました。 > 環境はCentOS 6、MySQL 5.6で、mroongaは3.06-1.el6_19.wingをラッパーモード(InnoDB)で使っています。 > ローカル環境のWindows&MariaDB 10でもテストしていますが、今のところ問題は再現していません。 うーん、MariaDBだと発生しないのですか。。。 > エラーを引き起こすクエリはたとえば以下のようなものです。 > SELECT `Product`.`code` FROM `db1`.`products` AS `Product` WHERE `Product`.`vendor_id` = 3 AND `Product`.`code` IN ('code-1', 'code-2', 〜中略〜, 'code-100'); > 表示されるメッセージは「ERROR 1030 (HY000): Got error 1 from storage engine」です。 > > このproductsテーブルは、複数フィールド(title, description, code, …)に対してまとめて「ft_all」という全文インデックスを付与し、コメントで「NormalizerAuto」ノーマライザーを指定してあります。 > また、それとは別にcode, vendor_idの2フィールドに対してcode_vendor_idというユニークインデックスを張ってあります。 > EXPLAINしてみると、keyは「code_vendor_id」、Extraは「Using where」となっています。 > > あれこれ検索してみたところ、IN条件が長い場合にエラーになる要因は「max_allowed_packet」値だという解説を見かけたので、試みにmy.cnfで最大値の1Gに設定&MySQL再起動して再度テストしてみましたが、それでもエラーは発生しました。 手元でも再現させたいので、テーブル定義も提供してもらえません か? あと、もしかしたら/var/lib/mysql/groonga.logと /var/log/mysql.logにもなにか出ているかもしれないので見せても らえませんか? -- 須藤 功平 <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