SQL Rebuild Index, Recovery Model và db logize?


7

Tôi có một cơ sở dữ liệu mà chúng tôi hiện đang chạy các bản sao lưu nhật ký giao dịch trong suốt cả ngày, cứ sau 30 phút là chính xác và chúng tôi chạy một bản sao lưu đầy đủ mỗi ngày vào lúc 2 giờ sáng.

Mỗi thứ bảy lúc 3 giờ sáng, chúng tôi có một thiết lập công việc để xây dựng lại các chỉ mục trên tất cả các bảng.

Điều đó đang được nói, việc xây dựng lại chỉ mục khiến nhật ký giao dịch của chúng tôi tăng trưởng rất nhiều. Tôi đang chơi với những ý tưởng khác nhau để giảm bớt dung lượng ổ đĩa cần thiết (khoảng 25gb chỉ mục lại bài).

Tôi đã xem xét việc thiết lập mô hình khôi phục cơ sở dữ liệu thành đơn giản trước khi thực hiện lại nhiệm vụ, để ngăn tất cả việc xây dựng lại chỉ mục khỏi bị ghi lại, và sau đó thiết lập lại thành đầy đủ sau khi quá trình xây dựng lại hoàn tất.

Có ai khác sử dụng phương pháp này? Hoặc bất cứ ai có thể cung cấp cái nhìn sâu sắc / lời khuyên về lý do tại sao điều này có thể là một ý tưởng tồi? Hoặc bất kỳ mẹo nào về cách xử lý các tệp nhật ký khổng lồ trong khi thực hiện các tác vụ bảo trì db?

Câu trả lời:


3

Có một số cân nhắc ở đây:

  • Đơn giản hoặc đầy đủ, cùng một dữ liệu sẽ được ghi vào nhật ký giao dịch. Sự khác biệt là trong phục hồi đơn giản, nhật ký sẽ bị cắt ngắn giữa các hoạt động, toàn bộ bạn cần sao lưu nhật ký vào không gian nhật ký miễn phí để được sử dụng lại.
  • Một hoặc hai bảng có thể chịu trách nhiệm cho phần lớn sự phân mảnh. Nếu đó là trường hợp, bạn có thể thấy nhật ký của mình tăng lên kích thước tương tự bất kể mô hình khôi phục.
  • Bạn đã xác định rằng cơ sở dữ liệu này yêu cầu khôi phục hoàn toàn. Bạn có thể mạo hiểm để chuyển sang đơn giản, một vấn đề xảy ra và không thể khôi phục tại thời điểm?
  • Quá trình bảo trì của bạn tạo ra 25GB nhật ký. Trên cơ sở hiện đại, mảng SAN trả tiền không phải là một đĩa đắt tiền bạn cần.

Một cách tiếp cận tôi đã thực hiện trong quá khứ là kết hợp sao lưu nhật ký vào các tập lệnh reindex / xây dựng lại. Ghi lại kích thước nhật ký và tỷ lệ phần trăm miễn phí trước khi xử lý mỗi bảng, kiểm tra tỷ lệ phần trăm và kích thước miễn phí sau đó. Nếu ít hơn x% dung lượng là miễn phí hoặc nếu tăng trưởng nhật ký đã xảy ra, hãy sao lưu nhật ký.


Tôi đánh dấu đây là câu trả lời, vì tôi tin rằng chúng ta sẽ xem xét kịch bản tùy chỉnh để thực hiện việc xây dựng lại chỉ mục, dựa trên tỷ lệ phần trăm phân mảnh hiện tại của mỗi chỉ mục. Và chúng tôi cũng sẽ thực hiện kết xuất nhật ký giao dịch trong tập lệnh để xóa khoảng trống.
jonvan

7

Chuyển sang SIMPLE có nghĩa là bạn phá vỡ chuỗi nhật ký. Khi bạn 'hoàn nguyên' thành FULL, bạn cần bắt đầu một chuỗi nhật ký mới, nghĩa là bạn phải sao lưu toàn bộ và bắt đầu lấy lại các bản sao lưu nhật ký mới. Việc chuyển sang đơn giản, bất kể ngắn đến đâu, thực tế sẽ tạo ra một 'epoch' mới trong chuỗi sao lưu của bạn, vì mọi sao lưu từ trước khi chuyển sang đơn giản không còn có thể được áp dụng cho cơ sở dữ liệu sau khi chuyển đổi, cũng không theo cách khác.

Vì vậy, tại thời điểm này, bạn phải dừng lại và suy nghĩ: yêu cầu kinh doanh nào đã khiến bạn có mô hình phục hồi ĐẦY ĐỦ để bắt đầu? Dù đó là lý do gì đi nữa, không chắc là nó có thể bị 'treo' vào mỗi thứ Bảy lúc 3 giờ sáng và không chắc là nó sẽ chịu đựng được tình trạng 'kỷ nguyên' của bạn, trong đó bạn có thể khôi phục lại thời gian từ Thứ Sáu đến Thứ Năm, nhưng bạn không thể từ Thứ Bảy đến thứ sáu vì thứ bảy là một "kỷ nguyên" mới. Nói cách khác, nếu bạn có một yêu cầu kinh doanh cho mô hình phục hồi FULL, thì tốt nhất bạn không nên phá vỡ nó.

