2010-08-25 35 views
12

Đôi khi tôi thấy các thông báo nhưID đối tượng Postgresql và các bộ dữ liệu

Quy trình 12990 đợi ExclusiveLock trên tuple (889,66) quan hệ 17720 của cơ sở dữ liệu 17607; bị chặn bởi quá trình 12992.

Vì vậy, tất nhiên phần 'quá trình' khá rõ ràng, nhưng tôi không biết cách tương quan giữa ID quan hệ và tên có thể đọc được của con người. Tôi cũng không thực sự biết những gì để làm cho bit tuple.

Bất kỳ ai biết cách đọc các thư này và cách thu thập dữ liệu hữu ích từ chúng?

Cảm ơn!

Trả lời

13

Bạn có thể tra cứu bảng hệ thống này: sở thích ở đây là pg_class.

Làm một truy vấn như

SELECT OID, relname FROM pg_class 
oid |    relname    
-------+------------------------------------ 
    1247 | pg_type 
11550 | user_mapping_options 
11554 | user_mappings 
11494 | triggered_update_columns 
11497 | triggers 

hay đúng hơn

SELECT relname FROM pg_class WHERE OID=17720 

có thể làm sáng tỏ các ổ khóa.

+0

Cảm ơn! Tôi đã tìm ra id để ánh xạ quan hệ, nhưng vẫn không chắc chắn phải làm gì với các bộ dữ liệu ... – user431221

+0

Thực ra, tôi nên làm rõ - không chắc cách đọc ký hiệu tuple (x, y) và cách tôi có thể sử dụng nó để hiểu những gì gây ra bế tắc – user431221

+0

OK, một bit dữ liệu khác được tìm thấy - các số này là các ID giao dịch đã chèn hoặc xóa tuple/hàng đó. Có cách nào tôi có thể có được ý tưởng về những giao dịch SQL nào đang chạy không? – user431221

17

"Quan hệ" là một bảng và một "tuple" là một hàng.

Dưới đây là a nice shortcut để nhận được tên của bảng từ id bảng (bạn cũng có thể truy vấn bảng pg_class):

=> select 17720::regclass; 
┌──────────┐ 
│ regclass │ 
├──────────┤ 
│ my_table │ 
└──────────┘ 
(1 row) 

Bây giờ làm thế nào về hàng? "Tuple bit" là một tuple identifier và mỗi bảng trong cơ sở dữ liệu của bạn có một số system column đặc biệt được gọi là ctid, nơi các số nhận dạng đó được lưu trữ. Bây giờ chúng ta đã biết bảng được đề cập, chúng ta có thể làm:

=> select * from my_table where ctid='(889,66)'; 

Tuy nhiên! Từ tài liệu cột hệ thống (nhấn mạnh thêm): "[A] mặc dù ctid có thể được sử dụng để định vị phiên bản hàng rất nhanh, ctid của một hàng sẽ thay đổi nếu nó được cập nhật hoặc di chuyển bằng VACUUM FULL. một định danh hàng dài hạn. " Nói cách khác, nếu bạn đủ nhanh, bạn có thể tin tưởng rằng hàng được trả lại là hàng liên quan đến bế tắc, nhưng thông tin đó sẽ không có sẵn mãi mãi.

+0

cảm ơn vì điều đó - hữu ích và rõ ràng! – zeroDivisible

Các vấn đề liên quan