Aracılığıyla paylaş


PostgreSQL için Azure Veritabanı esnek sunucusuna toplu veri yüklemek için en iyi yöntemler

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

Bu makalede, hem boş veritabanlarındaki ilk veri yükleri hem de artımlı veri yükleri için en iyi yöntemlerin yanı sıra esnek PostgreSQL için Azure Veritabanı sunucuda verileri toplu olarak yüklemeye yönelik çeşitli yöntemler ele alınmaktadır.

Yükleme yöntemleri

Aşağıdaki veri yükleme yöntemleri, en çok zaman alandan en az zaman alana kadar sıralanmış şekilde düzenlenmiştir:

  • Tek kayıtlı INSERT bir komut çalıştırın.
  • İşleme başına 100 ila 1.000 satıra toplu iş. İşleme başına birden çok kaydı sarmak için bir işlem bloğu kullanabilirsiniz.
  • Birden çok satır değeriyle çalıştırın INSERT .
  • COPY komutunu çalıştırın.

Veritabanına veri yüklemek için tercih edilen yöntem komutudur COPY . COPY Komut imkansız değilse, batch INSERT bir sonraki en iyi yöntemdir. Bir komutla COPY çoklu iş parçacığı oluşturma, verileri toplu olarak yüklemek için idealdir.

Toplu verileri karşıya yükleme adımları

Esnek PostgreSQL için Azure Veritabanı sunucuya toplu olarak veri yükleme adımları aşağıdadır.

1. Adım: Verilerinizi hazırlama

Verilerinizin veritabanı için temiz ve düzgün biçimlendirildiğinden emin olun.

2. Adım: Yükleme yöntemini seçin

Verilerinizin boyutuna ve karmaşıklığına göre uygun yükleme yöntemini seçin.

3. Adım: Yükleme yöntemini yürütme

Verilerinizi veritabanına yüklemek için seçilen yükleme yöntemini çalıştırın.

4. Adım: Verileri doğrulama

Karşıya yükledikten sonra verilerin veritabanına doğru şekilde yüklendiğini doğrulayın.

İlk veri yüklemeleri için en iyi yöntemler

İlk veri yüklemeleri için en iyi yöntemler aşağıdadır.

Dizinleri bırakma

İlk veri yüklemesini gerçekleştirmeden önce, tablolardaki tüm dizinleri bırakmanızı öneririz. Veriler yüklendikten sonra dizinleri oluşturmak her zaman daha verimlidir.

Bırakma kısıtlamaları

Ana bırakma kısıtlamaları burada açıklanmıştır:

  • Benzersiz anahtar kısıtlamaları

Güçlü performans elde etmek için, ilk veri yükünden önce benzersiz anahtar kısıtlamalarını bırakmanızı ve veri yükü tamamlandıktan sonra bunları yeniden oluşturmanızı öneririz. Ancak benzersiz anahtar kısıtlamalarının bırakıldığı durumlarda yinelenen verilere karşı korumalar iptal edilir.

  • Yabancı anahtar kısıtlamaları

Yabancı anahtar kısıtlamalarını ilk veri yükünden önce bırakmanızı ve veri yükü tamamlandıktan sonra bunları yeniden oluşturmanızı öneririz.

parametresini session_replication_role olarak replica değiştirmek, tüm yabancı anahtar denetimlerini de devre dışı bırakır. Ancak, değişiklik düzgün şekilde kullanılmazsa verileri tutarsız bırakabilir.

Kayıtlı olmayan tablolar

İlk veri yüklerinde kullanmadan önce, kaydedilmemiş tabloların artılarını ve dezavantajlarını göz önünde bulundurun.

Kaydedilmemiş tabloların kullanılması veri yükleme sürecini hızlandırır. Yerleştirilmemiş tablolara yazılan veriler önceden yazma günlüğüne yazılmaz.

Kaydedilmemiş tabloları kullanmanın dezavantajları şunlardır:

  • Kilitlenmeye karşı güvenli değiller. Kilitlenme veya belirsiz kapatma sonrasında, kaydedilmemiş bir tablo otomatik olarak kesilir.
  • Kaydedilmemiş tablolardaki veriler hazır bekleyen sunuculara çoğaltılamaz.

Unlogged tablosu oluşturmak veya var olan bir tabloyu unlogged tablo olarak değiştirmek için aşağıdaki seçenekleri kullanın:

  • Aşağıdaki söz dizimini kullanarak yeni bir kaydedilmemiş tablo oluşturun:

    CREATE UNLOGGED TABLE <tablename>;
    
  • Aşağıdaki söz dizimini kullanarak, var olan bir günlüğe kaydedilen tabloyu kaydedilmemiş bir tabloya dönüştürün:

    ALTER TABLE <tablename> SET UNLOGGED;
    

Sunucu parametresi ayarlama

  • auto vacuum': It's best to turn off ilk veri yükü sırasında otomatik vakumlama. İlk yükleme tamamlandıktan sonra, veritabanındaki tüm tablolarda bir el ile VACUUM ANALYZE çalıştırmanızı ve ardından 'yi açmanızı auto vacuumöneririz.

