Có phải khởi động lại SQL Server tăng tốc không?


22

Tôi đã nhận thấy rằng một số DBA khởi động lại SQL Server rất thường xuyên, đôi khi thậm chí hàng đêm. Tôi tin rằng họ làm điều đó để giải phóng bộ nhớ, hoặc có lẽ để tăng tốc truy vấn. Tôi biết rằng sau khi khởi động lại, các kế hoạch truy vấn phải được biên dịch lại, nhưng thậm chí bao gồm cả điều đó tôi tự hỏi liệu có lợi ích ròng cho thực tiễn này hay không.

Có đúng là khởi động lại SQL Server hàng ngày làm cho nó chạy nhanh hơn không?

Câu trả lời:


37

Khởi động lại máy chủ có lẽ là một trong những điều gây tổn hại nhất cho hiệu suất. Điều đó có nghĩa là bạn buộc một bộ đệm lạnh cho dữ liệu, một bộ đệm lạnh cho các kế hoạch truy vấn và tất cả các bộ đệm trong của SQL Server cũng được xử lý trong quá trình này. Chưa kể rằng bằng cách vứt bỏ tất cả các số liệu thống kê được thu thập trong các DMV thống kê hoạt động, bạn sẽ làm giảm cơ hội điều tra thành công một cái gì đó.

Không có hướng dẫn chính thức ủng hộ thực hành này, tôi chưa bao giờ thấy nó được đề cập trong bất kỳ công việc có uy tín thực hành tốt nào, tôi chưa bao giờ nghe nói về một chuyên gia có uy tín từng đề cập đến điều này như là một thực tiễn. Đừng làm điều đó.


Tôi không đồng ý. SQL Server được lưu trữ trên máy chủ Windows nơi có các bản vá bảo mật và các bản nâng cấp MS yêu cầu khởi động lại định kỳ. Tôi tin rằng thiết kế SQL tốt hơn là chìa khóa để giải quyết các vấn đề về hiệu năng và không dựa vào việc khởi động lại máy chủ, nhưng đôi khi đó là một bước cần thiết.
Fandango68

27

Mặc dù các câu trả lời khác đều tốt, nhưng chúng lại thiếu một phần quan trọng: bộ đệm tệp của Windows.

Trên Windows 64 bit, không có giới hạn dung lượng bộ nhớ Windows sẽ sử dụng để lưu trữ tệp. Windows có thể khiến hệ thống của bạn cạn kiệt hoàn toàn bộ nhớ và tại thời điểm đó, bạn sẽ bắt đầu hoán đổi sang đĩa. Nó đã được ghi nhận ở một vài nơi:

Bằng cách khởi động lại SQL Server, bạn buộc SQL từ bỏ bộ nhớ, từ đó cho phép Windows nhận được nhiều hơn và tạm thời dừng phân trang. SQL sẽ bắt đầu lại khi sử dụng bộ nhớ gần như bằng không và dần dần tăng lên và khi hộp hết bộ nhớ một lần nữa, việc khởi động lại sẽ giúp tạm thời. Bằng cách khởi động lại toàn bộ HĐH, bạn cũng sẽ buộc sử dụng bộ đệm tệp của Windows.

Cách khắc phục thực sự: dừng sao chép tệp từ máy chủ Windows hoặc giới hạn số lượng bộ đệm tệp được sử dụng với Dịch vụ bộ đệm tệp động như được ghi trong các bài đăng trên blog.


3
+1 Nhận thức được vấn đề, không biết bộ đệm có thể bị hạn chế khi sử dụng dịch vụ bộ đệm động.
Mark Storey-Smith

Việc thực hành "ghim" bộ nhớ thành MIN và MAX (mặc dù chúng nên và có thể là cùng một lượng KB) để đảm bảo SQL Server chỉ tiêu thụ một lượng MIN / MAX RAM được xác định trước cho phép các dịch vụ / ứng dụng Windows khác / yêu cầu kết nối mạng để tiếp tục hoạt động. Đây là thực tế của tôi và đã làm việc tốt. Còn suy nghĩ nào khác không?
SnapJag

@SnapJag - không nhất thiết, vì SQL không tiêu thụ số tiền tối thiểu ngay lập tức. SQL bắt đầu từ 0 và tăng dần dựa trên nhu cầu.
Brent Ozar

11

Nếu nó tăng tốc truy vấn, việc đánh hơi tham số có thể được tham gia. Nếu một kế hoạch tào lao được lưu trữ và áp dụng cho các cuộc gọi tiếp theo không phù hợp, thì phép màu khởi động lại cho phép kế hoạch chung / chính xác được lưu vào bộ đệm. Nếu đó là trường hợp, có nhiều cách tốt hơn để sửa chữa hành vi như những người khác đã chỉ ra. Nhưng cho đến khi họ ngừng khởi động lại hộp, không có cách nào để thực hiện phân tích nguyên nhân gốc rễ.


