Bộ nhớ tối đa của SQL Server không giới hạn sử dụng RAM


18

Tôi muốn đầu vào của bạn về điều này. Tôi có một máy chủ sql 2008r2 Ent. Ed. 64 bit với 16 nhân và RAM 64GB. Có một phiên bản máy chủ SQL được vá đầy đủ vào năm 20111014.

Ram tối đa được đặt thành 60000MB. Số lượng ram miễn phí là 0 theo trình quản lý tác vụ sau vài ngày trực tuyến.

Nếu tôi thay đổi ram tối đa xuống dưới 53GB thì sau vài ngày sẽ ổn định và có một số ram miễn phí.

Đây là quá trình sql phân bổ ram theo trình quản lý tác vụ. Làm thế nào để tôi đi đến thỏa thuận với những gì vấn đề thực sự là? Không cần phải nói rằng tôi đã thử nghiệm rất nhiều nhưng vẫn chưa giải quyết được điều này theo ý thích của tôi. và ohh chúng tôi không nhận được tình trạng đói bộ nhớ thông thường khi ram có sẵn xuống 0 miễn phí.

Cập nhật 1:

Lấy cảm hứng từ một Q / A khác liên quan đến RAM trên trang này /dba//a/7062/2744 . Tôi đã sử dụng hai cái này để xem RAM đang được sử dụng để làm gì.

SELECT TOP ( 10 )
        [type] AS [Memory Clerk Type] ,
        SUM(single_pages_kb) AS [SPA Mem, Kb]
FROM    sys.dm_os_memory_clerks
GROUP BY [type]
ORDER BY SUM(single_pages_kb) DESC
OPTION  ( RECOMPILE ) ;

SELECT  DB_NAME(database_id) AS [Database Name] ,
        COUNT(*) * 8 / 1024.0 AS [Cached Size (MB)]
FROM    sys.dm_os_buffer_descriptors
--WHERE   database_id > 4 -- system databases
--        AND database_id <> 32767 -- ResourceDB
GROUP BY DB_NAME(database_id)
ORDER BY [Cached Size (MB)] DESC
OPTION  ( RECOMPILE ) ;

Số lượng được sử dụng trong số này được chọn trước tiên là 7948432 Kb thứ hai 44030.57812 MB, tổng cộng khoảng 52 GB được sử dụng bởi máy chủ sql ... vậy phần còn lại của RAM của tôi đã đi đâu? :-) Trình quản lý tác vụ hiển thị ngay bộ nhớ cache 363, có sẵn 401, 40 miễn phí và sqlservr.exe có Bộ nhớ riêng 64 459 656. Max Ram được đặt thành 60000 MB như trước.

Câu trả lời:


20

Cài đặt bộ nhớ tối đa của Máy chủ SQL chỉ xác định các giới hạn cho việc sử dụng nhóm bộ đệm. Sẽ có những phân bổ khác nhau nhưng đáng kể được yêu cầu vượt quá giới hạn đó.

Jonathan Kehayias , Christian BoltonJohn Samson có cấp độ 300/400 bài viết về chủ đề này. Brent Ozar có một bài viết dễ đọc hơn có thể là một nơi tốt hơn để bắt đầu.

Cũng liên quan: SQL Server 2008 R2


vâng, tôi đồng ý rằng nó chỉ giới hạn vùng đệm. Cảm ơn bạn đã đánh dấu tôi sẽ xem xét chúng.
Martin Sjöberg

Tôi đang đọc các liên kết đó và có một số thứ tốt ở đó def. Tôi sẽ cập nhật câu hỏi của tôi với những gì tôi tìm hiểu. Tôi cũng cảm thấy tin tưởng rằng tôi có sẵn số điện thoại cho Max Pizzeria ... Tôi tự hỏi liệu họ có giao hàng không?
Martin Sjöberg

16

Như đã nói Bộ đệm và bộ đệm thủ tục là về những thứ duy nhất được kiểm soát bởi bộ nhớ máy chủ tối đa. Có rất nhiều thứ khác trong SQL Server có thể ăn hết bộ nhớ vượt quá giới hạn đó. Chúng bao gồm (nhưng không giới hạn):

  • Cơ sở dữ liệu thư
  • SQLCLR
  • Thủ tục lưu trữ mở rộng
  • Các nhị phân họ chọn
  • Thư SQL
  • SSIS
  • SSAS
  • SSRS

