Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Ş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 ileVACUUM 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ılabilecekCREATE INDEX
en 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_read
ve 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ğeremax_wal_size
ulaş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.
İlgili içerik
- PostgreSQL için Azure Veritabanı esnek sunucusunda yüksek CPU kullanımı sorunlarını giderme.
- PostgreSQL için Azure Veritabanı esnek sunucusunda yüksek bellek kullanımı sorunlarını giderme.
- PostgreSQL için Azure Veritabanı esnek sunucusunda yavaş çalışan sorguların sorunlarını giderin ve belirleyin.
- PostgreSQL için Azure Veritabanı esnek sunucusunda sunucu parametreleri.
- PostgreSQL için Azure Veritabanı esnek sunucusunda otomatik vakum ayarlama.