2009-04-02 38 views
21

Uygulamada, INSERT, UPDATE & DELETE işlemlerinin toplu yüklemesini gerçekleştirmem gereken bir yardımcı programım var. Bunun etrafında işlem yaratmaya çalışıyorum, böylece bu sistem çağrıldığında ve veri beslendiğinde, veritabanına tamamen ya da hiç eklenmemesi sağlanır.En yüksek işlem boyutu PostgreSQL

Var olan endişe, burada sınır şartları nedir? Tek bir işlemde kaç tane INSERT, UPDATE & DELETE alabilir miyim? İşlem boyutu yapılandırılabilir mi?

Herhangi bir yardım için teşekkür ederiz.

-Teşekkürler

cevap

18

Ben bir işlemde yapılabilir işin azami miktarda olduğunu sanmıyorum. Veriler, tablo dosyalarına eklenmeye devam eder ve sonuçta işlem, işlemeyi gerçekleştirir veya geri alır: AIUI bu sonuç, pg_clog içinde depolanır; eğer geri dönerse, boşluk en sonunda vakumla geri alınacaktır. Bu, devam eden işlem işinin bellekte tutulduğu ve taahhüt süresinde yıkanmış gibi değil.

+14

Bu yalnızca kısmen doğrudur. Her işlemde, işlemin içinde görünürlük ile ilgilenen bir komuta hesabı var. Bu, çok büyük bir işleminiz varsa (milyarlarca komut) sonunda taşacak 32 bitlik bir sayıdır. VACUUM, pg_clog vb. Yalnızca sistemdeki toplam işlem sayısı ile ilgilenir, bunlardan biri içinde gerçekleşmez. –

+0

@MagnusHagander Bu 32 bitlik sayı hala geçerli mi? Bu sayı 64 bit olarak güncellendi mi? – Kuberchaun

+0

Evet, iç komut sayacı hala 32 bit. –

16

Çalıştığım bir proje için 20 milyon INSERT gerçekleştiriyorum. Büyük bir işlemle ve her milyon INSERT için bir işlemle denedim ve performanslar tamamen aynı görünüyor. PostgreSQL 8,3

+1

Sistem yerel mi? Bunu, gecikmenin bir faktör olduğu bir sistemde yapmanın, performansın farklılık göstereceğini düşünüyorum. – user2677679

0

işim Maksimum tutar günlük dosyası boyutuyla sınırlıdır inanıyoruz. Veritabanı hiçbir zaman geri dönüş yapamayacaktır, bu nedenle işlem sırasında tüm günlük alanınızı tüketirseniz, daha fazla yer veya geri alma işlemi verene kadar durur. Bu, tüm veritabanları için genellikle doğrudur.

Güncelleştirmelerinizi birkaç dakikalık bir yürütme süresine sahip yönetilebilir parçalara bölmenizi öneririz. Böylece, daha önce bir sorun varsa (ör. Normalde 1 dakika sonra 10 dakika sonra hala çalışıyorsa) hmmm, birisi bir indeksi düşürdü?)

+8

PostgreSQL için bu doğru değil. Çalışan bir işlem sırasında günlük alanını geri dönüştürebiliriz. Arşiv kaydı yapıyorsanız, arşiv konumunda belli bir alana ihtiyacınız olacaktır, ancak yerel işlem günlüğü için gerekli değildir. (diskteki veriler için gerçek disk alanına ihtiyacınız olacak). –

18

Tek bir işlem, içinde yaklaşık iki milyar komut çalıştırabilir (2^31, eksi IIRC küçük bir yük yığını. Aslında, düşünmeye gel, bu 2 olabilir. 32 - komutanın imzasız olduğunu düşünüyorum).

Bu komutların her biri, elbette birçok satırı değiştirebilir.