PostgreSQL "ukuran file sementara"

12

Saya telah mengimpor data ke basis data baru (sekitar 600 m baris cap waktu, bilangan bulat, ganda). Saya kemudian membuat beberapa indeks dan mencoba untuk mengubah beberapa kolom (mendapatkan beberapa masalah ruang), database disedot.

Sekarang pgAdmin III memberi tahu saya bahwa " Ukuran file sementara " adalah 50G ~ +.

  1. Apa file sementara ini? apakah ini seperti log transaksi SQL Server?
  2. Bagaimana saya bisa menyingkirkan mereka, sepertinya database jauh lebih besar dari yang seharusnya (ukuran total database adalah 91 GB)

Menggunakan Posgres 9.4.1 di server Windows 2012.

Tangkapan layar tab statistik statistik:

Tangkapan layar tab statistik statistik

Ofiris
sumber
Apa yang dilambangkan oleh nilai kolom "ukuran file sementara"?
Ofiris

Jawaban:

12

Saya tidak menemukan apa pun dalam dokumentasi pgAdmin, tetapi kode sumber mengungkapkan kueri di balik entri ini (ditambahkan untuk Postgres 9.2+):

Intinya adalah:

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

Dan manual Postgres memiliki detail untukpg_stat_database :

tmp_files bigint Jumlah file sementara yang dibuat oleh permintaan dalam database ini. Semua file sementara dihitung, terlepas dari mengapa file sementara dibuat (misalnya, pengurutan atau hashing), dan terlepas dari pengaturan log_temp_files .

temp_bytes bigint Jumlah total data yang ditulis ke file sementara oleh kueri dalam database ini. Semua file sementara dihitung, terlepas dari mengapa file sementara dibuat, dan terlepas dari pengaturan log_temp_files .

Perhatikan bahwa nilai-nilai ini tidak berkontribusi pada ukuran database Anda. Tetapi mereka menunjukkan bahwa pengaturan Anda untuk work_memmungkin terlalu rendah, sehingga banyak operasi semacam tumpah ke disk (yang sangat lambat dibandingkan dengan hanya RAM).

Terkait:

Untuk benar-benar memadatkan ukuran basis data Anda:

Untuk mengukur ukuran:

Selain itu: WAL (Write Ahead Log) akan sama dengan Postgres untuk log transaksi di SQL Server. Penjelasan yang bagus dalam jawaban terkait ini di SO:

Erwin Brandstetter
sumber
10

Berdasarkan:

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

Penghitung temp (file dan ruang yang digunakan) menunjukkan total semua file temp yang digunakan karena mungkin pembuatan klaster. Itu tidak mencerminkan ruang saat ini digunakan oleh file temp.

Sistem saya misalnya menunjukkan hampir 700GB file temp yang digunakan, tetapi ruang sebenarnya diambil oleh file temp di /var/lib/pgsql/9.3/data/base/pgsql_tmp hanya 53MB saat ini.

Eduard Rozenberg
sumber