it-swarm-vi.tech

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

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?

44
Paul Randal

(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 rãi Nice 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ữ SQL Server 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ý, rất hữu ích và cần thiết trong trường hợp này.

Vì vậy, hãy tự giúp mình - 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á Lời cho đồ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!

71
Paul Randal

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.

4
Sam

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 khích 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
David Spillett

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

1
Jeremy Thake

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 không.
1
Carl C

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 đề.)

1
SuperCoolMoss

Ngoài ra hãy xem video hướng dẫn này ....

Xem Paul Randal chứng minh làm thế nào thu nhỏ và tự động thu hẹp có thể gây ra sự cố phân mảnh nghiêm trọng cho cơ sở dữ liệu của bạn http://wtv.watchtechideo.com/topic194.html

1
Sakthivel Chidambaram