Có sao lưu cơ sở dữ liệu thu nhỏ kích thước nhật ký giao dịch?


8

Tôi đang cố gắng thu thập một số kiến ​​thức về cơ sở dữ liệu SQL và tôi có một số câu hỏi về tệp nhật ký giao dịch (LDF).

Trước hết, khi bạn tạo cơ sở dữ liệu, bạn phải xác định Kích thước tệp ban đầu cho cả cơ sở dữ liệu và tệp nhật ký. Từ những gì tôi có thể thấy, một khi các tệp được tạo trên đĩa, chúng sẽ có kích thước được chỉ định đó bất kể có dữ liệu thực tế trong cơ sở dữ liệu hay nếu có bất kỳ giao dịch (nhật ký) nào.

Hiểu biết của tôi là sao lưu cơ sở dữ liệu:

  1. Cắt bớt nhật ký giao dịch và
  2. Thu nhỏ kích thước

của tệp LDF trên đĩa bằng cách "làm trống" các bản ghi bên trong nó.

Bây giờ có vẻ như tôi đã không hiểu chính xác điều này vì tệp nhật ký dường như có kích thước cố định. Câu hỏi thực tế của tôi là như thế này:

Nhật ký cắt ngắn thực sự làm gì với tệp nhật ký (LDF)? Quá trình này được cho là để ngăn chặn đĩa đầy.

Xin vui lòng sửa cho tôi nếu tôi không hiểu một số khái niệm chính xác.

Cảm ơn bạn!

Câu trả lời:


20

Tệp nhật ký giao dịch (LDF) được tạo thành từ rất nhiều tệp nhật ký ảo (VLF) bên trong. Hãy nghĩ về nó giống như một cái tủ với một vài ngăn kéo kéo ra. Bạn có thể chọn một cái tủ lớn hoặc một cái tủ nhỏ - nhưng nó vẫn sẽ là một kích thước cố định chỉ với số lượng ngăn kéo khác nhau.

Khi SQL Server hoạt động, nó đặt các giao dịch của bạn vào các ngăn kéo (VLF.) Nó bắt đầu ở một đầu của tủ của bạn, lấp đầy ngăn kéo đầu tiên, sau đó khi hết không gian trong ngăn kéo đó, nó sẽ chuyển sang ngăn kéo tiếp theo.

Khi bạn sao lưu nhật ký giao dịch, điều bạn thực sự làm là:

  • Tìm ngăn kéo đầu tiên có giao dịch trong đó chưa được sao lưu
  • Sao chép các giao dịch đó ở nơi khác
  • Nếu ngăn kéo đó không còn được sử dụng tích cực nữa (vì SQL Server đã chuyển sang ngăn kéo tiếp theo), thì bạn đang đánh dấu ngăn kéo đó là có sẵn để sử dụng lại (nghĩ rằng đó là ném tất cả nội dung ra ngoài)

Sao lưu không thay đổi kích thước của tủ của bạn (tệp nhật ký).


Xin chào Brent, cảm ơn bạn đã làm rõ điều đó cho tôi, đánh giá cao nó! Vì vậy, về cơ bản, bạn không thể giảm kích thước của "tủ", bạn chỉ có thể làm trống các ngăn kéo. Bây giờ tôi đọc rất nhiều bài viết của những người nói về việc kích thước kích thước nhật ký. Điều đó có đề cập đến việc thu nhỏ kích thước của các VLF (nội dung của ngăn kéo) và thực sự làm mờ kích thước của tệp LDF trên đĩa không? Từ những gì tôi có thể hiểu bây giờ, bạn không thể nháy "cái tủ". Cảm ơn!
Anthony

@Anthony yep, bạn có thể giảm kích thước của tủ bằng cách thu nhỏ kích thước tệp nhật ký, nhưng nói chung, đó là một ý tưởng rất tồi (vì những lý do bạn đã đọc về.)
Brent Ozar

