2011-10-31 13 views
8

Tôi đang gọi các câu lệnh cập nhật lần lượt từ một servlet đến DB2. Tôi nhận được lỗi sqlstate 40001, lý do mã 68 mà tôi tìm thấy nó là do deadlock deadout.Hết thời gian chờ khóa DB2 Sqlstate: 40001, mã lý do 68 do các câu lệnh cập nhật được gọi từ servlet bằng cách sử dụng SQL

  • Làm cách nào để giải quyết vấn đề này?
  • Nó có thể được giải quyết bằng cách đặt thời gian chờ truy vấn không?
  • Nếu có thì làm thế nào để sử dụng nó với các câu lệnh cập nhật trong servlet hoặc nơi sử dụng?

Trả lời

11

Lý do mã 68 đã cho bạn biết điều này là do thời gian chờ khóa (bế tắc là mã lý do 2) Có thể do người dùng khác đang chạy truy vấn cùng một lúc sử dụng cùng dữ liệu bạn đang truy cập hoặc nhiều bản cập nhật của riêng bạn.

Bắt đầu bằng cách chạy db2pd -db locktest -locks show detail từ dòng lệnh db2 để xem vị trí khóa. Sau đó, bạn sẽ cần phải chạy một cái gì đó như:

select tabschema, tabname, tableid, tbspaceid 
from syscat.tables where tbspaceid = # and tableid = # 

điền vào # ký hiệu với số ID bạn nhận được từ đầu ra lệnh db2pd.

Khi bạn thấy nơi ổ khóa là, đây là một số lời khuyên sau:

◦Deadlock tần số đôi khi có thể được giảm bằng cách đảm bảo rằng tất cả các ứng dụng truy cập dữ liệu chung của họ theo thứ tự - ý nghĩa, ví dụ, rằng họ truy cập (và do đó khóa) các hàng trong Bảng A, tiếp theo là Bảng B, tiếp theo là Bảng C, v.v.

lấy từ: http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/topic/com.ibm.db2.luw.admin.trb.doc/doc/t0055074.html

khuyến khích đọc: http://www.ibm.com/developerworks/data/library/techarticle/dm-0511bond/index.html

Phụ Lục: nếu servlet của bạn hoặc ứng dụng khác có tội là sử dụng select báo cáo tìm thấy sẽ được tham gia vào thế bế tắc, bạn có thể thử phụ with ur minh báo cáo chọn nếu tính chính xác của dữ liệu mới được cập nhật (hoặc được chèn) không quan trọng.

+0

Điều quan trọng cần lưu ý là bài viết nói về ** giảm ** tần suất deadlocks, không ** ngăn chặn ** chúng hoàn toàn. Theo http://stackoverflow.com/a/112256/14731 thứ tự khóa nhất quán không ngăn chặn deadlocks. Điều chúng ta có thể làm là cố gắng giảm tần suất của chúng. – Gili