石橋 卓見
ishib****@syste*****
2015年 12月 21日 (月) 19:40:04 JST
株式会社クリアコード 須藤様
お世話になります。システムソフト石橋です。
ご連絡いただきありがとうございました。再現手順を確認しましたので
ご報告させていただきます。
下記、インラインで失礼致します。
> Windowsのシャットダウン時はサービスが一定時間内に終了しない
> と強制終了されます。すべてのデータをディスクに書きだす前に
> MySQLサービスが強制終了するとMroongaのテーブル・インデックス
> が壊れても不思議ではありません。
やはりそうなんですね・・・少しそんな気がしていました・・・
> 石橋さんの環境ではシャットダウン時にクラッシュしていましたか?
> それともシャットダウン後、アクセスしたらクラッシュするように
> なっていましたか?
以下、再現手順です。
# SSDを搭載したハイスペックPC上でのみ再現し、他のPCでの再現
# には至っておりません・・・
1) mariadb-10.0.21-with-mroonga-5.08-win32.zip を解凍
2) bin直下のmysql.exeよりサービス登録
$ mysqld.exe --install MariaDB_test_service
3) DB、TBLを作成し、INSERT(6件)を実行
$ mysql.exe -h localhost -u root
> DROP DATABASE IF EXISTS DBX;
> CREATE DATABASE DBX;
> SHOW VARIABLES LIKE 'mroonga_version';
> use DBX;
> DROP TABLE IF EXISTS DBX.TBL_INBOX_INFO_S;
> CREATE
TABLE TBL_INBOX_INFO_S(
MESSAGE_ID VARCHAR(255) NOT NULL
,SUBJECT VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci
,PURPOSE VARCHAR(255)
,QUOTATION LONGTEXT CHARACTER SET utf8 COLLATE utf8_unicode_ci
,TEXT LONGTEXT CHARACTER SET utf8 COLLATE utf8_unicode_ci
,PREFACE TEXT CHARACTER SET utf8 COLLATE utf8_unicode_ci
,SIGNATURE TEXT CHARACTER SET utf8 COLLATE utf8_unicode_ci
,PRIMARY KEY (MESSAGE_ID)
,FULLTEXT INDEX (SUBJECT,PREFACE,TEXT,QUOTATION,SIGNATURE)
) ENGINE = Mroonga DEFAULT CHARSET = UTF8;
> INSERT INTO DBX.tbl_inbox_info_s (MESSAGE_ID, SUBJECT, TEXT, PREFACE, SIGNATURE )VALUES('10000****@test*****','さいたま市', '伊勢志摩 さいたま市 見積', 'まえがき', '署名1' );
> INSERT INTO DBX.tbl_inbox_info_s (MESSAGE_ID, SUBJECT, TEXT, PREFACE, SIGNATURE )VALUES('10000****@test*****','さいたま市', '伊勢志摩 さいたま市 見積', 'まえがき', '署名1' );
> INSERT INTO DBX.tbl_inbox_info_s (MESSAGE_ID, SUBJECT, TEXT, PREFACE, SIGNATURE )VALUES('10000****@test*****','さいたま市', '伊勢志摩 さいたま市 見積', 'まえがき', '署名1' );
> INSERT INTO DBX.tbl_inbox_info_s (MESSAGE_ID, SUBJECT, TEXT, PREFACE, SIGNATURE )VALUES('10000****@test*****','さいたま市', '伊勢志摩 さいたま市 見積', 'まえがき', '署名1' );
> INSERT INTO DBX.tbl_inbox_info_s (MESSAGE_ID, SUBJECT, TEXT, PREFACE, SIGNATURE )VALUES('10000****@test*****','さいたま市', '伊勢志摩 さいたま市 見積', 'まえがき', '署名1' );
> INSERT INTO DBX.tbl_inbox_info_s (MESSAGE_ID, SUBJECT, TEXT, PREFACE, SIGNATURE )VALUES('10000****@test*****','さいたま市', '伊勢志摩 さいたま市 見積', 'まえがき', '署名1' );
> commit;
4) Windowsをシャットダウン
5) Windowsを起動後に下記のコマンドで再現します。
$ mysql -h localhost -u root -Ddbx
> select * from DBX.TBL_INBOX_INFO_S;
ERROR 1016 (HY000) at line 5: [db][open] invalid keys table's type: 0
> 後者ならデータがディスクに書きだされていないケースのようにみ
> えます。というのも、FLUSH TABLESをするとクラッシュしなくなる
> からです。MySQLのシャットダウン前にFLUSH TABLESしておくとサー
> ビス終了時のディスクへの書き出し処理がほとんどなくなるので
> MySQLサービスの終了時間が短くなり、結果的にWindowsのシャット
> ダウン時にMySQLサービスが強制終了されにくくなります。
はい、FLUSH TABLESは有効なようです。
調査したところ、下記のどちらかの対応で再現しなくなりましたので
念のため、ご報告いたします。2.が有効な理由はよくわかっており
ません。
(クラッシュさせない為の暫定対応)
1.Windowsのシャットダウン前にFLUSH TABLESを実行
2.Windowsのコントロール パネル ⇒ ハードウェアとサウンド ⇒
電源オプション ⇒ システム設定 ⇒
「高速スタートアップを有効にする(推奨)」のチェックをOFFに
する。(WindowsのデフォルトON)
尚、本件につきまして、弊社としては、環境依存のレアケースとして
一旦、ペンディングとさせて頂きます。今後、本事象が発生した場合
上記1.2.を実施して回避する方針としました。
今回、貴重なお時間をいただき恐縮です。ご相談に乗っていただき大変
ありがとうございました。
以上、よろしくお願い致します。
--
株式会社システムソフト
システム事業部 情報テクノロジ部
石橋 卓見 <ishib****@syste*****>