Kouhei Sutou
kou****@clear*****
2013年 4月 24日 (水) 14:22:09 JST
須藤です。 In <19509****@web10*****> "[groonga-dev,01319] Re: utf8_unicode_ci使用時の検索結果について" on Wed, 24 Apr 2013 07:07:42 +0900 (JST), <mail_babir****@yahoo*****> wrote: > また、前々回のベンチマーク内容について、phpMyAdmin上での実行時間ではそういう結果となっていたのですが、コマンドライン上で操作した場合の実行時間はmyisamとmroongaで大差ないことがわかりました。(mroongaの方が少し速い) > おそらくmroongaを通した場合にphpMyAdmin上で計測に使っている数値か何かを取得できていないのかもしれません。 おぉ! もし、phpMyAdminで使っている数値がなんなのかわかったら教えて もらえると嬉しいです。information_schemaの何かなのかしら。。。 > また、mrnファイルについてご質問させて頂きます。 > > データベース内でmroongaストレージを使ったテーブルを作成すると、以下のファイルが生成されるのですが、 > > dbname.mrn > dbname.mrn.0000000 > dbname.mrn.001 > > その後、先ほどのテーブルを削除しても、上記のファイルが削除されずに残り、データベース自体を消して初めて削除されるようです。 > > 他のストレージエンジンでは、テーブルを削除すれば関係ファイルはすべて削除されるかと思うのですが、mroongaでもそうした仕様にできるでしょうか? すみません。できません。 まず、↑のファイルはgroongaのテーブルに対応するものではなく、 groongaのデータベースに対応するファイルなので、テーブルに関 係するファイルは今の状態ですべて削除されています。 1つのテーブルを削除する毎に↑も削除しているとテーブル間の関係 を維持できなくてうまく動けなくなってしまうのです。(groonga ではデータベースがテーブル間の関係を管理している。) > mroongaを使ったテーブルに何か問題があって削除した場合、mrnファイルが残っていると、その後に作り直したmroongaテーブルへの影響が気になり、データベース自体を作り直すことが結構ありますので。 mroonga上では存在しないように見えているテーブルを作成しよう として、すでに同じ名前のテーブルがあります、みたいなエラーに なる場合は(groongaの)データベースが壊れている可能性が高い ですが、そういうことが起きなければそのまま使い続けても大丈夫 です。 あと、もし、そのデータベース内のmroonga用テーブルを削除した 状態であれば↑の.mrnをすべて削除しても大丈夫です。(ただし、 MySQLを停止するかFLUSH TABLESしてだれも.mrnに触っていない状 態にすること。)新しくテーブルを作ったときに勝手に作り直します。 > あと1点、特定のテーブル操作を行うとクラッシュすることを確認しましたので、ご報告させて頂きます。 > > 以下、再現手順です。 > > CREATE TABLE `test` ( > `id` int(11) NOT NULL AUTO_INCREMENT, > `main` varchar(255) NOT NULL COLLATE 'utf8_unicode_ci', > PRIMARY KEY (`id`) > ) ENGINE=mroonga DEFAULT CHARSET=utf8; > > INSERT INTO `test`(`main`) VALUES ('とらっくばっく'); > INSERT INTO `test`(`main`) VALUES ('とらっく'); > > ALTER TABLE `test` ADD FULLTEXT (`main`) COMMENT 'parser "TokenDelimit"'; > > ALTER TABLE `test` DROP INDEX `main`, > MODIFY `main` VARCHAR(255) NOT NULL COLLATE 'utf8_roman_ci', > ADD FULLTEXT (`main`) COMMENT 'parser "TokenDelimit"'; > > ALTER TABLE `test` DROP INDEX `main`, > MODIFY `main` VARCHAR(255) NOT NULL COLLATE 'utf8_roman_ci', > ADD FULLTEXT (`main`) COMMENT 'parser "TokenDelimit"'; > > #1005 - already used name was assigned: <test-main> > クラッシュ > > ※分割して記述すればクラッシュしない > ALTER TABLE `test` DROP INDEX `main`; > ALTER TABLE `test` MODIFY `main` VARCHAR(255) NOT NULL COLLATE 'utf8_roman_ci'; > ALTER TABLE `test` ADD FULLTEXT (`main`) COMMENT 'parser "TokenDelimit"'; > > > 1.全文インデックスを削除して、 > 2.カラムを編集して > 3.再び全文インデックスを貼る > > 上記動作を1クエリでまとめて実行した場合、全く同じ操作を2回行ったところでクラッシュするというものです。 修正しました! 同時にインデックスを再作成しようとしていてエラーになっていま した。 インデックスに名前をつけておくと回避できます。 -- 須藤 功平 <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