[groonga-dev,04190] Re: PGROONGAでレコード追加時にエラー発生

Back to archive index

Kouhei Sutou kou****@clear*****
2016年 11月 25日 (金) 22:22:43 JST


須藤です。

In <20161****@orega*****>
  "[groonga-dev,04189] Re: PGROONGAでレコード追加時にエラー発生" on Fri, 25 Nov 2016 12:25:48 +0900,
  高見 直輝 <takam****@orega*****> wrote:

> まず、全てのケースについて、PostgreSQLがクラッシュした形跡は在りませんでした。
> ただ、いずれも直前にOSのシャットダウンが行われており、そのときに以下のログが確認できました。
...
> 以後、PGROONGAへのインデックス追加でエラーとなる。(PGROONGAを使わないテーブルへの追加は問題無し)
> 
> OSのシャットダウンでもクラッシュと同等の状態になる可能性はありますでしょうか?

はい、同等の状態になります。
Windowsの場合、OSのシャットダウンによりプロセスが強制終了さ
れた場合でもクラッシュした場合でも、メモリー上のデータがディ
スクに書き込まれないまま終了してしまいます。それが原因で
PGroongaのデータが壊れる(データの不整合が発生する)ことがあ
ります。

> 前回の内容に関して、何点か確認させて下さい。
> ・クラッシュが原因の場合、ファイルに保存されているデータが破損しているという認識で良いのか?

よいです。

>  →“ロックが残る”という状態とインデックス破損の違いがよくわかりません。

「ロックが残る」という状態はデータ変更中にクラッシュした状態
です。Groongaはデータを変更する前に(必要なら)ロックを獲得
し、変更後にロックを開放します。そのため、ロックが残っている
なら変更中にクラッシュしたということです。この際、データに不
整合が発生していることもありますし、発生していないこともあり
ますが、安全側に倒して不整合が発生していると考える方がよいで
す。

「インデックス破損」という状態は原因は問わずデータに不整合が
発生している状態です。たとえば、データ変更中のクラッシュで不
整合が発生しているかもしれませんし、Groonga/PGroongaのバグで
不整合が発生しているかもしれません。

> ・現在予想されている原因と回復方法の組み合わせは、以下のもので間違いないか?
>  クラッシュ:インデックス再構築
>  インデックス破損:インデックス再構築
>  ロック負荷:負荷の低減(PGROONGAを現行最新版へバージョンアップ)

少し違います。

1つめのケースはインデックスにだけロックが残っているのでイン
デックス再構築だけで大丈夫です。

しかし、2つめのケースはbase/16384/pgrnにもロックが残っている
のでPGroongaのデータベース全体を再構築する必要があります。

具体的には以下のようにします。

  1. PostgreSQLを終了する
  2. base/16384/pgrn*を削除する
  3. PostgreSQLを起動する
  4. インデックスを再構築する

「ロック負荷」はあっています。

よって、

>  クラッシュ:インデックス再構築
>  インデックス破損:インデックス再構築
>  ロック負荷:負荷の低減(PGROONGAを現行最新版へバージョンアップ)

は

クラッシュ:インデックス再構築またはデータベース再構築
インデックス破損:インデックス再構築またはデータベース再構築
ロック負荷:負荷の低減(PGROONGAを現行最新版へバージョンアップ)

が正しいです。

なお、そろそろリリース予定の1.1.9ではインデックス再構築時の
メモリー使用量が減っているため、これまでよりも速くなっている
はずです。

> ・ロックを必要以上に取得する『少し前のPGroonga』はバージョン1.0.3以後か?

ちょっと具体的なバージョンは覚えていないのですが、1.0.3くら
いならすでに必要以上に取得していた気がします。

>  →1.0.3から1.1.3にアップデートしてからこの問題が頻発しているように感じています。
>   負荷増加が1.0.3以後の話であれば、これが原因の可能性が高いと言えませんか?

今回はOSのシャットダウンによりPostgreSQLが強制終了されている
ということなのでそっちが原因の可能性の方が高いと思います。

PGroongaのデータベースを再構築しても再発するならこっちの問題
の可能性が高いと思います。

-- 
須藤 功平 <kou****@clear*****>
株式会社クリアコード <http://www.clear-code.com/>

Groongaベースの全文検索システムを総合サポート:
  http://groonga.org/ja/support/
パッチ採用 - プログラミングが楽しい人向けの採用プロセス:
  http://www.clear-code.com/recruitment/
OSS開発支援サービス:
  http://www.clear-code.com/blog/2016/6/27.html




groonga-dev メーリングリストの案内
Back to archive index