Tại sao tệp nhật ký của tôi rất lớn? 22gb. Tôi đang chạy sao lưu nhật ký


7

Tôi dường như không thể tìm ra câu trả lời. Tôi đã thấy nhiều câu trả lời như thế này: Tại sao Nhật ký giao dịch tiếp tục phát triển hoặc hết dung lượng?

và mọi người nói về việc chạy lại các tệp nhật ký của bạn để nó thu nhỏ lại. Tôi đang làm điều đó, nhưng nó không thu nhỏ bất cứ điều gì! Tôi cũng không tin rằng mình đang thực hiện bất kỳ giao dịch siêu dài nào.

Người phục vụ: SQL Server 2008

Chế độ phục hồi: Full

Tôi có một kế hoạch bảo trì để lưu trữ các bản sao lưu trị giá 5 ngày. Nhiệm vụ 1 sao lưu cơ sở dữ liệu với Loại sao lưu Full, Nhiệm vụ 2 sao lưu nhật ký giao dịch. Verify backup integrityđược kiểm tra trên cả hai nhiệm vụ.

.ldfTệp bình thường của DB của tôi là 22gb. Khi tôi chạy tác vụ trên, .baktệp là 435mb, nhưng .trn.tệp là 22gb, giống như ldf. Và sau khi chạy thành công, .ldfnó không co lại chút nào, bất chấp mọi thứ tôi đã đọc nói với tôi rằng nó nên như thế nào?

Điều gì đang xảy ra ở đây và tại sao tệp nhật ký không bao giờ co lại?

Tôi cũng đã thử chạy lệnh này như được đề cập trong một câu trả lời khác:

select name, log_reuse_wait_desc from sys.databases

Và nó nói LOG_BACKUPcho db với tệp nhật ký khổng lồ.

Dựa trên một câu trả lời dưới đây, tôi bối rối được phân bổ với không gian được sử dụng. Đây là số liệu thống kê của tôi về:

nhập mô tả hình ảnh ở đây

Vì lý do tôi không biết tại sao, kích thước ban đầu được đặt thành 22gb ...


Nhật ký giao dịch không tự động thu hẹp. Bạn đã cố gắng thu nhỏ nó?
Tony Hinkle

1
Tôi tìm thấy nhiệm vụ Shrink Database. Đã thêm nó vào kế hoạch bảo trì của tôi và chạy lại nó, dù sao vẫn không thu nhỏ nó.
SventoryMang

5
everyone talks about running back ups on your log file so it shrinks down- không, không ai nói vậy và sao lưu nhật ký sẽ không bao giờ thu nhỏ tệp. Họ nói rằng chạy sao lưu thường xuyên sẽ giúp ngăn chặn nó phát triển, vì không gian bên trong có thể được sử dụng lại sau khi nó đã được sao lưu. Đôi khi không gian nhật ký được sử dụng nhanh hơn so với bản sao lưu của bạn chạy. Nếu điều này xảy ra thường xuyên, thu nhỏ chỉ để phát triển trở lại là vô nghĩa, chỉ cần để chúng lớn. Nếu điều này là do một sự kiện bất thường đã biết và bạn đã đặt một cái gì đó để ngăn chặn nó xảy ra lần nữa, thì đó là lần duy nhất tôi sẽ ủng hộ bất kỳ sự thu hẹp nào.
Aaron Bertrand

2
Xin lưu ý rằng mọi người giúp đỡ bạn theo giả định rằng bạn có lý do chính đáng để muốn chế độ khôi phục hoàn toàn. Nếu mục tiêu điểm khôi phục của bạn ít nhất là 1 ngày, hãy xem xét chuyển sang chế độ khôi phục đơn giản và hoàn toàn bỏ qua các bản sao lưu nhật ký giao dịch (sau đó thu nhỏ các bản sao lưu nhật ký của bạn một lần ).
Brian

1
Tôi cần đầy đủ.
SventoryMang

Câu trả lời:


8

Bạn đang nhầm lẫn không gian được phân bổ với không gian sử dụng. Sau khi chạy bản sao lưu, sử dụng truy vấn này để xem sự khác biệt giữa không gian được phân bổ và được sử dụng.

select file_id
, type_desc
, name
, substring([physical_name],1,3) AS [Drive]
, physical_name
, state_desc
, size / 128 as 'AllocatedSizeMB'
, FILEPROPERTY([name],'SpaceUsed') /128 AS 'SpaceUsedMB'  --Addapted from https://sqlperformance.com/2014/12/io-subsystem/proactive-sql-server-health-checks-1
, (1- (FILEPROPERTY([name],'SpaceUsed') / CAST (size AS MONEY))) *100 AS 'PercentFree'
, growth / 128 as 'GrowthSettingMB'

 from sys.database_files
 order by type_desc Desc, name

Bạn có thể sử dụng GUI để thu nhỏ tệp nhật ký bằng cách thay đổi 'Kích thước ban đầu'

nhập mô tả hình ảnh ở đây

Nếu bạn gặp khó khăn trong việc thu nhỏ nhật ký, ngay cả khi nó trông gần như trống rỗng, hãy xem bài đăng của tôi ở đây


