Tại sao SQL Server 2012 Express sử dụng 9,5GB RAM trên máy chủ của tôi?


22

Tôi đang xây dựng một ứng dụng mà tôi dự định nhúng SQL Server 2012 Express làm kho dữ liệu chính. Khi thử nghiệm trên máy phát triển của tôi (Win7-32 ​​với RAM 3 GB), tôi chưa bao giờ quan sát sqlservr.exequá trình sử dụng hơn 1GB RAM như tôi mong đợi từ các giới hạn mở rộng phần cứng được công bố cho phiên bản Express của SQL Server.

Sau đó, tôi đã chuyển ứng dụng của mình sang một máy cấp máy chủ (Win Server 2008R2 64-bit với 16GB RAM) để đánh giá hiệu năng của nó ở đó và rất ngạc nhiên khi thấy sqlservr.exequá trình này nhanh chóng mở rộng lên khoảng 9,5 GB RAM và vẫn ở đó.

Tôi đã khởi động lại nó một vài lần để xem liệu điều đó có ảnh hưởng gì không, nhưng mỗi lần, quá trình nhanh chóng trở lại ~ 9,5GB. Bây giờ tôi chắc chắn rất vui khi SQL Server Express sử dụng RAM của mình, nhưng tôi muốn biết liệu đây có phải là hành vi được mong đợi hay không để tôi dựa vào mức hiệu suất dựa trên việc sử dụng RAM không chính xác.

FYI, phiên bản SQL Server trên máy chủ của tôi, theo SELECT @@VERSION, là:

Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64) 
    Oct 19 2012 13:38:57 
    Copyright (c) Microsoft Corporation
    Express Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)

Số 9,5 GB của tôi đến từ số "Bộ làm việc riêng" trong Trình quản lý tác vụ. Bảng đầu ra đầu tiên từ DBCC memorystatus(mặc dù trên máy chủ hiện không hoạt động) bên dưới:

PROCESS/SYSTEM COUNTS
Available Physical Memory   5543616512
Available Virtual Memory    8734902411264
Available Paging File       22471094272
Working Set                 9664200704
Percent of Committed Memory in WS   99
Page Faults                 2627510
System physical memory high 1
System physical memory low  0
Process physical memory low 0
Process virtual memory low  0

Đầu ra từ truy vấn được đề xuất của spaghettidba trên sys.dm_os_memory_clerks:

MEMORYCLERK_SQLBUFFERPOOL   1410
OBJECTSTORE_LOCK_MANAGER    256
MEMORYCLERK_SQLCLR          38
MEMORYCLERK_SOSNODE         26
CACHESTORE_SQLCP            11

cộng thêm ~ 10 mục nhỏ hơn có tổng giá trị dưới 30MB.

Câu trả lời:


12

SQL Express được giới hạn ở 1GB cho Vùng đệm, nhưng có nhiều nhóm bộ nhớ khác trong SQL Server. Điều tôi thấy đáng ngạc nhiên là việc sử dụng quá mức các nhóm bộ nhớ không đệm. Để tìm hiểu mức sử dụng bộ nhớ cho mỗi nhân viên bộ nhớ, hãy chạy nó:

SELECT type, SUM(pages_kb)/1024 AS MemoryMB
FROM sys.dm_os_memory_clerks
GROUP BY type
ORDER BY 2 DESC

Hi vọng điêu nay co ich


Đầu ra từ truy vấn đó là: MEMORYCLERK_SQLBUFFERPOOL 1410 OBJECTSTORE_LOCK_MANAGER 256 MEMORYCLERK_SQLCLR 38 MEMORYCLERK_SOSNODE 26 CACHESTORE_SQLCP 11 Và sau đó một vài cái nhỏ nữa có tổng giá trị <30MB. Có vẻ lạ đối với tôi. -arg- ở định dạng bình luận.
Dan

Hừm. MEMORYCLERK_QueryBUFFERPOOL một mình vượt quá giới hạn 1GB, vì vậy chúng tôi có thể phải đối mặt với một lỗi. Điều tôi thấy lạ là cách nó sử dụng 9,5 GB mà không hiển thị trong truy vấn.
spaghettidba

Tôi nghĩ rằng có một số cột thú vị khác trong sys.dm_os_memory_clerks (bên cạnh single_pages_kb): virtual_memory_commned_kb có vẻ phù hợp hơn trong trường hợp MEMORYCLERK_QueryBUFFERPOOL.
Razvan Socol
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.