Câu trả lời ngắn hơn:
Bạn có thể có một giao dịch chạy dài đang chạy (Bảo trì chỉ mục? Xóa hoặc cập nhật hàng loạt lớn?) Hoặc bạn đang ở chế độ khôi phục "mặc định" (bên dưới có nghĩa là mặc định) Full
và chưa thực hiện sao lưu nhật ký (hoặc không dùng chúng thường xuyên đủ).
Nếu đó là sự cố mô hình khôi phục, câu trả lời đơn giản có thể là Chuyển sang Simple
chế độ khôi phục nếu bạn không cần khôi phục thời gian và sao lưu nhật ký thông thường. Nhiều người, mặc dù, làm cho câu trả lời của họ mà không hiểu mô hình phục hồi. Đọc để hiểu tại sao nó quan trọng và sau đó quyết định những gì bạn làm. Bạn cũng có thể chỉ cần bắt đầu thực hiện sao lưu nhật ký và ở lại Full
phục hồi.
Có thể có những lý do khác nhưng đây là những lý do phổ biến nhất. Câu trả lời này bắt đầu đi sâu vào hai lý do phổ biến nhất và cung cấp cho bạn một số thông tin cơ bản về lý do và cách thức đằng sau lý do cũng như khám phá một số lý do khác.
Câu trả lời dài hơn:
Kịch bản nào có thể khiến nhật ký tiếp tục phát triển? Có nhiều lý do, nhưng thông thường những lý do này có hai mẫu sau: Có sự hiểu lầm về các mô hình khôi phục hoặc có các giao dịch chạy dài. Đọc để biết chi tiết.
Lý do hàng đầu 1/2: Không hiểu mô hình phục hồi
( Đang ở Chế độ khôi phục hoàn toàn và không thực hiện sao lưu nhật ký - Đây là lý do phổ biến nhất - đại đa số những người gặp phải vấn đề này là. )
Mặc dù câu trả lời này không phải là một bước đi sâu trong các mô hình phục hồi SQL Server, chủ đề của các mô hình khôi phục là rất quan trọng đối với vấn đề này.
Trong SQL Server, có ba mô hình phục hồi :
Full
,
Bulk-Logged
và
Simple
.
Bulk-Logged
Bây giờ chúng ta sẽ bỏ qua chúng ta sẽ nói rằng đó là một mô hình lai và hầu hết những người trong mô hình này đều có lý do và hiểu các mô hình phục hồi.
Hai chúng tôi quan tâm và sự nhầm lẫn của họ là nguyên nhân của phần lớn các trường hợp những người có vấn đề này là Simple
và Full
.
Tạm dừng: Phục hồi nói chung
Trước khi chúng ta nói về Mô hình khôi phục: hãy nói về phục hồi nói chung. Nếu bạn muốn đi sâu hơn nữa với chủ đề này, chỉ cần đọc blog của Paul Randal và nhiều bài viết về nó như bạn muốn. Đối với câu hỏi này, mặc dù:
Sự cố / Khởi động lại phục hồi
Một mục đích của tệp nhật ký giao dịch là phục hồi sự cố / khởi động lại . Đối với việc cuộn tiến và lùi công việc đã hoàn thành (lăn tiến / làm lại) trước khi gặp sự cố hoặc khởi động lại và công việc đã được bắt đầu nhưng chưa kết thúc sau sự cố hoặc khởi động lại (quay ngược / hoàn tác). Đó là công việc của nhật ký giao dịch để thấy rằng một giao dịch bắt đầu nhưng không bao giờ kết thúc (quay lại hoặc sự cố / khởi động lại xảy ra trước khi giao dịch được cam kết). Trong tình huống đó, công việc của nhật ký là nói "Này .. điều này không bao giờ thực sự kết thúc, hãy quay lại" trong quá trình phục hồi. Đây cũng là công việc của nhật ký để thấy rằng bạn đã hoàn thành một cái gì đó và ứng dụng khách của bạn được thông báo rằng nó đã kết thúc (ngay cả khi nó chưa cứng vào tệp dữ liệu của bạn) và nói"Này .. điều này thực sự đã xảy ra, hãy tiếp tục, hãy làm cho nó giống như các ứng dụng nghĩ rằng" sau khi khởi động lại. Bây giờ có nhiều hơn nhưng đó là mục đích chính.
Phục hồi thời điểm
Mục đích khác cho tệp nhật ký giao dịch là có thể cung cấp cho chúng tôi khả năng khôi phục kịp thời do "oops" trong cơ sở dữ liệu hoặc để đảm bảo điểm khôi phục trong trường hợp xảy ra lỗi phần cứng liên quan đến dữ liệu và / hoặc tệp nhật ký của cơ sở dữ liệu. Nếu nhật ký giao dịch này chứa các bản ghi các giao dịch đã được bắt đầu và kết thúc để khôi phục, SQL Server có thể và sau đó sử dụng thông tin này để đưa cơ sở dữ liệu đến nơi xảy ra trước khi xảy ra sự cố. Nhưng đó không phải lúc nào cũng là một lựa chọn có sẵn cho chúng ta. Để làm việc đó, chúng tôi phải có cơ sở dữ liệu của mình trong mô hình khôi phục phù hợp và chúng tôi phải thực hiện sao lưu nhật ký .
Mô hình phục hồi
Lên các mô hình phục hồi:
Mô hình phục hồi đơn giản
Vì vậy, với phần giới thiệu ở trên, dễ nhất là nói về Simple Recovery
mô hình trước. Trong mô hình này, bạn đang nói với SQL Server: "Tôi ổn với bạn khi sử dụng tệp nhật ký giao dịch của bạn để khắc phục sự cố và khởi động lại phục hồi ..." (Bạn thực sự không có lựa chọn nào ở đó. Tra cứu các thuộc tính ACID và điều đó sẽ nhanh chóng có ý nghĩa.) "... nhưng một khi bạn không còn cần nó cho mục đích khôi phục sự cố / khởi động lại đó, hãy tiếp tục và sử dụng lại tệp nhật ký."
SQL Server lắng nghe yêu cầu này trong Phục hồi đơn giản và nó chỉ giữ thông tin cần thiết để thực hiện khôi phục sự cố / khởi động lại. Khi SQL Server chắc chắn có thể khôi phục được vì dữ liệu được làm cứng vào tệp dữ liệu (ít nhiều), dữ liệu đã được làm cứng không còn cần thiết trong nhật ký và được đánh dấu để cắt bớt - có nghĩa là nó được sử dụng lại.
Mô hình khôi phục hoàn toàn
Với Full Recovery
, bạn đang nói với SQL Server rằng bạn muốn có thể khôi phục đến một thời điểm cụ thể, miễn là tệp nhật ký của bạn có sẵn hoặc đến một thời điểm cụ thể được bao phủ bởi bản sao lưu nhật ký. Trong trường hợp này khi SQL Server đạt đến điểm an toàn để cắt tệp nhật ký trong Mô hình khôi phục đơn giản, nó sẽ không làm điều đó. Thay vào đó, nó cho phép tệp nhật ký tiếp tục phát triển và sẽ cho phép nó tiếp tục phát triển, cho đến khi bạn thực hiện sao lưu nhật ký (hoặc hết dung lượng trên ổ đĩa tệp nhật ký của bạn) trong các trường hợp bình thường.
Chuyển từ đơn giản sang đầy đủ có Gotcha.
Có các quy tắc và ngoại lệ ở đây. Chúng ta sẽ nói về các giao dịch chạy dài theo chiều sâu bên dưới.
Nhưng một lưu ý cần lưu ý đối với Chế độ khôi phục hoàn toàn là: Nếu bạn chỉ chuyển sang Full Recovery
chế độ, nhưng không bao giờ thực hiện Sao lưu toàn bộ ban đầu, SQL Server sẽ không thực hiện yêu cầu của bạn trong Full Recovery
mô hình. Nhật ký giao dịch của bạn sẽ tiếp tục hoạt động như hiện tại Simple
cho đến khi bạn chuyển sang Mô hình khôi phục hoàn toàn VÀ thực hiện lần đầu tiên Full Backup
.
Mô hình phục hồi đầy đủ mà không sao lưu nhật ký là xấu.
Vì vậy, đó là lý do phổ biến nhất cho tăng trưởng log không kiểm soát? Trả lời: Đang ở chế độ Khôi phục hoàn toàn mà không có bất kỳ bản sao lưu nhật ký nào.
Điều này xảy ra tất cả thời gian cho mọi người.
Tại sao điều này là một lỗi phổ biến như vậy?
Tại sao nó xảy ra tất cả các thời gian? Bởi vì mỗi cơ sở dữ liệu mới có cài đặt mô hình khôi phục ban đầu bằng cách xem cơ sở dữ liệu mô hình.
Cài đặt mô hình khôi phục ban đầu của mô hình luôn luôn Full Recovery Model
- cho đến khi và trừ khi có ai đó thay đổi điều đó. Vì vậy, bạn có thể nói "Mô hình khôi phục mặc định" là Full
. Nhiều người không nhận thức được điều này và có cơ sở dữ liệu của họ chạy Full Recovery Model
mà không có bản sao lưu nhật ký, và do đó một tệp nhật ký giao dịch lớn hơn nhiều so với mức cần thiết. Đây là lý do tại sao điều quan trọng là phải thay đổi mặc định khi chúng không hoạt động cho tổ chức của bạn và nhu cầu của tổ chức)
Full Recovery Model với quá ít bản sao lưu log là xấu.
Bạn cũng có thể gặp rắc rối ở đây bằng cách không sao lưu nhật ký đủ thường xuyên.
Việc sao lưu nhật ký một ngày nghe có vẻ tốt, nó làm cho việc khôi phục yêu cầu ít lệnh khôi phục hơn, nhưng hãy nhớ rằng cuộc thảo luận ở trên, tệp nhật ký đó sẽ tiếp tục phát triển và phát triển cho đến khi bạn thực hiện sao lưu nhật ký.
Làm cách nào để tìm ra tần suất sao lưu nhật ký tôi cần?
Bạn cần xem xét tần suất sao lưu nhật ký của mình với hai điều cần lưu ý:
- Nhu cầu phục hồi - Điều này hy vọng sẽ là đầu tiên. Trong trường hợp ổ đĩa lưu trữ nhật ký giao dịch của bạn bị hỏng hoặc bạn bị hỏng nghiêm trọng ảnh hưởng đến sao lưu nhật ký của bạn, có thể mất bao nhiêu dữ liệu? Nếu con số đó không quá 10-15 phút, thì bạn cần phải thực hiện sao lưu nhật ký cứ sau 10 - 15 phút, kết thúc cuộc thảo luận.
- Tăng trưởng nhật ký - Nếu tổ chức của bạn ổn để mất thêm dữ liệu vì khả năng dễ dàng tạo lại ngày hôm đó, bạn có thể ổn để sao lưu nhật ký ít thường xuyên hơn 15 phút. Có thể tổ chức của bạn vẫn ổn với mỗi 4 giờ. Nhưng bạn phải xem có bao nhiêu giao dịch bạn tạo ra trong 4 giờ. Sẽ cho phép nhật ký tiếp tục phát triển trong bốn giờ đó làm cho tệp nhật ký quá lớn? Điều đó có nghĩa là sao lưu nhật ký của bạn mất quá nhiều thời gian?
Lý do hàng đầu 2/2: Giao dịch chạy dài
( "Mô hình phục hồi của tôi vẫn ổn! Nhật ký vẫn đang phát triển! )
Đây cũng có thể là một nguyên nhân của tăng trưởng log không kiểm soát và không bị hạn chế. Không quan trọng mô hình khôi phục, nhưng nó thường xuất hiện dưới dạng "Nhưng tôi đang ở trong Mô hình khôi phục đơn giản - tại sao nhật ký của tôi vẫn tăng?!"
Lý do ở đây rất đơn giản: nếu SQL đang sử dụng nhật ký giao dịch này cho mục đích khôi phục như tôi đã mô tả ở trên, thì nó phải xem lại khi bắt đầu giao dịch.
Nếu bạn có một giao dịch mất nhiều thời gian hoặc thực hiện nhiều thay đổi, nhật ký không thể cắt ngắn điểm kiểm tra đối với bất kỳ thay đổi nào vẫn còn trong giao dịch mở hoặc đã bắt đầu kể từ khi giao dịch đó bắt đầu.
Điều này có nghĩa là việc xóa lớn, xóa hàng triệu hàng trong một câu lệnh xóa là một giao dịch và nhật ký không thể thực hiện bất kỳ việc cắt bớt nào cho đến khi xóa toàn bộ. Trong Full Recovery Model
, xóa này được ghi lại và đó có thể là rất nhiều bản ghi nhật ký. Điều tương tự với công việc tối ưu hóa Index trong các cửa sổ bảo trì. Điều đó cũng có nghĩa là quản lý giao dịch kém và không theo dõi và đóng giao dịch mở có thể thực sự làm tổn thương bạn và tệp nhật ký của bạn.
Tôi có thể làm gì với những giao dịch dài hạn này?
Bạn có thể tự cứu mình ở đây bằng cách:
- Định cỡ chính xác tệp nhật ký của bạn để giải thích cho trường hợp xấu nhất - như bảo trì của bạn hoặc các hoạt động lớn đã biết. Và khi bạn phát triển tệp nhật ký của mình, bạn nên xem hướng dẫn này (và hai liên kết cô ấy gửi cho bạn) của Kimberly Tripp. Kích thước bên phải là siêu quan trọng ở đây.
- Xem sử dụng giao dịch của bạn. Đừng bắt đầu một giao dịch trong máy chủ ứng dụng của bạn và bắt đầu có các cuộc trò chuyện dài với SQL Server và có nguy cơ để mở một giao dịch quá lâu.
- Xem các giao dịch ngụ ý trong các báo cáo DML của bạn. Ví dụ:
UPDATE TableName Set Col1 = 'New Value'
là một giao dịch. Tôi đã không đặt BEGIN TRAN
ở đó và tôi không phải làm thế, đó vẫn là một giao dịch chỉ tự động thực hiện khi hoàn thành. Vì vậy, nếu thực hiện các thao tác trên số lượng lớn các hàng, hãy xem xét việc gộp các hoạt động đó thành nhiều phần dễ quản lý hơn và cho thời gian đăng nhập để phục hồi. Hoặc xem xét kích thước phù hợp để đối phó với điều đó. Hoặc có thể xem xét thay đổi mô hình phục hồi trong cửa sổ tải số lượng lớn.
Có phải hai lý do này cũng áp dụng cho Log Shipping?
Câu trả lời ngắn gọn: có. Câu trả lời dài hơn dưới đây.
Câu hỏi: "Tôi đang sử dụng vận chuyển nhật ký, vì vậy các bản sao lưu nhật ký của tôi được tự động ... Tại sao tôi vẫn thấy tăng trưởng nhật ký giao dịch?"
Trả lời: đọc tiếp.
Đăng nhập vận chuyển là gì?
Nhật ký vận chuyển chỉ là những gì nó nghe giống như - bạn đang vận chuyển sao lưu nhật ký giao dịch của mình đến một máy chủ khác cho mục đích DR. Có một số khởi tạo nhưng sau đó quá trình này khá đơn giản:
- Một công việc để sao lưu nhật ký trên một máy chủ,
- một công việc sao chép bản sao lưu nhật ký đó và
- một công việc để khôi phục nó mà không cần phục hồi (hoặc
NORECOVERY
hoặc STANDBY
) trên máy chủ đích.
Ngoài ra còn có một số công việc để theo dõi và cảnh báo nếu mọi thứ không diễn ra như bạn đã lên kế hoạch.
Trong một số trường hợp, bạn chỉ có thể muốn thực hiện khôi phục nhật ký vận chuyển một lần một ngày hoặc mỗi ngày thứ ba hoặc một lần một tuần. Điều đó là tốt. Nhưng nếu bạn thực hiện thay đổi này trên tất cả các công việc (bao gồm sao lưu nhật ký và sao chép công việc), điều đó có nghĩa là bạn đang chờ đợi tất cả thời gian để thực hiện sao lưu nhật ký. Điều đó có nghĩa là bạn sẽ có rất nhiều sự tăng trưởng nhật ký - bởi vì bạn đang ở chế độ khôi phục hoàn toàn mà không cần sao lưu nhật ký - và nó cũng có thể có nghĩa là một tệp nhật ký lớn để sao chép. Bạn chỉ nên sửa đổi lịch trình của công việc khôi phục và để sao lưu nhật ký và bản sao xảy ra thường xuyên hơn, nếu không bạn sẽ gặp phải vấn đề đầu tiên được mô tả trong câu trả lời này.
Xử lý sự cố chung thông qua mã trạng thái
Có những lý do khác ngoài hai điều này, nhưng đây là những lý do phổ biến nhất. Bất kể nguyên nhân là gì: có một cách bạn có thể phân tích lý do của mình cho sự tăng trưởng / thiếu bản ghi không rõ nguyên nhân này và xem chúng là gì.
Bằng cách truy vấn sys.databases
chế độ xem danh mục, bạn có thể thấy thông tin mô tả lý do tệp nhật ký của bạn có thể đang chờ rút ngắn / tái sử dụng.
Có một cột được gọi log_reuse_wait
với ID tra cứu của mã lý do và một log_reuse_wait_desc
cột có mô tả lý do chờ. Từ các sách tham khảo bài viết trực tuyến là phần lớn các lý do (những lý do bạn có thể thấy và những lý do chúng tôi có thể giải thích lý do. Những người mất tích hoặc không sử dụng hoặc sử dụng nội bộ) với một vài lưu ý về việc chờ đợi chữ nghiêng :
0 = Không có
gì Nghe giống như vậy .. Không nên chờ đợi
1 = Điểm kiểm tra
Đang chờ điểm kiểm tra xảy ra. Điều này sẽ xảy ra và bạn sẽ ổn thôi - nhưng có một số trường hợp cần tìm ở đây để có câu trả lời hoặc chỉnh sửa sau này.
2 = Sao lưu nhật ký
Bạn đang chờ sao lưu nhật ký xảy ra. Hoặc bạn đã lên lịch cho chúng và nó sẽ xảy ra sớm hoặc bạn có vấn đề đầu tiên được mô tả ở đây và bây giờ bạn biết cách khắc phục
3 = Sao
lưu hoặc khôi phục hoạt động Một hoạt động sao lưu hoặc khôi phục đang chạy trên cơ sở dữ liệu
4 = Giao dịch hoạt động
Có một giao dịch đang hoạt động cần hoàn thành (bằng cách nào đó - ROLLBACK
hoặc COMMIT
) trước khi nhật ký có thể được sao lưu. Đây là lý do thứ hai được mô tả trong câu trả lời này.
5 = Phản chiếu cơ sở dữ liệu
Hoặc một gương đang ở phía sau hoặc dưới một độ trễ nào đó trong tình huống phản chiếu hiệu suất cao hoặc phản chiếu bị tạm dừng vì một số lý do
6 = Sao chép
Có thể có các vấn đề với sao chép sẽ gây ra điều này - như tác nhân đọc nhật ký không chạy, cơ sở dữ liệu nghĩ rằng nó được đánh dấu để sao chép không còn và nhiều lý do khác. Bạn cũng có thể thấy lý do này và nó hoàn toàn bình thường vì bạn đang xem xét đúng thời điểm, giống như các giao dịch đang được người đọc nhật ký sử dụng
7 = Tạo ảnh chụp nhanh cơ sở dữ liệu
Bạn đang tạo ảnh chụp nhanh cơ sở dữ liệu, bạn sẽ thấy điều này nếu bạn nhìn vào đúng thời điểm khi ảnh chụp nhanh được tạo
8 = Log Scan
Tôi vẫn chưa gặp phải vấn đề gì với việc này chạy mãi mãi. Nếu bạn nhìn đủ lâu và đủ thường xuyên, bạn có thể thấy điều này xảy ra, nhưng nó không phải là nguyên nhân của sự tăng trưởng nhật ký giao dịch quá mức, mà tôi đã thấy.
9 = Bản sao thứ cấp của Nhóm Luôn sẵn sàng đang áp dụng các bản ghi nhật ký giao dịch của cơ sở dữ liệu này cho cơ sở dữ liệu thứ cấp tương ứng.
Về mô tả rõ ràng nhất ..