Saya menjalankan postgres (postgis) 9.4.2 di mac (10.10.4).
Saya punya beberapa meja besar (beberapa TB).
Selama pembuatan indeks berdasarkan salah satu dari mereka yang membutuhkan waktu sekitar satu minggu, saya menyaksikan penurunan ruang HD yang tersedia seperti yang Anda harapkan mendekati titik di mana indeks akan selesai ketika pemadaman listrik berlangsung lebih lama daripada unit baterai dan sistem turun. Saya memiliki buffer, dan fillfactor=100
selama pembangunan karena ini merupakan sumber data statis. Saat reboot, ruang yang tersedia yang tersisa di drive persis di mana ia berada di akhir indeks. Analisis vakum tidak membebaskan ruang.
Saya mencoba menjatuhkan meja dan menelan kembali, dan itu tidak menjatuhkan ruang. Sekarang saya berada di tempat di mana saya tidak memiliki cukup ruang untuk membangun indeks.
Apakah file yang dihasilkan selama pembangunan indeks terjebak dalam beberapa limbo di mana mereka tidak dapat dihapus oleh sistem karena cara mesin turun selama pemadaman listrik?
Ketika saya melihat ukuran tabel + indeks dalam db (yang merupakan satu-satunya data pada drive itu) mereka menambahkan hingga sekitar 6TB . Drive adalah 8TB , dan ada kurang dari 500GB yang tersisa di drive, jadi sepertinya ada sekitar 1.5TB yang hilang di suatu tempat yang kira-kira seukuran indeks.
Ada ide?
sumber
SELECT r.relname, r.relkind, n.nspname FROM pg_class r INNER JOIN pg_namespace n ON r.relnamespace = n.oid WHERE relkind = 'i';
SELECT indexrelid::regclass, indrelid::regclass FROM pg_catalog.pg_index WHERE NOT indisvalid;
memberi Anda?Jawaban:
Biasanya kami berharap bahwa ketika postgres dimulai kembali, proses pemulihan crash akan menghapus file yang terkait dengan indeks rollback dari direktori data.
Mari kita asumsikan bahwa itu tidak berfungsi, atau setidaknya itu harus diperiksa secara manual.
Daftar file yang harus di datadir dapat dibuat dengan kueri seperti ini:
reltablespace=0
adalah untuk tablespace default. Jika indeks bermasalah dibuat di tablespace non-default, ini0
harus diganti dengan OID-nya dipg_tablespace
.i, r, t, S, m
relkind
masing-masing sesuai dengan indeks, tabel, ruang roti, urutan, pandangan terwujud. Semua objek ini memiliki datanya dalam file yang namanya cocokpg_relation_filenode(oid)
.Pada disk, file data berada di bawah
$PGDATA/base/oid/
manaoid
adalahoid
database yang diperolehselect oid,datname from pg_database
. Jika kita tidak berbicara tentang tablespace default, gantinyabase
digantiPG_version_somelabel
.Daftar dan urutkan file yang cocok dengan relfilenodes di direktori itu:
(yang sebenarnya hanya menyimpan segmen pertama untuk hubungan yang lebih besar dari 1Gb. Jika ada segmen yang tersisa yang tidak terikat pada apa pun, mereka harus dipertimbangkan secara terpisah)
dan diff file itu dengan hasil query di atas.
Jika ada file data yang tersisa yang tidak sesuai dengan objek yang diketahui db, mereka akan muncul di diff itu.
sumber