Làm cách nào để chấm dứt giao dịch SQL Server bị treo đang chờ IO_COMPLETION?


8

Chúng tôi có một giao dịch đã được thực hiện trong hơn 5 giờ. Chúng tôi đang hết dung lượng đĩa. Phiên đã bị giết nhưng nó vẫn đang chờ IO_COMPLETION. Trên thực tế, Wait_type chỉ thay đổi thành PAGEIOLATCH_EX. Làm cách nào tôi có thể chấm dứt giao dịch SQL Server bị treo? Tôi không lo lắng về việc mất dữ liệu vì tất cả dữ liệu có thể được phục hồi.

session_id: 54
STATUS: suspended
blocked by: 0
wait_type: PAGEIOLATCH_EX
Elapsed Time (in Sec): 19750.420000
open_transaction_count: 2

2
Hãy để nó kết thúc .. khác nếu bạn làm điều giật đầu gối khi rút nguồn điện hoặc khởi động lại dịch vụ máy chủ sql, sẽ mất thời gian để quay trở lại. Vì bạn không lo lắng về việc mất dữ liệu, làm thế nào về việc bạn khôi phục cơ sở dữ liệu từ bản sao lưu cuối cùng và sau đó phục hồi dữ liệu? Ngoài ra, bạn có thể sử dụng KILL 54 WITH STATUSONLYđể tìm hiểu xem sẽ mất bao lâu để quay lại.
Kin Shah

Tôi đã chạy KILL 54 VỚI TÌNH TRẠNG và nhận được điều này: SPID 54: tiến hành giao dịch trở lại. Dự kiến ​​hoàn thành rollback: 0%. Thời gian dự kiến ​​còn lại: 0 giây. Tôi không tin phần 0 giây.
Tarzan

2
Rollback là một hoạt động theo luồng đơn, vì vậy, ví dụ nếu giao dịch ban đầu của bạn đang chạy với 8 luồng song song cho đến khi bị giết, việc khôi phục có thể mất 8 lần nữa.
James Z

@Tarzan KILL .. WITH STATUSONLYkhông chính xác và tôi thấy quan điểm của bạn. Bạn có thể thử Alter database .. set OFFLINE or single_User WITH ROLLBACK IMMEDIATEkhông
Kin Shah

2
Tôi đã kết thúc để cho nó chạy qua đêm. Cuối cùng nó cũng hoàn thành. Woohoo! Cảm ơn bạn đã bình luận.
Tarzan

Câu trả lời:


1

Lần tới, điều này xảy ra, chạy sp_WhoIsActive( tải xuống | tài liệu ) và xem ai đang chạy cái gì và xem qua logic. Kiểm tra xem liệu TSQL có thể được tối ưu hóa để chạy nhanh hơn hay có thể cắt nó thành các giao dịch nhỏ hơn.

Tôi đã gặp trường hợp nhật ký giao dịch của một người truy vấn xấu bởi người viết báo cáo, người tải dữ liệu, v.v. sẽ phát triển nhật ký giao dịch lớn hơn kích thước tệp dữ liệu và đó thường là một truy vấn được viết kém, không được tối ưu hóa hoặc không được tối ưu hóa vào các giao dịch nhỏ hơn để trả lại không gian trống sau khi giao dịch hoàn tất - đây cũng là cơ sở dữ liệu mô hình phục hồi SIMPLE- FULLcơ sở dữ liệu mô hình phục hồi sẽ cần phải sao lưu nhật ký giao dịch để cho phép sử dụng lại không gian nhật ký giao dịch của các giao dịch đã cam kết.

Vấn đề gốc có thể là truy vấn vì vậy việc xác định ai đang làm gì và liên hệ với họ và báo cáo vấn đề với phát hiện của bạn sẽ gây áp lực lên họ để khắc phục logic của họ để không chiếm không gian đĩa máy chủ cho phân vùng đĩa đó - hy vọng đó là không phải logic của bạn nhưng nếu có, hãy xem việc tối ưu hóa logic để điều chỉnh truy vấn cho hiệu suất.

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.