K A
a_kira1****@hotma*****
2013年 8月 10日 (土) 22:59:23 JST
最近mroongaをいじり始めた者ですが、導入前には通っていた(※注)はずのクエリがたびたびエラーを起こすようになりました。 環境はCentOS 6、MySQL 5.6で、mroongaは3.06-1.el6_19.wingをラッパーモード(InnoDB)で使っています。 ローカル環境のWindows&MariaDB 10でもテストしていますが、今のところ問題は再現していません。 エラーを引き起こすクエリはたとえば以下のようなものです。 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再起動して再度テストしてみましたが、それでもエラーは発生しました。 現在は問題を回避するために、IN条件が長大になる場合にはIN条件そのものを50件ずつに分割して複数回SELECT(100件ではエラーになりました…)し、結果をマージして凌いでいますが、このままでは正直苦しいです。 解決のために試すべきことなど、思い当たる点がありましたらアドバイスをどうぞよろしくお願いします。 (※注:「導入前に通っていた」ことは確実ですが、mroonga導入の際に多少苦労してMySQLのダウングレードや再アップグレードを行ったため、直接の原因がmroongaにあるとは限りません。)