Đây phải là câu trả lời được chấp nhận. Thiết kế kế hoạch và thiết kế SQL phù hợp, rất quan trọng để tránh sự cần thiết phải khởi động lại máy chủ, nhưng dù sao thì việc khởi động lại máy chủ có thể là cần thiết do chính sách của máy chủ - chẳng hạn như các bản vá bảo mật, v.v.
Fandango68

11

Bạn không nên khởi động lại SQL Server trừ khi bạn đã thay đổi thuộc tính dịch vụ hoặc đặt dấu vết khởi động mà bạn muốn có hiệu lực ngay lập tức.

Như @RemusRusanu đã nêu nhiều điểm, nó xóa rất nhiều bộ nhớ cache và khiến SQL Server thực hiện nhiều công việc khởi động không cần thiết .

Có vẻ như máy chủ này không phải là máy chủ SQL / máy chủ cơ sở dữ liệu chuyên dụng. Cách tốt nhất là có một máy chủ cơ sở dữ liệu sản xuất chỉ có một mục đích ... là máy chủ cơ sở dữ liệu. Trong trường hợp đó, bạn sẽ dành đủ bộ nhớ và tài nguyên cho HĐH và cung cấp mọi thứ khác cho SQL Server. Điều này sẽ khiến bạn không bỏ đói bất kỳ ứng dụng hoặc vai trò máy chủ nào khác.


2

Tôi đồng ý với tình cảm rằng nếu bạn đang làm mọi thứ đúng, thì bạn có thể không cần phải Khởi động lại / Khởi động lại Máy chủ MSSQL của mình.
Đối với tôi điều này áp dụng cho kịch bản mà mọi người đều có năng lực và bạn có thể sửa chữa mọi thứ.

Tôi không phải là một DBA. Tôi là một Kiến trúc sư phần mềm và một phần trong đó liên quan đến việc xây dựng toàn bộ Lược đồ cơ sở dữ liệu từ đầu và thật không may , làm việc với Cơ sở dữ liệu của bên thứ 3 mà tôi hoàn toàn KHÔNG có quyền kiểm soát.
Những người, người đã tạo và duy trì một trong những Cơ sở dữ liệu của bên thứ 3 chính của chúng tôi, hầu như không làm cho nó hoạt động.

Tôi có đề cập đến việc tôi cũng không phải là Chuyên gia bảo mật hay Kỹ sư mạng không?

  • Ít nhất một Cập nhật hệ điều hành chính, Cập nhật bảo mật, Cập nhật BIOS, Gói dịch vụ OS / MSSQL hoặc Cập nhật tích lũy MSSQL sẽ được phát hành mỗi tháng hoặc hai tháng.
  • Áp dụng những điều này một cách kịp thời có nghĩa là Khởi động lại / Khởi động lại Máy chủ của bạn vào mỗi quý.
  • Ngay cả khi hoạt động bên trong Intranet, tại sao bạn không áp dụng Cập nhật bảo mật?
  • Nếu tôi được phép có SSL trên các trang web PHI Intranet của chúng tôi, tôi sẽ làm điều đó vì không có mạng nào là không thể sai được. Tôi đoán là hoang tưởng.


Đối với tôi câu hỏi sau đó trở thành: Tôi có nên khởi động lại SQL Server thường xuyên hơn 3 tháng một lần không?

Lập kế hoạch Khởi động lại cho lời hứa về một inch hiệu suất thêm, giống như nhảy cho mưa.
Có thể nó sẽ đến, có thể nó sẽ không, nhưng bạn sẽ không biết chắc chắn điều gì đã gây ra mưa.

  • Nếu bạn nhận thấy một vết sưng hiệu suất đáng kể sau khi khởi động lại máy chủ do bảo trì thường xuyên, thì bạn nên điều tra lý do tại sao điều đó xảy ra.
  • Nếu bạn gặp sự cố và không chắc chắn điều gì gây ra chúng, thì khi bạn giảm các biến của mình bằng cách dừng dịch vụ và công việc để tìm thứ gì đó như rò rỉ bộ nhớ (trong trường hợp cực đoan như thế này), có thể khởi động lại / khởi động lại máy chủ của bạn khi một số dịch vụ được bật tắt (hoặc dấu vết được bật) sẽ giúp bạn loại trừ các dịch vụ khác là nguyên nhân.

Tôi không thích nói rằng bạn KHÔNG BAO GIỜ cần phải khởi động lại nó để khắc phục một vấn đề hoặc xác minh failover, nhưng tôi làm có một vấn đề với Khởi động lại kế hoạch để giữ cho một vấn đề hiệu suất chưa biết xảy ra một cách ngẫu nhiên.

Các Chỉ ngoại lệ là nếu bạn quản lý một rogue Cơ sở dữ liệu 3rd Party nơi khởi động lại nó mỗi tuần hoặc hai có vẻ là cách duy nhất để giữ cho nó hoạt động và bạn không được phép để sửa chữa hoặc thậm chí chạm vào nó.
Thậm chí sau đó, bạn nên tìm kiếm các bản sửa lỗi, chia sẻ chúng với chủ sở hữu và nâng cao địa ngục cho đến khi nó được giải quyết.

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.