Ne yaptığını kontrol etmek için CLUSTER
, temelde ilk 10 milyon pozitif tamsayıyı içeren daha önceki bir deneyden bir tablo aldım. Zaten bazı satırları sildim ve başka bir sütun da var, ancak bunlar sadece gerçek tablo boyutunu etkiler, bu yüzden o kadar da ilginç değil.
İlk olarak, VACUUM FULL
masaya fka
koştuktan sonra, boyutunu aldım:
\dt+ fka
List of relations
Schema | Name | Type | Owner | Size | Description
--------+------+-------+----------+--------+-------------
public | fka | table | test | 338 MB |
O zaman tablonun en başından itibaren verilerin fiziksel sırasını görelim:
SELECT *, ctid FROM fka ORDER BY ctid LIMIT 5;
id | col1 | ctid
-----+------+---------
2 | 2 | (0,1)
3 | 3 | (0,2)
4 | 4 | (0,3)
5 | 5 | (0,4)
6 | 6 | (0,5)
Şimdi bazı satırları silelim:
DELETE FROM fka WHERE id % 10 = 5;
--DELETE 1000000
Bundan sonra, rapor edilen tablo boyutu değişmedi. Şimdi ne yaptığını görelim CLUSTER
:
CLUSTER fka USING fka_pkey;
SELECT *, ctid FROM fka ORDER BY ctid LIMIT 5;
id | col1 | ctid
-----+------+---------
2 | 2 | (0,1)
3 | 3 | (0,2)
4 | 4 | (0,3)
6 | 6 | (0,4)
7 | 7 | (0,5)
Ameliyattan sonra tablo boyutu 338'den 296 MB'a değiştirildi. Gönderen ctid
sayfasında başlığın fiziksel yer açıklayan sütunun, ayrıca satır eşleştirme boşluk kalmayacak olduğunu görüyoruz id = 5
olurdu.
Tupler yeniden sıralandıkça, dizinler doğru yerlere işaret edecek şekilde yeniden oluşturulmalıdır.
Yani fark VACUUM FULL
sıraları sıralamıyor gibi görünüyor . Bildiğim kadarıyla, iki komutun kullandığı mekanizmada bazı farklar var, ancak pratik açıdan bu ana (sadece?) Fark gibi görünüyor.