Not

Buradaki önerileri yalnızca yeterli bellek ve disk alanı varsa izleyin.

  • maintenance_work_mem: PostgreSQL için Azure Veritabanı esnek bir sunucu örneğinde en fazla 2 gigabayt (GB) olarak ayarlanabilir. maintenance_work_mem otomatik vakum, dizin ve yabancı anahtar oluşturma işlemini hızlandırmaya yardımcı olur.

  • checkpoint_timeout: PostgreSQL için Azure Veritabanı esnek bir sunucu örneğindecheckpoint_timeout, varsayılan ayar olan 5 dakika olan değer en fazla 24 saate yükseltilebilir. PostgreSQL için Azure Veritabanı esnek sunucu örneğine ilk kez veri yüklemeden önce değeri 1 saate yükseltmenizi öneririz.

  • checkpoint_completion_target: 0,9 değerini öneririz.

  • max_wal_size: İlk veri yükünü gerçekleştirirken 64 GB olan PostgreSQL için Azure Veritabanı esnek sunucu örneğinde izin verilen en yüksek değere ayarlanabilir.

  • wal_compression: Bu açılabilir. Bu parametrenin etkinleştirilmesi, önceden yazma günlüğü (WAL) günlüğü sırasında sıkıştırma ve WAL yeniden yürütme sırasında sıkıştırma için fazladan CPU maliyetlerine neden olabilir.

Öneriler

PostgreSQL için Azure Veritabanı esnek sunucu örneğinde ilk veri yüküne başlamadan önce şunları yapmanızı öneririz:

  • Sunucuda yüksek kullanılabilirliği devre dışı bırakın. Birincilde ilk yükleme tamamlandıktan sonra etkinleştirebilirsiniz.
  • İlk veri yükü tamamlandıktan sonra okuma amaçlı çoğaltmalar oluşturun.
  • Günlüğe kaydetmeyi en az düzeyde yapın veya ilk veri yüklemeleri sırasında tümünü birlikte devre dışı bırakın (örneğin pgaudit, pg_stat_statements, sorgu deposunu devre dışı bırakın).

Dizinleri yeniden oluşturma ve kısıtlamalar ekleme

dizinleri ve kısıtlamaları ilk yüklemeden önce bıraktığınızı varsayarsak, dizinler oluşturmak ve kısıtlamalar eklemek için içindeki maintenance_work_mem yüksek değerleri (daha önce belirtildiği gibi) kullanmanızı öneririz. Ayrıca, PostgreSQL sürüm 11'den başlayarak, ilk veri yükünden sonra daha hızlı paralel dizin oluşturmak için aşağıdaki parametreler değiştirilebilir:

  • max_parallel_workers: Sistemin paralel sorgular için destekleyebileceğiniz en fazla çalışan sayısını ayarlar.

  • max_parallel_maintenance_workers: içinde kullanılabilecek CREATE INDEXen fazla çalışan işlemi sayısını denetler.

Ayrıca, önerilen ayarları oturum düzeyinde yaparak dizinleri oluşturabilirsiniz. Bunun nasıl yapıldığını gösteren bir örnek aşağıda verilmiştir:

SET maintenance_work_mem = '2GB';
SET max_parallel_workers = 16;
SET max_parallel_maintenance_workers = 8;
CREATE INDEX test_index ON test_table (test_column);

Artımlı veri yüklemeleri için en iyi yöntemler

Artımlı veri yükleri için en iyi yöntemler burada açıklanmıştır:

Bölüm tabloları

Her zaman büyük tabloları bölümlemenizi öneririz. Özellikle artımlı yüklemeler sırasında bölümlemenin bazı avantajları şunlardır:

  • Yeni deltaları temel alan yeni bölümler oluşturmak, tabloya yeni veri eklemeyi verimli hale getirir.
  • Tabloların bakımı daha kolay hale gelir. Büyük tablolarda silme işleminin zaman alıcı olmasını önlemek için bir bölümü artımlı veri yükü sırasında bırakabilirsiniz.
  • Otomatik vakum yalnızca artımlı yüklemeler sırasında değiştirilen veya eklenen bölümlerde tetiklenebilir ve bu da tablodaki istatistiklerin korunmasını kolaylaştırır.

Güncel tablo istatistiklerini koruma

Tablo istatistiklerini izlemek ve korumak, veritabanındaki sorgu performansı için önemlidir. Bu, artımlı yüklere sahip olduğunuz senaryoları da içerir. PostgreSQL, ölü tanımlama listelerini temizlemek ve istatistikleri güncel tutmak için tabloları analiz etmek için autovacuum daemon işlemini kullanır. Daha fazla bilgi için bkz . Otomatik vakum izleme ve ayarlama.

Yabancı anahtar kısıtlamaları üzerinde dizin oluşturma

