2016-12-14 12 views
1

PostgreSQLにデータファイルを書き込むプロセスはどれですか?PostgreSQL-Dataファイル

そして、postgreSQLのデータファイルは何ですか?

注:postgreSQL-9.5の挿入/更新/削除操作を実行します。どのプロセスがディスク、つまりデータファイルに対してコミットを実行しているかを確認したい。 WALとデータファイルの使用。

+1

http://www.cybertec.at/2016/11/postgresql-writer-and-wal-writer-processes-explained/とhttps://en.wikibooks.org/wiki/PostgreSQL/Architecture –

+0

現在、jmeter.checkpoint_completion_target = 0.3、checkpoint_timeout = 30sで多くのクエリを実行していますが、各クエリの間に30秒の遅延があり、データファイル上でデータのフラッシュを確認できます。 –

+0

コミットの場合、コミットを行うバックエンドは、トランザクションをコミットしたことを示すWALレコードを書き込み、次に共有メモリ状態を設定するためにPGPROCを更新します。しかし、そのトランザクションによって行われた作業の他の部分は、bgwriterが書き込むことができ、後でチェックポインターなどによって変更をヒープに適用することができます。 –

答えて

2

PostgreSQLデータベースクラスタのデータファイルは、データディレクトリのサブディレクトリdataの下にあります。十分きれいなブロックがあることを確認するために戻ってディスクにバッファから汚いブロックを書き込み

  • バックグランドライタプロセス:彼らは三つのプロセスによって書かれています。

  • 特定の時間帯にディスクにすべて汚いブロックを書き込みcheckpointerプロセスチェックポイント)はクラッシュリカバリのための出発点を提供します。バックグランドライタが追いついていないことと、十分な空きブロックが存在しない場合

  • バックエンドプロセス(クライアント接続を提供していますプロセス)のみ、ディスクにデータを書き込みます。

pg_xlogに位置先行書き込みログまたはWALは、全く別のものです。 COMMITの直前のバックエンドプロセスによって書き込まれ、クラッシュ時にトランザクションを回復するために必要な情報が確実にディスクに書き込まれるようにします。 コミットログpg_clog)にも同じことが言えます。これには、トランザクションがコミットまたはロールバックされた場合の情報が含まれています。

データはCOMMITより前にデータファイルに書き込むことができますが、トランザクションがコミットされたときにのみ表示されます。

それだけではないDML文が汚されるデータ・ブロックを引き起こすことを言及する価値があるかもしれない:

  • をバックグラウンド・プロセス“自動バキューム”は定期的にテーブルとインデックスをスキャンし、未使用のエントリを削除します。

  • 将来の読者は再びその作業を行う必要がないようにコミットログにコミット情報を検索します新たに書き込まれたデータを読み取り、タプルにヒントビットを書くための最初のプロセス。

+0

TL; DRは "ほとんどのPostgreSQLプロセスはデータディレクトリ内のファイルへの書き込みです。各テーブルは1つ以上のファイルで、その他の特殊ファイルもあります。 –

関連する問題