Mantıksal kod çözme

ŞUNLAR IÇIN GEÇERLIDIR: PostgreSQL için Azure Veritabanı - Tek Sunucu

Önemli

PostgreSQL için Azure Veritabanı - Tek Sunucu kullanımdan kaldırma yolundadır. PostgreSQL için Azure Veritabanı - Esnek Sunucu'ya yükseltmenizi kesinlikle öneririz. PostgreSQL için Azure Veritabanı - Esnek Sunucu'ya geçiş hakkında daha fazla bilgi için bkz. PostgreSQL için Azure Veritabanı Tek Sunucuya ne oluyor?.

PostgreSQL'de mantıksal kod çözme, veri değişikliklerini dış tüketicilere akışla aktarmanıza olanak tanır. Mantıksal kod çözme popüler olarak olay akışı ve değişiklik veri yakalama senaryoları için kullanılır.

Mantıksal kod çözme, Postgres’nin önceden yazılan günlüğünü (WAL) okunabilir bir biçime dönüştürmek için çıkış eklentisi kullanır. PostgreSQL için Azure Veritabanı wal2json, test_decoding ve pgoutput çıkış eklentileri sağlar. pgoutput, PostgreSQL sürüm 10 ve sonrasında PostgreSQL tarafından kullanılabilir hale getiriliyor.

Postgres mantıksal kod çözmenin nasıl çalıştığına genel bir bakış için blogumuzu ziyaret edin.

Not

PostgreSQL yayını/aboneliği kullanılarak mantıksal çoğaltma, PostgreSQL için Azure Veritabanı - Tek Sunucu ile desteklenmez.

Sunucunuzu ayarlama

Mantıksal kod çözme ve okuma çoğaltmalarının her ikisi de bilgi için Postgres önceden yazma günlüğüne (WAL) bağlıdır. Bu iki özelliğin Postgres'ten farklı günlüğe kaydetme düzeyleri gerekir. Mantıksal kod çözme, okuma amaçlı çoğaltmalardan daha yüksek bir günlük düzeyine ihtiyaç duyar.

Doğru günlük düzeyini yapılandırmak için Azure çoğaltma desteği parametresini kullanın. Azure çoğaltma desteğinin üç ayar seçeneği vardır:

  • Kapalı - WAL'da en az bilgiyi yerleştirir. Bu ayar çoğu PostgreSQL için Azure Veritabanı sunucusunda kullanılamaz.
  • Çoğaltma - Kapalı'dan daha ayrıntılı. Bu, okuma amaçlı çoğaltmaların çalışması için gereken en düşük günlük düzeyidir. Bu ayar çoğu sunucuda varsayılan ayardır.
  • Mantıksal - Çoğaltmadan daha ayrıntılı. Bu, mantıksal kod çözmenin çalışması için en düşük günlük düzeyidir. Okuma amaçlı çoğaltmalar da bu ayarda çalışır.

Azure CLI’yı kullanma

  1. azure.replication_support olarak logicalayarlayın.

    az postgres server configuration set --resource-group mygroup --server-name myserver --name azure.replication_support --value logical
    
  2. Değişikliği uygulamak için sunucuyu yeniden başlatın.

    az postgres server restart --resource-group mygroup --name myserver
    
  3. Postgres 9.5 veya 9.6 çalıştırıyorsanız ve genel ağ erişimini kullanıyorsanız, mantıksal çoğaltmayı çalıştıracağınız istemcinin genel IP adresini eklemek için güvenlik duvarı kuralını ekleyin. Güvenlik duvarı kuralı adı _replrule içermelidir. Örneğin, test_replrule. Sunucuda yeni bir güvenlik duvarı kuralı oluşturmak için az postgres server firewall-rule create komutunu çalıştırın.

Azure portalı kullanarak

  1. Azure çoğaltma desteğini mantıksal olarak ayarlayın. Kaydet'i seçin.

    PostgreSQL için Azure Veritabanı - Çoğaltma - Azure çoğaltma desteği

  2. Evet'i seçerek değişikliği uygulamak için sunucuyu yeniden başlatın.

    PostgreSQL için Azure Veritabanı - Çoğaltma - Yeniden başlatmayı onayla

  3. Postgres 9.5 veya 9.6 çalıştırıyorsanız ve genel ağ erişimini kullanıyorsanız, mantıksal çoğaltmayı çalıştıracağınız istemcinin genel IP adresini eklemek için güvenlik duvarı kuralını ekleyin. Güvenlik duvarı kuralı adı _replrule içermelidir. Örneğin, test_replrule. Ardından Kaydet'i seçin.

    PostgreSQL için Azure Veritabanı - Çoğaltma - Güvenlik duvarı kuralı ekleme

