TEMPORARY TABLE iki şekilde silinebilir
1. DELETE ALL
2. TRUNCATE
DELETE ALL zaten iyi bir seçenek değil.
TRUNCATE için açıklama şöyle.
TRUNCATE simply creates a new file on disk and does an UPDATE of the pg_class table.
Yani
1. gp_class sitem tablosunun dolmasına sebep oluyor
2. Disk I/O yapılması gerekiyor
Çözüm 1
Açıklaması şöyle.
In Linux, there is one approach that can significantly reduce disk usage of temporary tables. It is to allocate a separate RAM disk for temporary tables.
Bunun için temp_tablespaces seçeneği kullanılıyor
Örnek
Şöyle yaparız
mkdir /mnt/dbtempchmod 700 /mnt/dbtempchown postgres:postgres /mnt/dbtemp
Daha sonra SQL ile şöyle yaparız. Burada belirtilen dizinin kullanana bir tablespace yaratılıyor. /mnt/dbtemp altında örneğin /mnt/dbtemp/PG_13_202007201/ diye yeni bir dizin yaratılıyor
CREATE TABLESPACE temp LOCATION '/mnt/dbtemp';
Sonra şöyle yaparız. Böylece örneğin /mnt/dbtemp/PG_13_202007201/936082 diye yeni bir dizin yaratılıyor
CREATE TEMPORARY TABLE mytemptable (key0 int8) TABLESPACE temp;
/etc/fstab dosyasına şöyle yaparız. Bir dahaki tekrar başlatmada bu dizin otomatik yüklenir.
tmpfs /mnt/dbtemp/PG_13_202007201/936082 tmpfs \ rw,nodev,nosuid,noatime,nodiratime,size=1G 0 0
Ama bir dahaki başlatmayı beklememek için dizini RAM'e yükleriz
mount /mnt/dbtemp/PG_13_202007201/936082
Sonra postgresql.conf dosyasına şöyle yaparız
temp_tablespaces = 'temp'
ve uygulamak için şöyle yaparız
SELECT pg_reload_conf();
Hiç yorum yok:
Yorum Gönder