PostgreSQL'de [boşta bağlantılarla] tamamlanmamış işlemlerin olup olmadığı nasıl belirlenir?


24

PostgreSQL 9.2'deki rölanti bağlantıları hakkında sorduğum bir soruya göre , bazı tamamlanmamış işlemler (muhtemelen bu rölanti bağlantılardan bazıları ile ilgilidir) bazı performans sorunlarına neden olabilir.

Taahhüt edilmemiş işlemlerin olup olmadığını belirlemenin iyi bir yolu nedir (bağlı oldukları bağlantının boş olup olmadığını bilmenin bir yolu varsa bonus puan)?

Çok teşekkürler!


2
Bir göz atın pgtop. Ayrıca çıktıda "işlemde boşta" yazan satırları avlayabilirsiniz ps aux.
dezso

@dezso - pgtopilginç görünüyor; Windows için bir eşdeğeri var mı?
Max Vernon

@MaxVernon, Windows'ta çalışması gerektiği ancak herhangi bir somut örnek görmediğine dair bazı ipuçları var. Ama yine de (nispeten) basit bir Perl projesi, yani ... Ve yine de, pg_stat * görüşleri üzerinde çalışıyor.
dezso

Yanıtlar:


16

Açık bir işlemi olan ne kadar boşta bağlantınız olduğunu görmek istiyorsanız, şunları kullanabilirsiniz:

select * 
from pg_stat_activity
where (state = 'idle in transaction')
    and xact_start is not null;

Bu, boş durumda olan ve aynı zamanda açık bir işlemi olan açık bağlantıların bir listesini sağlayacaktır.

Bunu söyledikten sonra, boş bir işlemi olan boş durumda açık bir bağlantıyı yeniden oluşturamam. Belki başka biri bunun nasıl yapılacağı hakkında ayrıntılı bilgi verebilir.


3
stateSütunun yalnızca 9.2'de bulunduğuna dikkat edin . Ve benim için uygun durum 'işlemde boşta' gibi görünüyor.
dezso

1
Dezso ile aynı fikirdeyim.
franklar

1
state = 'idle'yok değil açık bir işlemi gösterir.
a_horse_with_no_name

2
I cannot recreate an open connection in the idle state that has an open transaction. Veritabanına iki bağlantı açın ve "begin;" yazın. birinde. Diğer çalıştırmada yukarıdaki sorguyu çalıştırırsanız, sizde bir tane olacaktır idle in transaction.
X-Istence,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.