Kouhei Sutou
kou****@clear*****
2016年 12月 5日 (月) 17:39:19 JST
須藤です。 In <20161****@orega*****> "[groonga-dev,04203] Re: PGROONGAでレコード追加時にエラー発生" on Mon, 05 Dec 2016 17:04:28 +0900, 高見 直輝 <takam****@orega*****> wrote: >> ハード障害というのはディスクが壊れたとかも想定していますか? >> であれば、回避できません。 > > いいえ。記憶領域の物理的な破損については想定していません。 > 想定しているのは以下のような場合です。 > ・高負荷などによってディスク書き込みが失敗した > ・外付けのHDDで、ケーブルが抜けた等の理由により書き込みが停止した > いずれも、時間の経過やユーザによる復旧処理で回復するものです。 よくわかっていないんですが、このケースはPostgreSQL本体は回避 できるのでしょうか? > この場合、先述のパラメータで破損を完全に回避することが可能なのでしょうか? 完全には回避できません。 > タイミング次第ですが、パラメータをONにしても発生し得るのでは? 書き込んだ後、フラッシュ前にクラッシュすれば発生します。 >> これは、PostgreSQL起動前にgrndb checkをすることでわかります。 > > PostgreSQLを停止しなくて良い手段は在りませんでしょうか? > PGROONGAと無関係な処理は継続したいのです。 「PGroongaと無関係な処理だけ」している状態であればgrndbを使っ ても問題ないです。使っている側でそこを保証した状態で使うのは どうでしょうか。 > そういう意味では、現状の復旧手段である『DBを停止してPGROONGAのファイルを削除する』についても、 > GROONGAのコマンドで全データのクリア(初期化)が出来るのが望ましいです。 pgroonga.enable = falseみたいな接続してもPGroongaがGroongaの DBを開かないみたいなモードを用意してその状態で削除、みたいな 感じなら実現可能です。 そういう感じの制限なしでは無理です。Windowsでは別のプロセス がファイルを開いているとファイルを消せない制限とかがあるので、 複数の接続がGroongaのDBを触っている状態で削除して作り直す、 とかはできないんです。 >> > ・データの破損(SQL実行時にエラーが発生するレベルのもの) >> >> これは。。。フラッシュされずにプロセスが死んだ(OSのシャット >> ダウンでPostgreSQLが強制終了した場合など)場合はどのくらいディ >> スクに書き込まれたかがわからないので、壊れているかもしれない >> し壊れていないかもしれない、くらいまでしかわからないんですよ >> ねぇ。 > > 壊れている(かもしれない)対象を、Postgreのエラー(メッセージ)に仕込むことは出来ませんか? > 内情がどうあれ、レコードの追加が出来ない以上、対応は必要になります。 ロックが残っている場合はレコード追加時のエラーメッセージにで ませんでしたっけ? > また、GROONGAのインデックスの量に応じて復旧にかかる時間が延びるため、大量のデータが存在する環境 > では再構築に2日かかった事例が存在しています。 > 当方の環境ではテーブルを分割しているので、対象が特定できれば、そしてそれが1つのテーブルだけであ > れば、現状の『全テーブルに対してインデックス再構築』に要する時間を大幅に減らすことが可能になります。 そのあたりをやってくれるのがgrndb recoverなので、「PGroonga と無関係な処理だけ」している状態を保証してgrndbを使うのがよ いのではないかと思いました。 >> 残念ながらPostgreSQLはPGroongaにコミットのタイミングを通知し >> てくれないのです。。。 > > これって、ロールバックが行われた場合、どうなるのでしょうか? > 内部的にはレコードの削除が通知されてくる? PostgreSQLはロールバックしてもすぐにはレコードを削除しません。 VACUUMのタイミングで削除しています。 >> 最終変更時刻からn秒後にフラッシュ(更新が連続していればフラッ >> シュされない)くらいがいいんですかねぇ。 > > Create・Drop Indexとそれ以外のコマンドで、壊れる範囲が変わることがあるのでしょうか? あります。CREATE INDEX/DROP INDEXのときはpgrnファイル自体が 壊れる可能性があります。 -- 須藤 功平 <kou****@clear*****> 株式会社クリアコード <http://www.clear-code.com/> Groongaベースの全文検索システムを総合サポート: http://groonga.org/ja/support/ パッチ採用 - プログラミングが楽しい人向けの採用プロセス: http://www.clear-code.com/recruitment/ リーダブルコードワークショップ: http://www.clear-code.com/services/code-reader/readable-code-workshop.html