Alt tablolarda yabancı anahtarlar üzerinde dizin oluşturmak aşağıdaki senaryolarda yararlı olabilir:

  • Üst tablodaki veri güncelleştirmeleri veya silme işlemleri. Üst tablodaki veriler güncelleştirildiğinde veya silindiğinde, alt tabloda aramalar gerçekleştirilir. Aramaları daha hızlı hale getirmek için alt tablodaki yabancı anahtarları dizine ekleyebilirsiniz.
  • Anahtar sütunlarında birleştiren üst ve alt tabloları görebileceğiniz sorgular.

Kullanılmayan dizinleri tanımlama

Veritabanında kullanılmayan dizinleri belirleyin ve bırakın. Dizinler, veri yüklerinde ek yük oluşturur. Tablodaki dizin sayısı ne kadar az olursa, veri alımı sırasındaki performans o kadar iyi olur.

Kullanılmayan dizinleri iki şekilde tanımlayabilirsiniz: Sorgu Deposu ve dizin kullanım sorgusu.

Sorgu Deposu

Sorgu Deposu özelliği, veritabanındaki sorgu kullanım desenlerine göre bırakılabilir dizinleri tanımlamaya yardımcı olur. Adım adım yönergeler için bkz . Sorgu Deposu.

Sunucuda Sorgu Deposu'nu etkinleştirdikten sonra, azure_sys veritabanına bağlanarak bırakılabilir dizinleri belirlemek için aşağıdaki sorguyu kullanabilirsiniz.

SELECT * FROM IntelligentPerformance.DropIndexRecommendations;

Dizin kullanımı

Kullanılmayan dizinleri tanımlamak için aşağıdaki sorguyu da kullanabilirsiniz:

SELECT
    t.schemaname,
    t.tablename,
    c.reltuples::bigint                            AS num_rows,
 pg_size_pretty(pg_relation_size(c.oid))        AS table_size,
    psai.indexrelname                              AS index_name,
 pg_size_pretty(pg_relation_size(i.indexrelid)) AS index_size,
    CASE WHEN i.indisunique THEN 'Y' ELSE 'N' END AS "unique",
    psai.idx_scan                                  AS number_of_scans,
    psai.idx_tup_read                              AS tuples_read,
    psai.idx_tup_fetch                             AS tuples_fetched
FROM
 pg_tables t
    LEFT JOIN pg_class c ON t.tablename = c.relname
    LEFT JOIN pg_index i ON c.oid = i.indrelid
    LEFT JOIN pg_stat_all_indexes psai ON i.indexrelid = psai.indexrelid
WHERE
    t.schemaname NOT IN ('pg_catalog', 'information_schema')
ORDER BY 1, 2;

number_of_scans, tuples_readve tuples_fetched sütunları, kullanılmayan bir dizin olarak sıfır noktalarının dizin usage.number_of_scans sütun değerini gösterir.

Sunucu parametresi ayarlama

Not

Aşağıdaki parametrelerdeki önerileri yalnızca yeterli bellek ve disk alanı varsa izleyin.

  • maintenance_work_mem: Bu parametre, PostgreSQL için Azure Veritabanı esnek sunucu örneğinde en fazla 2 GB olarak ayarlanabilir. maintenance_work_mem dizin oluşturmayı ve yabancı anahtar eklemelerini hızlandırmaya yardımcı olur.

  • checkpoint_timeout: PostgreSQL için Azure Veritabanı esnek sunucu örneğindecheckpoint_timeout, varsayılan ayar olan 5 dakika olan değer 10 veya 15 dakikaya yükseltilebilir. checkpoint_timeout 15 dakika gibi daha önemli bir değere yükseltmek G/Ç yükünü azaltabilir, ancak bunun dezavantajı, kilitlenme durumunda kurtarmanın daha uzun sürmesidir. Değişikliği yapmanızdan önce dikkatli bir şekilde göz önünde bulundurmanızı öneririz.

  • checkpoint_completion_target: 0,9 değerini öneririz.

  • max_wal_size: Bu değer SKU, depolama ve iş yüküne bağlıdır. Aşağıdaki örnekte için doğru değere max_wal_sizeulaşmanın bir yolu gösterilmektedir.

Yoğun iş saatlerinde aşağıdakileri yaparak bir değere ulaşın:

a. Aşağıdaki sorguyu çalıştırarak geçerli WAL günlük dizisi numarasını (LSN) alın:

SELECT pg_current_wal_lsn ();

b. Saniye sayısını bekleyin checkpoint_timeout . Aşağıdaki sorguyu çalıştırarak geçerli WAL LSN'yi alın:

SELECT pg_current_wal_lsn ();

ç. GB'deki farkı denetlemek için iki sonucu kullanın:

SELECT round (pg_wal_lsn_diff('LSN value when running the second time','LSN value when run the first time')/1024/1024/1024,2) WAL_CHANGE_GB;
  • wal_compression: Bu açılabilir. Bu parametrenin etkinleştirilmesi, WAL günlüğü sırasında sıkıştırma ve WAL yeniden yürütme sırasında sıkıştırmayı açma için ek CPU maliyetine neden olabilir.