Tôi sẽ phủ quyết tuyên bố rằng thu nhỏ TLog là xấu. Truy cập Tlog là khá seq. trong thiên nhiên. Không có sự sắp xếp lại dữ liệu cần thiết khi thu nhỏ nhật ký (như đối với các tệp dữ liệu. Bạn chỉ có thể giải phóng không gian qua con trỏ hoạt động cuối cùng). Vì vậy, điều này không gây ra bất kỳ sự phân mảnh nào cả.
Heiko Hatzfeld

1
@HeikoHatzfeld phát triển nó trở lại là một hoạt động chặn và không thúc đẩy Khởi tạo tệp tức thì, do đó, nó rất chậm. Veto ghi đè. ;-)
Brent Ozar

Không có gì bạn làm một cách thường xuyên nhưng chỉ một lần sau khi bạn nhận thấy bạn đã không thiết lập một kế hoạch sao lưu chính xác ... Và yếu tố tăng trưởng phải là một kích thước hợp lý, không đổi. Dưới những điều kiện đó nó có thể chịu được.
Heiko Hatzfeld

6

Kết hợp và trộn

Sao lưu nhật ký giao dịch không giống như cắt bớt tệp nhật ký giao dịch và cắt bớt tệp nhật ký giao dịch không giống như thu hẹp tệp nhật ký giao dịch. Ồ vâng, và sao lưu tệp nhật ký giao dịch không phải kích hoạt cắt ngắn. Tùy thuộc vào tải hiện tại, công cụ cơ sở dữ liệu có thể quyết định đặt điểm kiểm tra, nhưng phải chờ một chút với việc cắt ngắn.

Giải thích

Tệp nhật ký giao dịch là nơi công cụ cơ sở dữ liệu lưu trữ các sửa đổi được thực hiện đối với dữ liệu trong cơ sở dữ liệu, bất kể cơ sở dữ liệu nằm trong mô hình khôi phục SIMPLE hoặc trong mô hình khôi phục FULL. (Quan trọng)

Bây giờ tệp nhật ký giao dịch của cơ sở dữ liệu không chỉ là một bộ lưu trữ liên tục, mà là một tập hợp các tệp nhật ký ảo (VLF) được tạo theo thứ tự tuần tự bên trong tệp Nhật ký giao dịch (TLog). Kích thước của các VLF thay đổi tùy thuộc vào phiên bản SQL Server nào bạn đang sử dụng và cũng tùy thuộc vào kích thước ban đầu bạn đã chọn trong khi tạo tệp TLog và kích thước bạn đã chọn (nếu có) cho cài đặt tăng trưởng tự động của Tập tin TLog.

Tham khảo:
- Thay đổi quan trọng đối với thuật toán tạo VLF trong SQL Server 2014 (SQLSkills.com)
- Số thứ tự VLF ban đầu và kích thước tệp nhật ký mặc định (SQLSkills.com)
- Bên trong Công cụ lưu trữ: Thông tin thêm về tính chất vòng tròn của nhật ký (SQLSkills. com)
... và có thể theo thứ tự ngược lại

Khi dữ liệu được sửa đổi trong cơ sở dữ liệu, Cơ sở dữ liệu sẽ ghi các thay đổi này vào TLog của cơ sở dữ liệu tương ứng để duy trì tính nhất quán giao dịch. Điều này cũng được gọi là ACID - Nguyên tử, Tính nhất quán, Cách ly, Độ bền . Các chuyển đổi thực tế của những thay đổi này được lưu trữ trong các VLF của TLog (tệp). Khi một VLF đầy, các giao dịch mới nhất sẽ được lưu trữ trong VLF có sẵn tiếp theo theo thứ tự.

Ngoại lệ

Tuy nhiên, nếu kết thúc tệp TLog, các sửa đổi sẽ được lưu trữ trong VLF đầu tiên ở đầu tệp TLog. (được giải thích trong Inside Engine Storage: Thông tin thêm về tính chất vòng tròn của nhật ký )

Khi không có các VLF khả dụng để lưu trữ các giao dịch mới và nếu cài đặt tăng trưởng tự động được định cấu hình, Công cụ cơ sở dữ liệu sẽ phát triển tệp TLog theo số lượng được xác định và tạo các VLF bổ sung tùy thuộc vào kích thước được xác định trong cài đặt tăng trưởng tự động và công thức giải thích trong Thay đổi quan trọng đối với thuật toán tạo VLF trong SQL Server 2014 . Các giao dịch tiếp theo có thể được lưu trữ trong VLF tiếp theo bên trong tệp TLog.