Nhưng nếu bạn không có yêu cầu kinh doanh cho mô hình phục hồi ĐẦY ĐỦ, thì bạn có chỗ để chơi. Và tôi không có ý chuyển sang SIMPLE, ý tôi là sử dụng mô hình phục hồi 'khác': BULK_LOGGED. Lý do các hoạt động reindex của bạn tạo ra nhật ký đa dạng là vì chúng xảy ra trong mô hình phục hồi FULL. Trong BULK_LOGGED, việc xây dựng lại chỉ mục (cả ngoại tuyến và trực tuyến) sẽ sử dụng các hoạt động được ghi nhật ký tối thiểu, xem Các hoạt động có thể được ghi nhật ký tối thiểu :

Nếu cơ sở dữ liệu được đặt thành mô hình khôi phục được ghi nhật ký đơn giản hoặc hàng loạt, một số thao tác DDL chỉ mục được ghi lại tối thiểu cho dù thao tác được thực hiện ngoại tuyến hay trực tuyến. Các hoạt động chỉ mục được ghi tối thiểu như sau:

  • TẠO các hoạt động INDEX (bao gồm các khung nhìn được lập chỉ mục).
  • ALTER INDEX REBUILD hoặc DBCC DBREINDEX hoạt động.
  • DROP INDEX xây dựng lại heap mới (nếu có).

Vì vậy, nếu có thể, hãy chuyển mô hình khôi phục cơ sở dữ liệu sang BULK_LOGGED và để nguyên như vậy.


4
SQL2008 + tất cả các hoạt động xây dựng lại chỉ mục trực tuyến đều được ghi lại đầy đủ, vì vậy BULK_LOGGED sẽ không giúp ích. Xem Bạn có thể nhận thấy kích thước nhật ký giao dịch tăng lên trong SQL Server 2008 và các phiên bản mới hơn khi bạn thực hiện Bảo trì chỉ mục .
Mark Storey-Smith

Nếu chúng tôi chạy một bản sao lưu đầy đủ trước khi xây dựng lại, sau đó chuyển sang chế độ đơn giản để xây dựng lại. Khi công việc xây dựng lại kết thúc nếu tôi chuyển trở lại đơn giản và chạy một bản sao lưu đầy đủ khác, tôi có nên được bảo hiểm không? Ngoài 15 phút hoặc lâu hơn để nhiệm vụ xây dựng lại đang chạy? Tôi có thể sẽ đi theo lộ trình xây dựng một kịch bản để thực hiện việc xây dựng lại chỉ mục và kết hợp các bản sao lưu nhật ký trong toàn bộ kịch bản. Tuy nhiên, tôi nghĩ về lâu dài, điều đó vẫn sẽ cần thêm dung lượng ổ cứng bổ sung. Nhưng tôi nghĩ rằng điều đó vẫn sẽ có lợi hơn là có một tệp nhật ký 25gb để cắt bớt.
jonvan

4

Lưu ý rằng trong khi bạn ở chế độ "đơn giản", bạn sẽ mất khả năng khôi phục đến một thời điểm từ các bản sao lưu nhật ký giao dịch.

Khi bạn chuyển về chế độ "đầy đủ", bạn phải thực hiện sao lưu toàn bộ để thiết lập lại chuỗi nhật ký. Bạn sẽ không thể tiếp tục sao lưu nhật ký giao dịch cho đến khi bạn thực hiện sao lưu toàn bộ.

Chúng tôi đang vật lộn với điều tương tự ở đây, và cho đến nay kế hoạch là thực hiện sao lưu nhật ký thường xuyên hơn và giữ chúng trên bộ nhớ ngoài (tức là không phải trên cùng một máy chủ).


Vâng, tôi nghĩ rằng chúng ta có thể hy sinh chút thời gian đó trong quá trình xây dựng lại chỉ số. Nhiệm vụ xây dựng lại của chúng tôi chỉ kéo dài khoảng 15 phút và không nên có nhiều dữ liệu mới vào hệ thống lúc 3 giờ sáng. Vì vậy, về cơ bản tôi chỉ cần nhìn vào bản sao lưu đầy đủ thứ hai để khởi động lại chuỗi nhật ký.

1

Trước khi xem xét thay đổi sang chế độ đơn giản, tôi sẽ xem xét:

  1. Thay đổi chỉ mục xây dựng lại công việc để chỉ xây dựng lại dựa trên mức độ phân mảnh.
  2. Phân vùng, chỉ xây dựng lại các phân vùng hoạt động.
  3. Truyền tải khối lượng công việc qua nhiều đêm.
  4. Kiểm tra các chỉ mục được nhóm của bạn để đảm bảo chúng phù hợp với bổ sung hồ sơ của bạn.
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.