Boşta Sorguda nasıl hata ayıklayabilirim?


13

Her gün veritabanımda çalıştırdığım bir toplu iş sorgusu var. Ancak, boşta kalmış gibi görünüyor ve neler olup bittiğini hata ayıklamak için çok zorlanıyorum.

Sorgu, bir şekilde sorunla ilgili olduğunu tahmin ediyorum aynı anda eklenen bir tabloda bir toplama olduğunu. (Toplama önceki günlerdeki verilerdedir, bu nedenle eklemeler sonuçları etkilememelidir.)

İpuçları

  1. Bunu sqlalchemy kullanarak bir python betiğinin içinde çalıştırıyorum. Ancak, işlem düzeyini otomatik tamamlama olarak ayarladım, bu yüzden bir işlemin içine bir şeyler sarıldığını sanmıyorum. Öte yandan, sql terminalinde el ile çalıştırdığınızda sorgu asmak görmüyorum.

  2. Sorgulama yoluyla pg_stat_activity, sorgu başlangıçta veritabanına olarak gelir state='active'. Belki 15 saniye sonra, durum 'boşta' olarak değişir ve ek olarak, xact_startolarak ayarlanır NULL. Bekleyen bayrak hiçbir zaman true değerine ayarlanmaz.

  3. Ben sqlalchemy için işlem düzeyi özdevinimli öğrenmeden önce, bunun yerine devlet dolanıyorlarmış 'idle in transaction'ziyade 'idle'. Ve bu değişikliği yaptıktan sonra muhtemelen biraz daha az sıkılıyor mu?

Bunun üzerinde olduğumdan daha derine kazmak için donanımlı olmadığımı hissediyorum. Kesin bir cevap vermeden farklı eyaletler ve ilgili postgres içleri hakkında daha fazla bilgi veren herhangi bir geri bildirim çok takdir edilecektir.


2
Durum boştaysa ve beklemiyorsa, sorgu tamamlanır ancak db'ye bağlantı kapatılmaz. işlemde boşta, aynı zamanda sorgunun tamamlandığı, ancak COMMITişlemi sonlandırmak için hiçbir düzenleme yapılmadığı anlamına gelir . Sorununuz
db'den

Ya, bence haklısın. Sorun, Python'un veritabanıyla ilgili bir sorunu değil sorguyu nasıl ele aldığıdır.
Kurt Spindler

Yanıtlar:


6

Burada ayırmanız gereken ilk şey, sorgu , işlem ve bağlantı sözcükleridir .

  1. İpucu: sorgunuz yürütülür - etkin durumdadır. Bundan sonra sorgu sona erer ancak bağlantı açık kalır - boşta durumu. Hiçbir işlem (taahhüt edilmiştir) yani xact_startboştur. Bu nedenle, sorgu başarılı olduktan sonra bağlantıyı kapatmanız gerekir.

  2. İpucu: Otomatik tamamlama yapılmadan önce sorgu işlemin ortasında bırakıldı, bu yüzden önce commitve sonra yapmanız gerekir close connection.

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.