3 Aralık 2023 Pazar

CREATE TEMPORARY TABLE

Giriş
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/dbtemp
chmod 700 /mnt/dbtemp
chown 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