2008-09-18 42 views
9

Tôi đã điều tra sự tăng trưởng nhanh chóng của nhật ký giao dịch SQL Server 2005 khi tôi thấy rằng nhật ký giao dịch sẽ chỉ cắt chính xác - nếu cột sys.databases "log_reuse_wait" được đặt thành 0 - có nghĩa là không có gì là giữ nhật ký giao dịch sử dụng lại không gian hiện có.SQL Server sys.databases log_reuse_wait câu hỏi

Một ngày khi tôi có ý định sao lưu/cắt bớt tệp nhật ký, tôi thấy rằng cột này có 4 hoặc ACTIVE_TRANSACTION đang diễn ra trong tempdb. Sau đó tôi đã kiểm tra bất kỳ giao dịch mở nào bằng DBCC OPENTRAN ('tempdb') và cột open_tran từ sysprocesses. Kết quả là tôi có thể tìm thấy không có giao dịch hoạt động bất cứ nơi nào trong hệ thống.

Các cài đặt trong cột log_reuse_wait có chính xác không? Có các giao dịch đang diễn ra không thể phát hiện được bằng các phương pháp tôi đã mô tả ở trên không? Tôi chỉ thiếu một cái gì đó hiển nhiên?

Trả lời

-1

Hm, phức tạp. Nó có thể được rằng câu hỏi nó tự để sys.databases là gây ra các ACTIVE_TRANSACTION? Trong trường hợp đó, nó phải ở trong MASTER chứ không phải TEMPDB.

+0

Có thể, nhưng sau một giờ hoặc lâu hơn ACTIVE_TRANSACTION đã biến mất và quay lại 0 (NOTHING). Nếu gợi ý của bạn là đúng, thì mỗi khi tôi truy vấn sys.databases thì tempdb (hoặc master) sẽ luôn ở trong chế độ ACTIVE_TRANSACTION. – Clinemi

1

Có một vài liên kết với các công cụ thêm/tài liệu tham khảo, bạn có thể sử dụng để giúp khắc phục sự cố vấn đề này trên các tài liệu tham khảo liên kết cho video này:
Managing SQL Server 2005 and 2008 Log Files

Điều đó nói rằng, các thông tin trong log_reuse_wait phải chính xác. Bạn có thể chỉ có một giao dịch bị tạm dừng hoặc mồ côi mà bạn không bằng cách nào đó có thể phát hiện ra.

+0

Cảm ơn bạn đã liên kết! Tôi đã xem video và học được một số điều, nhưng tiếc là nó không giải quyết được câu hỏi cốt lõi của tôi. – Clinemi

1

My answer từ The Log File for Database is Full:

Ngay sau khi bạn tham gia một sao lưu đầy đủ của cơ sở dữ liệu, và các cơ sở dữ liệu không được sử dụng các mô hình phục hồi đơn giản, SQL Server giữ một bản ghi đầy đủ tất cả các giao dịch bao giờ được thực hiện trên cơ sở dữ liệu. Nó thực hiện điều này để trong trường hợp thất bại thảm khốc khi bạn mất tập tin dữ liệu, bạn có thể khôi phục lại điểm thất bại bằng cách sao lưu nhật ký và, khi bạn đã khôi phục bản sao lưu cũ, hãy khôi phục nhật ký để phát lại giao dịch.

Để ngăn chặn việc xây dựng này, bạn phải sao lưu nhật ký giao dịch. Hoặc, bạn có thể ngắt chuỗi tại điểm hiện tại bằng cách sử dụng các tùy chọn TRUNCATE_ONLY hoặc NO_LOG của BACKUP LOG.

Nếu bạn không cần tính năng này, hãy đặt mô hình khôi phục thành Đơn giản.

+1

Tôi đã biết thông tin trong câu trả lời của bạn. Tôi đã sửa nhật ký giao dịch đang phát triển bằng cách đặt mô hình khôi phục lại thành đơn giản. Câu hỏi của tôi tuy nhiên, là lý do tại sao log_reuse_wait nên cho tôi thấy rằng có các giao dịch hoạt động, khi tôi không thể tìm thấy bất kỳ trong hệ thống. – Clinemi

0

Dữ liệu có thể chính xác. Những gì bạn cần làm là có bản sao lưu nhật ký giao dịch thông thường. Trái ngược với lời khuyên khác, bạn KHÔNG nên sử dụng tùy chọn NO_TRUNCATE vào năm 2005 vì nó xóa nhật ký giao dịch đã cam kết nhưng không sao lưu chúng.

Những gì bạn cần làm là thực hiện sao lưu bản ghi đuôi bằng cách sử dụng câu lệnh BACKUP LOG với tùy chọn NO_TRUNCATE. Bạn nên áp dụng nhật ký giao dịch thông thường trong cả ngày. Điều này sẽ giúp giữ cho kích thước khá dễ quản lý.

6

tôi vẫn không biết lý do tại sao tôi đã nhìn thấy những ACTIVE_TRANSACTION trong cột sys.databases log_reuse_wait_desc - khi không có giao dịch chạy, nhưng kinh nghiệm sau này của tôi chỉ ra rằng cột log_reuse_wait cho những thay đổi tempdb vì những lý do mà không phải là rất rõ ràng, và cho mục đích của tôi, không liên quan lắm.Ngoài ra, tôi phát hiện ra rằng chạy DBCC OPENTRAN, hoặc "chọn open_tran từ sysprocess" mã, là ít hơn rất nhiều thông tin hơn là sử dụng những điều khoản dưới đây khi tìm kiếm thông tin giao dịch:

select * from sys.dm_tran_active_transactions 

select * from sys.dm_tran_session_transactions 

select * from sys.dm_tran_locks 
3

Here có giải thích thế nào log_reuse_wait_desc đang làm việc :

Chúng tôi cũng cần hiểu cơ chế báo cáo log_reuse_wait_desc hoạt động như thế nào. Nó cung cấp cho lý do tại sao cắt ngắn nhật ký không thể xảy ra lần cắt ngắn nhật ký lần cuối được thực hiện. Điều này có thể gây nhầm lẫn - ví dụ: nếu bạn thấy ACTIVE_BACKUP_OR_RESTORE và bạn biết không có hoạt động sao lưu hoặc khôi phục đang chạy, điều này có nghĩa là có một lần chạy lần cắt nhật ký lần cuối được thử.

Vì vậy, trong trường hợp của bạn không có giao dịch ACTIVE ngay bây giờ, nhưng đó là khi việc cắt nhật ký được thực hiện lần trước.