Sao lưu tệp TLog

Khi bạn kích hoạt bản sao lưu của tệp TLog, tất cả những gì bạn đang làm là báo cho công cụ cơ sở dữ liệu

  • hãy xem tập tin TLog
  • xác định thời điểm sao lưu nhật ký giao dịch cuối cùng xảy ra (LSN: Số thứ tự nhật ký; để nghiên cứu thêm)
  • đặt Điểm kiểm tra trong tệp TLog ( Điểm kiểm tra cơ sở dữ liệu (Máy chủ SQL) )
  • lưu trữ một bản sao lưu của tệp TLog trên đĩa / băng trong khi theo dõi LSN trước đó và LSN được cam kết cuối cùng ngay trước khi kết thúc sao lưu
  • chuyển tất cả các sửa đổi vào "cơ sở dữ liệu"
  • đánh dấu các VLF là có thể tái sử dụng

Cho đến nay, không có khoảng trống nào được phát hành bên trong tệp TLog để Cơ sở dữ liệu sử dụng lại ...

Tự động cắt bớt tệp TLog

... nhưng nếu Công cụ cơ sở dữ liệu có một số chu kỳ dự phòng và không phải chịu áp lực quá lớn, đôi khi nó sẽ xem xét tệp TLog, hãy chú ý Điểm kiểm tra và giải phóng các VLF để sử dụng lại. Không gian bên trong tệp TLog vẫn được sử dụng bởi các VLF (cùng kích thước, cùng vị trí) nhưng chúng được sử dụng lại miễn phí.

Điều này được ghi lại trong Cắt ngắn Nhật ký giao dịch :

Ngoại trừ khi bị trì hoãn vì một số lý do, việc cắt bớt nhật ký xảy ra tự động như sau: - Theo mô hình khôi phục đơn giản, sau một điểm kiểm tra.

  • Trong mô hình khôi phục đầy đủ hoặc mô hình khôi phục được ghi nhật ký hàng loạt, sau khi sao lưu nhật ký, nếu một điểm kiểm tra đã xảy ra kể từ lần sao lưu trước. Để biết thêm thông tin, hãy xem "Cắt ngắn nhật ký trong các mô hình khôi phục được đăng nhập đầy đủ và hàng loạt", sau đó trong chủ đề này.

Có một số trường hợp khi điều này không xảy ra:

Mặc dù tự động, việc cắt bớt log có thể bị trì hoãn bởi nhiều yếu tố. Để biết thông tin về những gì có thể trì hoãn cắt ngắn nhật ký, hãy xem Các yếu tố có thể trì hoãn cắt ngắn nhật ký .

Hình dung cắt ngắn đăng nhập

Việc cắt bớt nhật ký có thể được quan sát khi bạn truy vấn kích thước TLog bằng cách sử dụng các câu lệnh SQL hoặc báo cáo Không gian cơ sở dữ liệu trong giao diện người dùng SSMS. Bạn có thể quan sát rằng không gian được sử dụng bên trong tệp TLog có thể chỉ bằng 1% kích thước tệp TLog có sẵn.

Thu nhỏ hoặc không thu nhỏ

Khuyến cáo chung là không thu nhỏ tệp TLog, vì nó đã phát triển vì một lý do nhất định và có thể sẽ phát triển trở lại với kích thước như trước đây. Nhưng đó là một câu chuyện cho một bài viết khác. Có một số lý do chính đáng, đó là khi bạn đang tạo lại kích thước của các VLF bên trong tệp TLog của mình.

Trả lời câu hỏi của bạn

Nội tuyến ngay dưới các giả định và câu hỏi của bạn

Hiểu biết của tôi là sao lưu cơ sở dữ liệu:

  • Cắt bớt nhật ký giao dịch và

