PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Chấm dứt truy vấn bị treo (không hoạt động trong giao dịch)

Đây là câu trả lời chung của Postgres và không dành riêng cho heroku

(Câu trả lời đơn giản-ngu ngốc cho câu hỏi này có thể là ... chỉ cần khởi động lại postgresql. Giả sử đó không phải là mong muốn hoặc không phải là một tùy chọn ...)

Tìm PID bằng cách chạy sql này:

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

(Truy vấn có thể cần sửa chữa tùy thuộc vào phiên bản của postgres - cuối cùng, chỉ cần chọn * từ pg_stat_activity). Bạn sẽ tìm thấy pid trong cột đầu tiên (bên trái) và hàng đầu tiên (trên cùng) có thể là truy vấn bạn muốn kết thúc. Tôi giả sử pid là 1234 bên dưới.

Bạn có thể hủy truy vấn thông qua SQL (tức là không có quyền truy cập shell) miễn là truy vấn của bạn hoặc bạn có quyền truy cập cấp cao:

select pg_cancel_backend(1234);

Đó là một yêu cầu "thân thiện" để hủy truy vấn 1234 và may mắn là nó sẽ biến mất sau một thời gian. Cuối cùng, điều này hiệu quả hơn:

select pg_terminate_backend(1234);

Nếu bạn có quyền truy cập shell và quyền root hoặc postgres, bạn cũng có thể thực hiện việc đó từ shell. Để "hủy" người ta có thể làm:

kill -INT 1234

và để "chấm dứt", chỉ cần:

kill 1234

KHÔNG ĐƯỢC:

kill -9 1234

... điều đó thường dẫn đến toàn bộ máy chủ postgres chìm trong biển lửa, sau đó bạn cũng có thể khởi động lại postgres. Postgres khá mạnh mẽ, vì vậy dữ liệu sẽ không bị hỏng, nhưng tôi khuyên bạn không nên sử dụng "kill -9" trong mọi trường hợp :-)

"Giao dịch không hoạt động" kéo dài thường có nghĩa là giao dịch không được kết thúc bằng "cam kết" hoặc "khôi phục", có nghĩa là ứng dụng có lỗi hoặc không được thiết kế phù hợp để hoạt động với cơ sở dữ liệu giao dịch. Nên tránh tình trạng "không hoạt động trong giao dịch" kéo dài, vì nó cũng có thể gây ra các vấn đề lớn về hiệu suất.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ĐẶT HÀNG THEO Bí danh không hoạt động

  2. Sự phát triển của khả năng chịu lỗi trong PostgreSQL

  3. HEX () và UNHEX () của MySQL tương đương trong Postgres?

  4. Làm cách nào để tăng tốc độ đếm hàng trong bảng PostgreSQL?

  5. Làm thế nào để chỉ trả lại thời gian làm việc từ các đặt chỗ trong PostgreSql?