Kích thước nhật ký ảo của SQL Server


8

Tôi là một DBA tình cờ, là một nhà phát triển thừa hưởng một vài máy chủ cơ sở dữ liệu (2005 và 2008) từ một người ít biết về quản trị cơ sở dữ liệu và dường như thậm chí còn ít quan tâm đến việc tìm hiểu thêm về chủ đề này.

Tôi đang học khi tôi đi và hiện đang cố gắng tìm ra các tệp nhật ký giao dịch.

Tất cả các cơ sở dữ liệu của chúng tôi đã được thiết lập với mô hình khôi phục đơn giản và tự động thu nhỏ. Tôi đã hiểu rằng sử dụng autoshrink thường là một ý tưởng khủng khiếp, nhưng tôi hiểu điều này được thực hiện để ngăn chặn nhật ký giao dịch vượt khỏi tầm kiểm soát. (Autoshrink có thực sự thu nhỏ (các) tệp nhật ký hoặc chỉ DB không?)

Tôi đã tìm thấy điều này về SQL Server 2012 và tự hỏi liệu nó có đúng vào năm 2005 và / hoặc 2008 hay không, và chính xác ý nghĩa của nó: "Khi cơ sở dữ liệu sử dụng mô hình khôi phục đơn giản, Cơ sở dữ liệu sẽ cắt nhật ký giao dịch sau một điểm kiểm tra. [. ..] Công cụ cơ sở dữ liệu kích hoạt một điểm kiểm tra tự động theo mô hình khôi phục đơn giản khi nhật ký ảo đã đầy 70%. " Kích thước nhật ký ảo được chỉ định ở đâu?

Tôi muốn tắt tính năng tự động thu nhỏ trên tất cả các cơ sở dữ liệu, nhưng trước khi tôi làm điều đó, tôi cần biết rằng các tệp nhật ký sẽ không vượt quá tầm kiểm soát một cách nhanh chóng.

Mọi sự trợ giúp sẽ rất được trân trọng.


1
Đọc rusanu.com/2012/07/27/how-to-shrink-the-sql-server-log và xem liệu nó có làm sáng tỏ bất cứ điều gì đang xảy ra không.
Remus Rusanu

Câu trả lời:


6

Một tệp nhật ký giao dịch có cả kích thước vật lý (mà bạn thấy trên đĩa) và nó cũng được chia nhỏ trong tệp vật lý thành các phần logic được gọi là tệp nhật ký ảo (VLF).

Cả tự động tăng trưởng và tự động thu hẹp hoạt động trên tệp nhật ký giao dịch vật lý .

Cắt bớt nhật ký giao dịch (còn gọi là "xóa nhật ký") hoạt động trên các phần logic của nhật ký giao dịch (VLF) và không ảnh hưởng đến kích thước tệp vật lý. Phần này thường là chủ đề của sự nhầm lẫn.

Một tệp nhật ký phải luôn phát triển để chứa một giao dịch lớn; tắt tự động thu nhỏ sẽ để lại tệp nhật ký với kích thước tối đa cần thiết, thay vì giảm vật lý kích thước của nó.

Nếu bạn không có giao dịch lớn, sẽ an toàn để tắt tự động thu nhỏ; các tập tin log sẽ không phát triển mà không bị ràng buộc như sẽ xảy ra nếu cơ sở dữ liệu là trong FULLhay BULK_LOGGEDvà bạn đã không thực hiện các backup transaction log.

Hành vi này giống với SQL Server 2005+.


Cảm ơn, đó là về những gì tôi đang tìm kiếm khi tôi đặt câu hỏi. Tôi đã đi đến kết luận tương tự sau khi đọc câu trả lời trước đó của Remus.
Petter Brodin

2

Vì vậy, đây là những gì tôi đã tìm thấy sau khi đọc các câu trả lời khác ở đây và tự mình thực hiện một số nghiên cứu:

Q: "Autoshrink thực sự thu nhỏ (các) tệp nhật ký hay chỉ DB?" A: Từ những gì tôi hiểu: có, nó làm. Autoshrink được đặt ở cấp cơ sở dữ liệu và ảnh hưởng đến tất cả các tệp (nhìn thấy nếu bạn nhấp chuột phải vào cơ sở dữ liệu -> thuộc tính -> tệp hoặc nếu bạn chạy truy vấn 1). Autogrow, tuy nhiên, hoạt động trên mỗi cấp độ tệp.

Q: "Kích thước nhật ký ảo được chỉ định ở đâu?" Trả lời: Xem trả lời của Jon Seigel và liên kết Remus đã đăng. Để xem kích thước nhật ký vật lý và logic, sử dụng truy vấn 2

Một vấn đề là nếu cơ sở dữ liệu đã kích hoạt chế độ khôi phục hoàn toàn, phát triển đến kích thước lớn và sau đó thay đổi chế độ khôi phục thành đơn giản, một điểm kiểm tra sẽ không được kích hoạt khi VLF tự động chạy. Có thể cố gắng giải quyết vấn đề này (xem phần trả lời của Remus cho các vấn đề tiềm ẩn với phần đầu / đuôi của tệp nhật ký) bằng cách chạy truy vấn 3, điều này sẽ làm giảm logfile xuống kích thước khi nó được tạo ban đầu.

Truy vấn:

1)

SELECT name, physical_name AS current_file_location, DB_NAME(database_id) AS dbname
FROM sys.master_files
WHERE DB_NAME(database_id) = 'mydb'

2)

DECLARE @tmpt TABLE(
    dbname VARCHAR(255),
    logsize DECIMAL,
    logspaceused DECIMAL,
    stat INT
)

INSERT INTO @tmpt
    EXEC ('DBCC SQLPERF(LOGSPACE)')

SELECT * FROM @tmpt WHERE dbname LIKE 'mydb' ORDER BY logspaceused DESC

3)

checkpoint
DBCC SHRINKFILE('logfile_name')

2

Như bạn đã đề cập trong câu hỏi của mình, trong SQL 2005 và 2008 sau điểm kiểm tra, tệp nhật ký giao dịch cũng sẽ bị cắt ngắn.

Đề xuất của tôi sẽ là thiết lập mô hình khôi phục đầy đủ và tạo một công việc để sao lưu từ tệp nhật ký giao dịch. Công việc này có thể được lên lịch trên cơ sở dữ liệu của bạn và sẽ cắt bớt nhật ký giao dịch sau khi thực hiện sao lưu. Nó tự động sẽ cắt bớt tệp nhật ký cho bạn. Xin vui lòng xem các liên kết dưới đây:

SQL Server 2005: http://technet.microsoft.com/en-us/l Library / ms189085 (v = sql.90) .aspx

Máy chủ SQL 2008: http://technet.microsoft.com/en-us/l Library / ms189085 (v = sql.100) .aspx


Vâng, đó là kế hoạch của tôi về lâu dài, nhưng bây giờ tôi chỉ muốn thoát khỏi autoshrink.
Petter Brodin

Những thay đổi là bạn muốn thay đổi chúng thành FULL recovery nhưng trước khi bạn đánh giá liệu nó có thực sự cần thiết hay không. Nếu bạn cần khôi phục càng gần càng tốt với thảm họa thì bạn sẽ làm. Nếu quay lại bản sao lưu đầy đủ cuối cùng (thường là hàng đêm) thì chế độ khôi phục SIMPLE sẽ hoạt động tốt cho bạn.
cfradenburg
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.