PTRACK, Postgres Pro veritabanı için blok seviyesinde yedekleme mekanizmasıdır. PTRACK etkinleştirildiğinde, yedekleme programları, özellikle pg_probackup, değiştirilmiş blokler hakkında bilgi almak için API'sini kullanarak artımlı yedekler oluşturabilir. Yalnızca önceki yedekten bu yana değiştirilmiş blokleri kopyalayarak, yedek oluşturma sürecini önemli ölçüde hızlandırabilir ve yedeklerin boyutunu en aza indirebilirsiniz.

PTRACK, pozitif yönde hatalara izin verecek şekilde tasarlanmıştır, ancak negatif yönde hatalar hariç tutulmuştur: bu, yardımcı bit değişiklikleri hariç, veri dizinindeki tüm değişikliklerin PTRACK haritasında garanti edildiği anlamına gelir, ancak aslında değiştirilmemiş bazı blokler de değiştirilmiş olarak işaretlenebilir.

F.58.1. PTRACK Yapılandırması

Postgres Pro Standard'ı yükledikten sonra aşağıdaki adımları izleyin:

  1. postgresql.conf dosyasındaki shared_preload_libraries parametresine ptrack ekleyin:
    shared_preload_libraries = 'ptrack'
  2. ptrack.map_size parametresi için pozitif bir tam sayı değeri belirleyin.

    Optimal performans için, ptrack.map_size değerini N / 1024 olarak ayarlamanız önerilir, burada N, Postgres Pro kümesinin megabayt cinsinden boyutudur. Bu parametre daha küçük bir değere sahipse, bu, PTRACK haritasında farklı bloklerin bilgilerinin üst üste binme olasılığını artırır, bu da değiştirilmiş bloklerin belirlenmesinde yanlış pozitif sonuçlara yol açar. Bunun sonucunda, artımlı yedek, değiştirilmemiş blokleri de içerebilir, bu da boyutunu biraz artırabilir.

    ptrack.map_size'in daha büyük bir değeri, PTRACK'in çalışmasını olumsuz etkilemez, ancak güvenilirliği sağlamak için PTRACK'in iki ek harita kullandığını unutmayın, bu nedenle toplamda PTRACK için ptrack.map_size * 3 megabayt disk alanı gerekir. Küme boyutu (Postgres Pro N) 1 TB'yi aşsa bile, 1024'ten büyük değerler yalnızca verimlilik ve dolayısıyla yedek boyutlarının optimizasyonu, PTRACK haritasının artırılmasıyla ilişkili maliyetleri aştığında kullanılmalıdır.

  3. wal_level parametresinin değerini kontrol edin. PTRACK kullanırken, bu parametreyi replica veya daha yüksek bir değere ayarlamanız gerekir. Aksi takdirde, acil durum durdurması durumunda değişiklikleri kaybedebilirsiniz, çünkü wal_level minimal olduğunda bazı komutlar bilgi yazmaz ve PTRACK harita dosyaları yalnızca kontrol noktaları sırasında diske yazılır.
  4. Değişikliklerin etkili olması için Postgres Pro Standard örneğini yeniden başlatın ve ardından PTRACK uzantısını oluşturun:
    CREATE EXTENSION ptrack;

    Bu işlem, PTRACK verilerine erişmek için gerekli PTRACK fonksiyonlarını oluşturur. Not: CREATE EXTENSION komutu hakkında daha fazla bilgi için PostgreSQL dokümantasyonuna bakın.

Sunucu başlatıldıktan sonra, PTRACK mekanizması Postgres Pro kümesindeki tüm sayfa değişikliklerini izlemeye başlar ve değiştirilmiş sayfalar için en son LSN değerlerini içeren ptrack.map dosyasını oluşturur.

<strong>Not:</strong> ptrack.map_size parametresi yalnızca sunucu başlatılırken ayarlanabilir. Bu parametre değiştirildiğinde, daha önce oluşturulmuş PTRACK haritası temizlenir ve değiştirilmiş bloklerin izlenmesi yeniden başlar. Değişiklik kaybını önlemek için, farklı bir değer atandıktan hemen sonra tam bir yedekleme yapılması önerilir.

F.58.2. PTRACK Yapılandırma Parametreleri

PTRACK aşağıdaki yapılandırma parametresini destekler:

F.58.2.1. ptrack.map_size

<strong>Tip:</strong> integer

<strong>Varsayılan:</strong> 0