Trong số các đề cập ở trên, chúng tôi sử dụng nhị phân ofc và ssis trên máy chủ này.
Martin Sjöberg

1
Những phần mềm khác được cài đặt trên máy chủ? Và tôi có nghĩa là bất cứ điều gì. Trình điều khiển MPIO, Trình điều khiển ổ đĩa flash, phần mềm sao lưu, chống vi-rút, hệ thống nội bộ, v.v.
mrdenny

Máy chủ khá sạch sẽ và mới được cài đặt nhưng chúng tôi có một số ở đó. Tôi sẽ cố gắng để có được một danh sách đầy đủ đưa vào cuối tuần này. Ngắn và từ trí nhớ của tôi ... chúng tôi có một iodrive (dell), mcafee, processexplorer trên máy tính để bàn, iometer, cây xanh ...
Martin Sjöberg

1
Trình điều khiển FusionIO cần rất nhiều bộ nhớ để làm việc. Đó có lẽ là lấy rất nhiều của nó.
mrdenny

Có thể chứng minh điều này? Hoặc để cấu hình nó để sử dụng ít RAM hơn? Sofar dường như giải phóng RAM khi nó phải và tôi không nhận thấy bất kỳ nhược điểm nào, nhưng chỉ cần chúng tôi phải tăng số lượng gói ssis tôi lo ngại về những gì có thể xảy ra với việc sử dụng RAM.
Martin Sjöberg


2

http://msdn.microsoft.com/en-us/l Library / ms178067.aspx

Để giảm bộ nhớ máy chủ tối đa, bạn có thể cần phải khởi động lại SQL Server để giải phóng bộ nhớ.

Tôi hiểu rằng nếu một trang trong vùng đệm không được ghi vào đĩa, nó sẽ không được phát hành cho đến khi nó được.

Việc hạ thấp cài đặt bộ nhớ tối đa có khiến SQL Server tuôn ra các trang bẩn không?

Anh ta có thể theo dõi trình quản lý bộ đệm trong perfmon để xác minh điều đó. Perfmon -> SQLServer: Trình quản lý bộ đệm: Trang cơ sở dữ liệu


Bạn "có thể" cần khởi động lại SQL Server. Nó không phải luôn luôn được yêu cầu. Bạn có biết các điều kiện theo đó khởi động lại là hoặc không cần thiết để giải phóng bộ nhớ?
Nick Chammas

Tôi sẽ chỉnh sửa các chi tiết này vào câu trả lời hiện có của bạn và xóa cái này. Có lẽ mrdenny có thể trả lời câu hỏi của bạn về việc xả các trang bẩn.
Nick Chammas

1
Đúng, SQL không thể giải phóng một trang bộ nhớ trong khi nó bị bẩn (đã được ghi vào). Mỗi lần hệ thống kiểm tra các trang bẩn được ghi vào đĩa. Tôi không tin rằng việc thay đổi bộ nhớ máy chủ tối đa sẽ khiến điểm kiểm tra xảy ra.
mrdenny

1
Khởi động lại thể hiện để thay đổi cài đặt bộ nhớ có thể là một sai lầm lớn. Mặc dù việc thay đổi cài đặt bộ nhớ không gây ra CHECKPOINTthao tác trên cơ sở dữ liệu, nhưng nó sẽ xóa bộ đệm thủ tục. Nếu bạn khởi động lại thể hiện chỉ để thay đổi cài đặt bộ nhớ, không chỉ bộ đệm thủ tục sẽ bị lạnh mà cả bộ đệm dữ liệu cũng sẽ bị lạnh. Nếu không thể giảm bộ nhớ tối đa do các trang bẩn trong bộ nhớ, hãy chạy CHECKPOINTlệnh trên cơ sở dữ liệu để chuyển các trang bẩn sang đĩa, sau đó thay đổi cài đặt bộ nhớ vào thời gian thấp điểm mà không cần khởi động lại phiên bản.
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.