web-dev-qa-db-ja.com

PostgreSQL「一時ファイルのサイズ」

新しいデータベースにデータをインポートしました(タイムスタンプが約600万行、整数、倍精度)。次に、いくつかのインデックスを作成し、いくつかの列を変更しようとしました(スペース不足の問題が発生しました)。データベースがバキュームされます。

ここで、pgAdmin IIIは「一時ファイルのサイズ」が50G〜+であることを教えてくれます。

  1. これらの一時ファイルは何ですか?これらはSQL Serverトランザクションログのようなものですか?
  2. どうすればそれらを取り除くことができますか、データベースが必要以上に大きいようです(データベースの合計サイズは91 GBです)

Posgres 9.4.1 Windows 2012サーバーで使用する

データベース統計タブのスクリーンショット:

A screenshot of the database statistics tab

13
Ofiris

私はpgAdminのドキュメントには何も見つかりませんでしたが、 ソースコードが明らかにします これらのエントリの背後にあるクエリ(Postgres 9.2+用に追加):

要約すると:

SELECT temp_files AS "Temporary files"
     , temp_bytes AS "Size of temporary files"
FROM   pg_stat_database db;

そして Postgresマニュアルにはpg_stat_database

tmp_filesbigintこのデータベースでクエリによって作成された一時ファイルの数。一時ファイルが作成された理由(並べ替えやハッシュなど)に関係なく、また log_temp_files の設定に関係なく、すべての一時ファイルがカウントされます。

temp_bytesbigintこのデータベースのクエリによって一時ファイルに書き込まれたデータの総量。一時ファイルが作成された理由や log_temp_files の設定に関係なく、すべての一時ファイルがカウントされます。

これらの値はデータベースのサイズにしないことに注意してください。しかし、それらは work_mem が低すぎる可能性があるため、多くのソート操作がディスクに流出します(RAMと比較して非常に遅い) 。

関連:

実際にデータベースのサイズを圧縮するには:

サイズを測定するには:

余談: [〜#〜] wal [〜#〜](ログを先に書き込む) は、PostgresではSQL Serverのトランザクションログ。 SOに関するこの関連する回答の素晴らしい説明:

12

による:

http://www.postgresql.org/message-id/[email protected]

一時カウンター(使用されるファイルとスペース)は、おそらくクラスターの作成以降に使用されたすべての一時ファイルの合計を示します。一時ファイルで使用されている現在のスペースは反映されません。

たとえば、私のシステムでは、約700GBの一時ファイルが使用されていることが示されていますが、/ var/lib/pgsql/9.3/data/base/pgsql_tmpの一時ファイルが占める実際のスペースは、現在わずか53MBです。

10