SQL Server trở nên chậm hơn theo thời gian cho đến khi chúng tôi phải khởi động lại nó


8

Chúng tôi có một cơ sở dữ liệu với khối lượng công việc OLAP / OLTP hỗn hợp. Các truy vấn khá đặc biệt và được tạo động trong máy chủ ứng dụng trung cấp. Khi chúng tôi khởi động máy chủ, hiệu suất hoàn toàn chấp nhận được, nhưng mức tiêu thụ bộ nhớ sẽ ngày càng nhiều hơn cho đến khi hết bộ nhớ khả dụng (30 GB). Sau đó, hệ thống ngày càng chậm hơn.

Các lệnh như Dbcc freeproccachekhông có hiệu lực.

Không có nhiều giao dịch trong select * from sys.dm_tran_session_transactions(không nhiều hơn khi hệ thống ổn), một số lần danh sách này trống.

Kết quả đầu tiên dbcc memorystatus

VM Reserved               42136628
VM Committed               1487176
Locked Pages Allocated    24994048
Reserved Memory               1024
Reserved Memory In Use           0

Khởi động lại SQL Server giải quyết vấn đề trong một thời gian.

  1. Điều gì gây ra hành vi này? Làm thế nào nó có thể tránh được?
  2. Nếu một giải pháp thực sự cho nguyên nhân quá khó khăn, có lệnh nào buộc SQL Server thực sự giải phóng tất cả bộ nhớ mà không cần khởi động lại DBMS hoàn chỉnh không?

Máy chủ đang chạy trên phần cứng chuyên dụng (không phải VM). Chúng tôi đã có một số công việc theo lịch trình, nhưng chúng tôi đã vô hiệu hóa chúng trong một thời gian, không có thay đổi. Có các ứng dụng trung cấp khác đang chạy trên cùng một máy chủ, nhưng chúng sử dụng không quá 2GB bộ nhớ, CPU không đáng kể và hầu như không có I / O. Chúng tôi đã khởi động lại tất cả các ứng dụng như vậy mà không có thay đổi.

Câu trả lời:


10

Tôi sẽ đề nghị thu thập số liệu hiệu suất trên máy chủ này, để bạn có thể loại bỏ phỏng đoán khỏi việc khắc phục các loại sự cố này. Xem bài viết này để có hướng dẫn đầy đủ hơn nếu bạn không biết bắt đầu từ đâu với điều này.

Cụ thể, tôi sẽ kiểm tra các bộ đếm hiệu suất Memory\Available MBytesPaging File(_Total)\% Usagebởi vì bạn nói rằng các vấn đề chỉ bắt đầu xảy ra khi vùng đệm đầy. Các số bạn nhận được từ các bộ đếm này có thể chỉ ra rằng cài đặt bộ nhớ máy chủ tối đa cần được điều chỉnh (tăng hoặc giảm) cho lượng bộ nhớ vật lý được phân bổ cho máy chủ. Như tôi đã đề cập ở đây , tôi không khuyên bạn nên căn cứ cài đặt bộ nhớ tối đa vào dung lượng bộ nhớ vật lý trừ khi là một phỏng đoán có giáo dục cho điểm bắt đầu . Luôn đo lường kết quả, và điều chỉnh từ đó.

Nếu dung lượng bộ nhớ trống quá thấp (<500) hoặc mức sử dụng tệp trang quá 0 , điều này có thể cho thấy phiên bản SQL Server bị quá mức: trên SQL Server 2008 R2, cài đặt bộ nhớ máy chủ tối đa chỉ kiểm soát kích thước nhóm bộ đệm và không sử dụng bộ nhớ khác như bộ nhớ cache của gói. SQL Server cũng không quan tâm đến các ứng dụng khác mà bạn có thể đang chạy trên hệ thống. Việc sử dụng bộ nhớ thêm này có thể gây áp lực bộ nhớ lên Windows - hoặc các ứng dụng khác - có thể dẫn đến hoán đổi đĩa. Đây là điều bạn muốn tránh bằng mọi giá, đặc biệt nếu tệp trang tồn tại trên một ổ đĩa chỉ được hỗ trợ bởi một máy nhân bản RAID 1 đơn giản. Cảm giác của tôi là đây là sự cố và việc tắt cài đặt bộ nhớ máy chủ tối đa sẽ khắc phục sự cố.

Nếu dung lượng bộ nhớ trống cao (> 1000) và mức sử dụng tệp trang bằng 0, bạn có thể tăng nhẹ bộ nhớ máy chủ tối đa (với mức tăng 256 MB) để tối đa hóa mức sử dụng bộ nhớ của máy chủ. Tuy nhiên, điều này rất có thể sẽ không giải quyết được vấn đề, và bạn sẽ cần tìm ở nơi khác, có thể là tại các quầy đĩa vật lý và tuổi thọ của trang nhóm bộ đệm. Nếu các truy vấn đang phá vỡ vùng đệm, bạn không thể làm gì ngoài việc cải thiện hiệu suất đĩa, tăng dung lượng bộ nhớ vật lý có sẵn cho máy chủ để tất cả các trang dữ liệu có thể vừa trong bộ nhớ hoặc sửa đổi cơ sở dữ liệu để không chiếm nhiều không gian vật lý (có thể bằng cách sử dụng nén hàng hoặc trang hoặc bằng cách xây dựng lại các chỉ mục với mức cao hơn FILLFACTOR).

Tôi đã xuất bản một bài viết về chủ đề này ở đây để đi sâu hơn về vấn đề này và cách giải quyết nó.


1

Nói chung, xu hướng chậm lại theo thời gian sẽ ngược lại, vì khi các trang cơ sở dữ liệu chuyển sang bộ đệm, hiệu suất sẽ được cải thiện (tuổi thọ trang và tỷ lệ nhấn bộ đệm tăng theo thời gian), bạn đã đặt bộ nhớ tối đa của mình thành (Total_physical_mem - 2GB) chưa?

Có vẻ như một vài truy vấn của bạn đang khiến SQL Server xuất hiện và trang trong rất nhiều thứ. Bạn có thể thử Resource Governor để giới hạn mức tiêu thụ bộ nhớ của các truy vấn lớn và trung bình, để các truy vấn ứng dụng luôn có đủ bộ đệm có sẵn.


2
Các giới hạn bộ nhớ trong Resource Governor chỉ kiểm soát bộ nhớ truy vấn, không phải bộ nhớ nhóm bộ đệm.
Jon Seigel
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.