PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Hentikan kueri yang digantung (menganggur dalam transaksi)

Ini adalah jawaban Postgres umum, dan tidak khusus untuk heroku

(Jawaban bodoh sederhana untuk pertanyaan ini mungkin ... restart saja postgresql. Dengan asumsi itu bukan pilihan yang diinginkan atau bukan ...)

Temukan PID dengan menjalankan sql ini:

SELECT pid , query, * from pg_stat_activity
  WHERE state != 'idle' ORDER BY xact_start;

(Kueri mungkin perlu diperbaiki tergantung pada versi postgres - akhirnya, cukup pilih * dari pg_stat_activity). Anda akan menemukan pid di kolom pertama (kiri), dan baris pertama (atas) kemungkinan adalah kueri yang ingin Anda hentikan. Saya akan menganggap pid adalah 1234 di bawah ini.

Anda dapat membatalkan kueri melalui SQL (yaitu tanpa akses shell) selama itu milik Anda atau Anda memiliki akses pengguna super:

select pg_cancel_backend(1234);

Itu adalah permintaan "ramah" untuk membatalkan kueri 1234, dan dengan sedikit keberuntungan itu akan hilang setelah beberapa saat. Akhirnya, ini lebih efisien:

select pg_terminate_backend(1234);

Jika Anda memiliki akses shell dan izin root atau postgres, Anda juga dapat melakukannya dari shell. Untuk "membatalkan" seseorang dapat melakukan:

kill -INT 1234

dan untuk "mengakhiri", cukup:

kill 1234

JANGAN:

kill -9 1234

... yang sering mengakibatkan seluruh server postgres terbakar, maka Anda sebaiknya memulai ulang postgres. Postgres cukup kuat, sehingga data tidak akan rusak, tetapi saya sarankan untuk tidak menggunakan "kill -9" dalam hal apa pun :-)

"Diam dalam transaksi" yang bertahan lama sering kali berarti bahwa transaksi tidak dihentikan dengan "komit" atau "kembalikan", yang berarti bahwa aplikasi tersebut bermasalah atau tidak dirancang dengan benar untuk bekerja dengan basis data transaksional. "Diam dalam transaksi" yang tahan lama harus dihindari, karena juga dapat menyebabkan masalah kinerja yang besar.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wadah Docker untuk Postgres 9.1 tidak mengekspos port 5432 ke host

  2. Bagaimana cara membersihkan dan menginstal ulang postgresql secara menyeluruh di ubuntu?

  3. Menyortir nilai nol setelah yang lainnya, kecuali spesial

  4. Dua titik dua (::) notasi dalam SQL

  5. Bagaimana pgBouncer membantu mempercepat Django