Có an toàn khi bật SQL Server tự động thu nhỏ không?


44

Có nhiều tùy chọn SQL Server có thể được kích hoạt cho cơ sở dữ liệu và một trong những tùy chọn bị hiểu lầm nhất là tự động thu nhỏ. Nó có an toàn không? Nếu không, tai sao không?

Câu trả lời:


70

(Ban đầu tôi hỏi như một câu hỏi thông thường nhưng sau đó tìm ra phương pháp đúng - cảm ơn BrentO)

Không bao giờ.

Tôi đã bắt gặp điều này nhiều lần trên ServerFault và muốn tiếp cận đối tượng rộng đẹp với một số lời khuyên tốt. Nếu mọi người cau mày với cách làm việc này, hãy downvote và tôi sẽ loại bỏ điều này một cách vui vẻ.

Tự động thu nhỏ là một cài đặt cơ sở dữ liệu rất phổ biến đã được bật. Có vẻ như là một ý tưởng tốt - loại bỏ không gian thừa từ cơ sở dữ liệu. Có rất nhiều 'DBA không tự nguyện' ngoài kia (nghĩ rằng TFS, SharePoint, BizTalk hoặc chỉ là SQL Server cũ thông thường) có thể không biết rằng tự động thu nhỏ là xấu tích cực.

Trong khi tại Microsoft, tôi đã từng sở hữu Công cụ lưu trữ máy chủ SQL và đã cố gắng loại bỏ tính năng tự động thu nhỏ, nhưng nó phải ở lại để tương thích ngược.

Tại sao tự động thu nhỏ lại rất tệ?

Cơ sở dữ liệu có khả năng chỉ phát triển trở lại, vậy tại sao lại thu nhỏ nó?

  1. Shrink-grow-co-grow gây ra sự phân mảnh cấp độ hệ thống tệp và mất nhiều tài nguyên.
  2. Bạn không thể kiểm soát khi nó khởi động (mặc dù nó là thường xuyên)
  3. Nó sử dụng nhiều tài nguyên. Di chuyển các trang xung quanh cơ sở dữ liệu cần CPU, nhiều IO và tạo ra nhiều nhật ký giao dịch.
  4. Đây là kicker thực sự: thu nhỏ tệp dữ liệu (cho dù tự động hay không) gây ra sự phân mảnh chỉ mục lớn, dẫn đến hiệu suất kém.

Tôi đã viết một bài blog một lúc trước có một đoạn mã SQL ví dụ cho thấy các vấn đề mà nó gây ra và giải thích chi tiết hơn một chút. Xem Tự động thu nhỏ - TẮT nó! (không có quảng cáo hoặc rác như thế trên blog của tôi). Đừng nhầm lẫn điều này với việc thu nhỏ tệp nhật ký, đôi khi rất hữu ích và cần thiết.

Vì vậy, hãy ủng hộ - tìm trong cài đặt cơ sở dữ liệu của bạn và tắt tự động thu nhỏ. Bạn cũng không nên thu hẹp trong kế hoạch bảo trì của mình, vì lý do chính xác như vậy. Truyền bá cho các đồng nghiệp của bạn.

Chỉnh sửa: Tôi nên thêm điều này, được nhắc nhở bởi câu trả lời thứ hai - có quan niệm sai lầm phổ biến rằng làm gián đoạn một hoạt động thu nhỏ có thể gây ra tham nhũng. Không, nó sẽ không. Tôi đã từng sở hữu mã thu nhỏ trong SQL Server - nó quay lại di chuyển trang hiện tại mà nó đang làm nếu bị gián đoạn.

Hi vọng điêu nay co ich!


Có cách nào bạn có thể lập chỉ mục lại ngay sau khi thu nhỏ không?
Lance Roberts

4
Không reindex vì điều đó sẽ phát triển lại tệp (xây dựng chỉ mục mới trước khi loại bỏ tệp cũ), nhưng thực hiện sắp xếp lại (thông qua DBCC INDEXDEFRAG cũ của tôi hoặc ALTER INDEX mới ... REORGANIZE) sẽ phân loại thêm IO, cpu, đăng nhập ...
Paul Randal

Tôi nhận thấy rằng sau khi xóa autoshrink, mức sử dụng bộ nhớ của srrver cao hơn.
dùng193655

4

Tất nhiên, Paul đúng.

Xem tất cả các DB và cài đặt tự động thu nhỏ của chúng. Nếu bạn có nhiều cơ sở dữ liệu, người ta sẽ lẻn vào.