PTRACK harita dosyasının boyutunu ve bunun için ayrılan paylaşılan belleğin miktarını megabayt cinsinden belirler. PTRACK haritasında, PTRACK etkinleştirildiğinden bu yana değiştirilmiş Postgres Pro kümesindeki tüm sayfalar için en yüksek LSN değerleri saklanır. Bu parametre için 1 GB'ı aşan bir değer ayarlanması önerilmez. 0 değeri PTRACK'i devre dışı bırakır ve tüm servis dosyalarını temizler.

ptrack.map_size parametresi yalnızca sunucu başlatılırken ayarlanabilir. Bu parametre değiştirildiğinde, daha önce oluşturulmuş PTRACK haritası temizlenir ve değiştirilmiş bloklerin izlenmesi yeniden başlar. Değişiklik kaybını önlemek için, farklı bir değer atandıktan hemen sonra tam bir yedekleme yapılması önerilir.

<strong>Önemli:</strong> ptrack.map_size parametresi, PTRACK'in çalışması için kritik öneme sahiptir. Bu parametre, PTRACK haritasının boyutunu belirler ve yeterli bellek ayrılmasını sağlar. Küçük değerler, harita taşmasına ve yanlış pozitif sonuçlara yol açabilir, bu da artımlı yedeklerin boyutunu artırabilir.

F.58.3. PTRACK Fonksiyonları

PTRACK, yedekleme programlarının değiştirilmiş blokler hakkında bilgi almasına olanak tanıyan aşağıdaki fonksiyonları sağlar:

F.58.3.1. ptrack_init_lsn

ptrack_init_lsn() returns pg_lsn

PTRACK haritasının son başlatılmasına karşılık gelen LSN'yi döndürür.

<strong>Dönen Değer:</strong> pg_lsn

<strong>Örnek:</strong>

-- PTRACK haritasının başlatılma LSN'sini al
SELECT ptrack_init_lsn();

F.58.3.2. ptrack_get_pagemapset

ptrack_get_pagemapset(startlsn pg_lsn) returns setof record

startlsn parametresinde belirtilen andan itibaren değiştirilmiş veri dosyalarının listesini ve her dosya için değiştirilmiş sayfa sayısını ve bit haritasını döndürür.

<strong>Parametreler:</strong>

  • startlsn — Başlangıç LSN değeri (pg_lsn tipi)

<strong>Dönen Değer:</strong> setof record (path text, pagecount integer, pagemap bytea)

<strong>Açıklama:</strong>

  • <code>path</code> — Veri dosyasının yolu
  • <code>pagecount</code> — Değiştirilmiş sayfa sayısı
  • <code>pagemap</code> — Değiştirilmiş sayfaların bit haritası (bytea tipi)

<strong>Örnek:</strong>

postgres=# SELECT * FROM ptrack_get_pagemapset('0/185C8C0');
        path         | pagecount |                pagemap
---------------------+-----------+----------------------------------------
 base/16384/1255     |         3 | \x001000000005000000000000
 base/16384/2674     |         3 | \x0000000900010000000000000000
 base/16384/2691     |         1 | \x00004000000000000000000000
 base/16384/2608     |         1 | \x000000000000000400000000000000000000
 base/16384/2690     |         1 | \x000400000000000000000000

F.58.3.3. ptrack_get_change_stat

ptrack_get_change_stat(startlsn pg_lsn) returns record

startlsn parametresinde belirtilen andan itibaren değişiklik istatistiklerini (dosya sayısı, değiştirilmiş sayfa sayısı ve megabayt cinsinden toplam boyut) döndürür.

<strong>Parametreler:</strong>

  • startlsn — Başlangıç LSN değeri (pg_lsn tipi)

<strong>Dönen Değer:</strong> record (files integer, pages integer, size numeric)

<strong>Açıklama:</strong>

  • <code>files</code> — Değiştirilmiş dosya sayısı
  • <code>pages</code> — Değiştirilmiş sayfa sayısı
  • <code>size</code> — Değiştirilmiş sayfaların toplam boyutu (megabayt)

<strong>Örnek:</strong>

postgres=# SELECT * FROM ptrack_get_change_stat('0/285C8C8');
 files | pages |        size, MB
-------+-------+------------------------
    20 |    25 | 0.19531250000000000000

F.58.3.4. ptrack_version

ptrack_version() returns text

PTRACK'in sürümünü döndürür.

<strong>Dönen Değer:</strong> text

<strong>Örnek:</strong>

-- PTRACK sürümünü al
SELECT ptrack_version();