Mantıksal kod çözmeyi başlatma

Mantıksal kod çözme, akış protokolü veya SQL arabirimi aracılığıyla kullanılabilir. Her iki yöntem de çoğaltma yuvalarını kullanır. Yuva, tek bir veritabanındaki değişiklik akışını temsil eder.

Çoğaltma yuvası kullanmak için Postgres'in çoğaltma ayrıcalıkları gerekir. Şu anda çoğaltma ayrıcalığı yalnızca sunucunun yönetici kullanıcısı tarafından kullanılabilir.

Akış protokolü

Akış protokollerini kullanarak değişiklikleri kullanmak genellikle tercih edilir. Kendi tüketicinizi / bağlayıcınızı oluşturabilir veya Debezium gibi bir araç kullanabilirsiniz.

pg_recvlogical ile akış protokolünü kullanan bir örnek için wal2json belgelerini ziyaret edin.

SQL arabirimi

Aşağıdaki örnekte wal2json eklentisiyle SQL arabirimini kullanıyoruz.

  1. Yuva oluşturun.

    SELECT * FROM pg_create_logical_replication_slot('test_slot', 'wal2json');
    
  2. SQL komutlarını verme. Örneğin:

    CREATE TABLE a_table (
       id varchar(40) NOT NULL,
       item varchar(40),
       PRIMARY KEY (id)
    );
    
    INSERT INTO a_table (id, item) VALUES ('id1', 'item1');
    DELETE FROM a_table WHERE id='id1';
    
  3. Değişiklikleri kullanma.

    SELECT data FROM pg_logical_slot_get_changes('test_slot', NULL, NULL, 'pretty-print', '1');
    

    Çıkış şöyle görünür:

    {
          "change": [
          ]
    }
    {
          "change": [
                   {
                            "kind": "insert",
                            "schema": "public",
                            "table": "a_table",
                            "columnnames": ["id", "item"],
                            "columntypes": ["character varying(40)", "character varying(40)"],
                            "columnvalues": ["id1", "item1"]
                   }
          ]
    }
    {
          "change": [
                   {
                            "kind": "delete",
                            "schema": "public",
                            "table": "a_table",
                            "oldkeys": {
                                  "keynames": ["id"],
                                  "keytypes": ["character varying(40)"],
                                  "keyvalues": ["id1"]
                            }
                   }
          ]
    }
    
  4. Kullanmayı bitirdikten sonra yuvayı bırakın.

    SELECT pg_drop_replication_slot('test_slot'); 
    

İzleme yuvaları

Mantıksal kod çözmeyi izlemeniz gerekir. Kullanılmayan çoğaltma yuvaları bırakılmalıdır. Yuvalar, değişiklikler tüketici tarafından okunana kadar Postgres WAL günlüklerini ve ilgili sistem kataloglarını tutar. Tüketiciniz başarısız olursa veya düzgün yapılandırılmamışsa, tamamlanmamış günlükler birikerek depolama alanınızı doldurur. Ayrıca, tamamlanmamış günlükler işlem kimliği kaydırma riskini artırır. Her iki durum da sunucunun kullanılamaz duruma gelmesine neden olabilir. Bu nedenle, mantıksal çoğaltma yuvalarının sürekli olarak tüketilmiş olması kritik önem taşır. Mantıksal çoğaltma yuvası artık kullanılmıyorsa, hemen bırakın.

pg_replication_slots görünümündeki 'etkin' sütunu, yuvaya bağlı bir tüketici olup olmadığını gösterir.

SELECT * FROM pg_replication_slots;

Kullanılan Depolama uyarıları ve değerler normal eşikleri aştığında sizi bilgilendirmek için çoğaltmalar arasında en fazla gecikme süresi ölçümlerini ayarlayın.

Önemli

Kullanılmayan çoğaltma yuvalarını bırakmanız gerekir. Bunun başarısız olması sunucunun kullanılamamasına neden olabilir.

Yuvayı bırakma

Çoğaltma yuvasını etkin bir şekilde tüketmiyorsanız bırakmanız gerekir.

SQL kullanarak adlı test_slot bir çoğaltma yuvasını bırakmak için:

SELECT pg_drop_replication_slot('test_slot');

Önemli

Mantıksal kod çözmeyi kullanmayı durdurursanız, azure.replication_support veya offolarak replica değiştirin. tarafından logical tutulan WAL ayrıntıları daha ayrıntılıdır ve mantıksal kod çözme kullanımda olmadığında devre dışı bırakılmalıdır.

Sonraki adımlar