sp_msforeachdb  @command1 = 'Select ''[?]'',DATABASEPROPERTYEX(''?'',''IsAutoShrink'')'

Đây có phải là ở đâu đó của dmv .... Tôi tự hỏi.


2
sys.database có một trường is_auto_shrink (và is_auto-close, is_auto_update_stats, v.v.)
Paul Randal

great im googling: làm thế nào tôi có một báo cáo giúp chúng tôi biết dbs nào được cấu hình là autoshrink và mã của bạn chạy tốt và tạo báo cáo tốt từ tất cả db cho chúng tôi
saber tabatabaee yazdi 14/2/2017

2

Nó không "không an toàn" - nó sẽ không làm hỏng bất cứ thứ gì.

Nhưng nó không được khuyến nghị cho các môi trường sản xuất nơi cơ sở dữ liệu có thể quyết định tắt và bắt đầu một bài tập sắp xếp lại đắt tiền ngay trước khi một đống yêu cầu xuất hiện khiến những yêu cầu đó mất nhiều thời gian hơn để được phục vụ. Bạn sẽ tốt hơn nhiều khi sử dụng lập lịch các hoạt động thu nhỏ cùng với các hoạt động bảo trì khác như sao lưu (thực ra là sau khi sao lưu - sẽ nhiều hơn từ nhật ký giao dịch theo cách đó). Hoặc hoàn toàn không thu hẹp trừ khi có vấn đề về tăng trưởng - bạn luôn có thể thiết lập màn hình để cho bạn biết khi không gian được phân bổ không sử dụng tăng vượt quá tỷ lệ nhất định hoặc kích thước cố định.

IIRC tùy chọn tắt theo mặc định cho tất cả các cơ sở dữ liệu trong tất cả các phiên bản MSSQL ngoại trừ Express.


2
Shrinks không nên được lên lịch - chúng nên là hoạt động thực sự hiếm vì những vấn đề chúng gây ra. Tôi không hiểu nhận xét của bạn về việc thực hiện thu nhỏ sau khi sao lưu - các bản ghi nhật ký được tạo bởi hoạt động thu nhỏ sẽ được chọn bởi bản sao lưu nhật ký giao dịch tiếp theo bất kể khi nào bạn thực hiện hoặc sao lưu khác. Cảm ơn
Paul Randal

1

Có một whitepaper có sẵn trên TechNet giải thích chi tiết hơn về bảo trì SQL.

http://technet.microsoft.com/en-us/l Library / cc262731.aspx


Thật không may, whitepaper chỉ nhằm mục đích cài đặt SharePoint và thực sự có một số lỗi. Tôi chỉ dành thời gian giảng dạy lớp SharePoint MCM hiện tại với tác giả của whitepaper, Bill Baer.
Paul Randal

3
Giới thiệu chung về bảo trì cơ sở dữ liệu là trong bài viết trên Tạp chí TechNet của tôi về chủ đề Bảo trì cơ sở dữ liệu hiệu quả - technet.microsoft.com/en-us/magazine/cc671165.aspx .
Paul Randal

1

Tôi đã thấy một máy chủ SQL có bật cả Autogrow và Autoshrink. Máy chủ (tương đối mạnh) này hoạt động rất chậm, bởi vì tất cả những gì nó làm cả ngày là thu nhỏ và phát triển các tệp cơ sở dữ liệu. Autoshrink có thể hữu ích, nhưng tôi khuyên bạn nên hai điều:

  1. Tắt Autoshrink theo mặc định.
  2. Tài liệu cấu hình máy chủ của bạn, để bạn biết nơi Autogrow và Autoshrink được bật và nơi chúng không.

1

Lần duy nhất tôi bị buộc phải thu hẹp cơ sở dữ liệu là làm mới một bản sao trên máy chủ thử nghiệm với ít dung lượng đĩa hơn (không đủ để giữ cơ sở dữ liệu sản xuất).

(Các) tệp của cơ sở dữ liệu sản xuất có không gian trống rộng rãi, thật không may, bạn phải khôi phục cơ sở dữ liệu có cùng kích thước tệp như bạn đã sao lưu. Vì vậy, không có lựa chọn nào ngoài việc thu hẹp sản xuất trước khi sao lưu. (Việc thu hẹp mất nhiều thời gian, rất nhiều tài nguyên đã được tiêu thụ và sự tăng trưởng nhật ký giao dịch tiếp theo là có vấ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.