Wow kích thước ban đầu được đặt thành 21gb. Tôi không thể tưởng tượng được tại sao. Có thể cho một tệp nhật ký là "đầy đủ" khi nó đạt đến kích thước tối đa? Vì tôi đã thêm tác vụ thu nhỏ vào kế hoạch bảo trì của mình, nên có lẽ không bao giờ có thể đạt được kích thước tối đa nếu tôi đang chạy sao lưu và thu nhỏ thường xuyên?
SventoryMang

Actaully Tôi đang cố gắng thay đổi nó thành 500mb và nhấp vào ổn và nó trở lại thành 21gb.
SventoryMang

@SventoryMang Đọc liên kết ở dòng cuối cùng của câu trả lời của tôi.
James Jenkins

6
Vui lòng không thêm thu nhỏ vào kế hoạch bảo trì của bạn. Nếu tệp nhật ký của bạn đạt một kích thước nhất định, nó sẽ trở lại kích thước đó trong cùng một trường hợp. Do đó, thu hẹp giới thiệu một chi phí hiệu suất (cho thu hẹp và tái chế), nhưng không mang lại lợi ích lâu dài. Hướng dẫn sử dụng một lần thu nhỏ lại sau khi tăng tần suất sao lưu tệp nhật ký là OK, nhưng thu hẹp tệp nhật ký vì nhiệm vụ bảo trì thì không.
Brian

6

Lấy bản sao lưu này sẽ chỉ sao lưu dữ liệu và xóa nhật ký. Kích thước thực tế của nhật ký sẽ cần được thu nhỏ thông qua một DBCClệnh nếu bạn thực sự cần thu nhỏ nhật ký. Tùy thuộc vào tần suất bạn sao lưu tệp nhật ký của mình, nó có thể sẽ phát triển trở lại.

Hãy thử chạy nó để xem có bao nhiêu không gian thực tế trên nhật ký của bạn được chiếm.

SELECT 
    [TYPE] = A.TYPE_DESC
    ,[FILE_Name] = A.name
    ,[FILEGROUP_NAME] = fg.name
    ,[File_Location] = A.PHYSICAL_NAME
    ,[FILESIZE_MB] = CONVERT(DECIMAL(10,2),A.SIZE/128.0)
    ,[USEDSPACE_MB] = CONVERT(DECIMAL(10,2),A.SIZE/128.0 - ((SIZE/128.0) - CAST(FILEPROPERTY(A.NAME, 'SPACEUSED') AS INT)/128.0))
    ,[FREESPACE_MB] = CONVERT(DECIMAL(10,2),A.SIZE/128.0 - CAST(FILEPROPERTY(A.NAME, 'SPACEUSED') AS INT)/128.0)
    ,[FREESPACE_%] = CONVERT(DECIMAL(10,2),((A.SIZE/128.0 - CAST(FILEPROPERTY(A.NAME, 'SPACEUSED') AS INT)/128.0)/(A.SIZE/128.0))*100)
    ,[AutoGrow] = 'By ' + CASE is_percent_growth WHEN 0 THEN CAST(growth/128 AS VARCHAR(10)) + ' MB -' 
        WHEN 1 THEN CAST(growth AS VARCHAR(10)) + '% -' ELSE '' END 
        + CASE max_size WHEN 0 THEN 'DISABLED' WHEN -1 THEN ' Unrestricted' 
            ELSE ' Restricted to ' + CAST(max_size/(128*1024) AS VARCHAR(10)) + ' GB' END 
        + CASE is_percent_growth WHEN 1 THEN ' [autogrowth by percent, BAD setting!]' ELSE '' END
FROM sys.database_files A LEFT JOIN sys.filegroups fg ON A.data_space_id = fg.data_space_id 
order by A.TYPE desc, A.NAME; 

Nếu bạn thực sự có sẵn nhiều dung lượng trống, bạn có thể chạy DBCC SHRINKFILElệnh để đưa tệp nhật ký của bạn xuống bất kỳ kích thước nào bạn nghĩ nó nên có.

Chỉnh sửa: Bạn cũng có thể muốn kiểm tra DBCC LOGINFO;sau đó bạn có thể thấy bất kỳ mục nào đang được sử dụng bởi tệp nhật ký giao dịch của bạn vì chúng sẽ có trạng thái là hai.

TUY NHIÊN bất kỳ hoạt động nào khiến tệp nhật ký của bạn phát triển ở nơi đầu tiên có khả năng tiếp tục xảy ra. Từ những âm thanh của suy nghĩ bạn chỉ thực hiện một bản sao lưu nhật ký một ngày.

Những gì bạn nên làm là lấy nhiều bản sao lưu nhật ký trong suốt cả ngày giữa các bản sao lưu cơ sở dữ liệu đầy đủ của bạn. Tôi có thể khuyên bạn nên bắt đầu với hàng giờ và điều chỉnh để xem cuối cùng những gì phù hợp nhất với bạn. Bạn có thể tiếp tục thực hiện việc này thông qua các kế hoạch bảo trì nếu điều đó phù hợp với bạn. Thông thái khác, bạn có thể sử dụng các tập lệnh của Ola Hallengren để thiết lập một kế hoạch bảo trì. Có rất nhiều tùy chọn khác nhau để đi cùng và đối với hầu hết chúng đều khá tuyệt vời miễn là bạn thường xuyên sao lưu.


+1 cho CASE is_percent_growth KHI 1 THÌ '[tự động tăng theo phần trăm, cài đặt BAD!]
James Jenkins
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.