Làm cách nào để xác định xem có [kết nối nhàn rỗi với] giao dịch không được cam kết trong PostgreSQL không?


24

Theo một nhận xét về câu hỏi này tôi đã hỏi về các kết nối nhàn rỗi trong PostgreSQL 9.2 , một số giao dịch không được cam kết (có thể liên quan đến một số kết nối nhàn rỗi) có thể gây ra một số vấn đề về hiệu suất.

Cách tốt để xác định xem có giao dịch nào không được cam kết không (điểm thưởng nếu có cách nào để biết liệu kết nối họ đang ở có nhàn rỗi hay không)?

Cảm ơn rất nhiều!


2
Có một cái nhìn tại pgtop. Bạn cũng có thể săn các hàng hiển thị "không hoạt động trong giao dịch" trong đầu ra của ps aux.
dezso

@dezso - Có pgtopvẻ thú vị; Có tương đương với Windows không?
Max Vernon

@MaxVernon có một số gợi ý rằng nó được cho là hoạt động trên Windows nhưng chưa thấy ví dụ cụ thể nào. Nhưng nó vẫn là một dự án Perl đơn giản (tương đối), vì vậy ... Và dù sao, nó hoạt động trên các khung nhìn pg_stat *.
dezso

Câu trả lời:


16

Nếu bạn muốn xem bạn có bao nhiêu kết nối nhàn rỗi có giao dịch mở, bạn có thể sử dụng:

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

Điều này sẽ cung cấp một danh sách các kết nối mở đang ở trạng thái nhàn rỗi, cũng có một giao dịch mở.

Phải nói rằng, tôi không thể tạo lại một kết nối mở trong trạng thái nhàn rỗi có giao dịch mở. Có lẽ ai đó khác có thể cung cấp chi tiết về cách làm điều đó.


3
Coi chừng statecột chỉ có trong 9.2. Và đối với tôi có vẻ như trạng thái thích hợp là 'nhàn rỗi trong giao dịch'.
dezso

1
Tôi đồng ý với dezso.
franc

1
state = 'idle'không không chỉ ra một giao dịch mở.
a_horse_with_no_name

2
I cannot recreate an open connection in the idle state that has an open transaction. Mở hai kết nối tới cơ sở dữ liệu và gõ "bắt đầu;" trong một. Trong cái khác chạy truy vấn trên, và bạn sẽ có một idle in transaction.
X-Istence
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.