Đây là một giả định sai. Sao lưu cơ sở dữ liệu của bạn (ĐẦY ĐỦ, KHÁC BIỆT) không làm gì với các tệp TLog. Một bản sao lưu FULL sẽ tạo một trạng thái nhất quán cho cơ sở dữ liệu của bạn cùng với các giao dịch đã cam kết tạo thành tệp TLog. Một bản sao lưu DIFF sẽ tạo ra một trạng thái nhất quán của tất cả các bản sao lưu TLog trong quá khứ kể từ lần sao lưu FULL cuối cùng của cơ sở dữ liệu của bạn.

Tuy nhiên, Sao lưu TLOG sẽ tạo bản sao lưu các giao dịch đã cam kết từ tệp TLog, đặt điểm kiểm tra và có thể (khi không tải nặng) giải phóng các VLF để sử dụng lại.

  • Thu nhỏ kích thước

Không, khi xem xét các bản sao lưu FULL và DIFF. Không, khi xem xét các bản sao lưu TLOG, nhưng nó sẽ giải phóng các VLF bên trong tệp TLog, nếu công cụ cơ sở dữ liệu có thời gian rảnh.

Nhật ký cắt ngắn thực sự làm gì với tệp nhật ký (LDF)? Quá trình này được cho là để ngăn chặn đĩa đầy.

Cắt bớt các bản ghi cho phép các VLF được sử dụng lại. Đó là tất cả.

Quá trình này có thể có lợi ích ngăn chặn tệp TLog phát triển cài đặt tự động tăng trưởng IF đã được đặt.

Nếu không có cài đặt tăng trưởng tự động nào được đặt , vì quy trình kỹ thuật yêu cầu của bạn xác định rằng tệp TLog sẽ có kích thước cố định, thì trường hợp xấu nhất ở đây là TLog sẽ lấp đầy vì không có bản sao lưu TLog nào xảy ra và do đó không có VLF nào được giải phóng. TLog không thể phát triển và các VLF không được giải phóng để cho phép các giao dịch tiếp theo được ghi vào tệp TLog (hoặc nội bộ VLF).


4

Mặc dù Brent Ozar đã giải thích cho bạn về cách tệp nhật ký giao dịch trông giống như tôi sẽ tập trung vào các câu hỏi nhất định của bạn

Hiểu biết của tôi là sao lưu cơ sở dữ liệu:

  • Cắt bớt nhật ký giao dịch và
  • Thu nhỏ kích thước

Sao lưu toàn bộ không có gì để ghi nhật ký giao dịch trong bất kỳ mô hình phục hồi nào. Trong mô hình khôi phục đầy đủ khi bạn thực hiện sao lưu nhật ký giao dịch, sau đó nó cắt bớt nhật ký. Xin lưu ý rằng nếu một giao dịch dài hạn vẫn còn giữ VLF hoặc theo giải thích của Brent vẫn cần các ngăn kéo thì giao dịch khác không thể sử dụng lại ngăn kéo hoặc về mặt kỹ thuật, nó sẽ không bị cắt bớt để có thể sử dụng lại.

Nó cũng không thu nhỏ nhật ký giao dịch. Để thu nhỏ nhật ký, bạn phải sử dụng dbcc shrinkfilelệnh

Nhật ký cắt ngắn thực sự làm gì với tệp nhật ký (LDF)? Quá trình này được cho là để ngăn chặn đĩa đầy.

Nó làm cho tệp nhật ký có thể được sử dụng lại để các giao dịch khác có thể sử dụng nó hoặc theo sự tương tự của Brent, người khác có thể sử dụng các ngăn kéo để giữ ở đó.

Sau khi xem qua câu trả lời, tôi thực sự khuyên bạn nên đọc về nhật ký giao dịch trên SQLSKILLS.com


Cảm ơn Shanky, thực sự đánh giá cao bạn giải thích! Vì vậy, khi sao lưu các bản ghi rút ngắn, chúng thực sự không làm giảm kích thước của tệp LDF, chúng chỉ "tạo khoảng trống" cho các giao dịch khác được xử lý bên trong tệp nhật ký đó. Tôi có đúng khi giả định điều này? Cảm ơn!
Anthony

Bạn hoàn toàn chính xác.
Shanky
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.