ทำไม SQL Server 2012 Express ใช้ RAM 9.5GB บนเซิร์ฟเวอร์ของฉัน


22

ฉันกำลังสร้างแอปพลิเคชันที่ฉันวางแผนจะฝัง SQL Server 2012 Express เป็นที่เก็บข้อมูลหลัก เมื่อทำการทดสอบบนเครื่องพัฒนาของฉัน (Win7-32 ​​ที่มี RAM 3GB) ฉันไม่เคยสังเกตว่าsqlservr.exeกระบวนการใช้ RAM มากกว่า 1GB อย่างที่ฉันคาดไว้จากการจำกัด ขนาดของฮาร์ดแวร์ที่เผยแพร่สำหรับ SQL Server รุ่น Express

จากนั้นฉันย้ายแอปพลิเคชันของฉันไปยังเครื่องระดับเซิร์ฟเวอร์ (Win Server 2008R2 64- บิตพร้อม RAM 16GB) เพื่อประเมินประสิทธิภาพการทำงานที่นั่นและรู้สึกประหลาดใจที่พบว่าsqlservr.exeกระบวนการขยายอย่างรวดเร็วไปเป็นแรม 9.5GB และอยู่ที่นั่น

ฉันรีสตาร์ทสองสามครั้งเพื่อดูว่าจะมีผลกระทบใด ๆ หรือไม่ แต่ในแต่ละครั้งกระบวนการจะกลับไปที่ ~ 9.5GB อย่างรวดเร็ว ตอนนี้ฉันรู้สึกยินดีอย่างยิ่งที่มี SQL Server Express ใช้ RAM ของฉัน แต่ฉันอยากจะรู้ว่านี่เป็นพฤติกรรมที่คาดหวังหรือไม่ดังนั้นฉันจึงไม่ต้องพึ่งพาระดับประสิทธิภาพที่ขึ้นอยู่กับการใช้ RAM ที่ไม่ถูกต้อง

FYI เวอร์ชันของ SQL Server บนเครื่องเซิร์ฟเวอร์ของฉันSELECT @@VERSIONคือ:

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)

หมายเลข 9.5GB ของฉันมาจากหมายเลข "ชุดการทำงานส่วนตัว" ในตัวจัดการงาน ตารางแรกของการส่งออกจากDBCC memorystatus(แม้ว่าในเซิร์ฟเวอร์ไม่ได้ใช้งานในขณะนี้) อยู่ด้านล่าง:

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

ผลลัพธ์จากข้อความค้นหาที่แนะนำของ spaghettidba เมื่อsys.dm_os_memory_clerks:

MEMORYCLERK_SQLBUFFERPOOL   1410
OBJECTSTORE_LOCK_MANAGER    256
MEMORYCLERK_SQLCLR          38
MEMORYCLERK_SOSNODE         26
CACHESTORE_SQLCP            11

บวกรายการที่เล็กกว่าอีก ~ 10 รายการซึ่งจะน้อยกว่า 30MB

คำตอบ:


12

SQL Express จำกัด เพียง 1GB สำหรับ Buffer Pool แต่มีพูลหน่วยความจำอื่น ๆ อีกมากมายใน SQL Server สิ่งที่ฉันพบที่น่าประหลาดใจคือการใช้พูลหน่วยความจำที่ไม่ใช่บัฟเฟอร์มากเกินไป ในการค้นหาการใช้หน่วยความจำต่อเสมียนหน่วยความจำให้ทำดังนี้

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

หวังว่านี่จะช่วยได้


ผลลัพธ์จากแบบสอบถามนั้นคือ: MEMORYCLERK_SQLBUFFERPOOL 1410 OBJECTSTORE_LOCK_MANAGER 256 MEMORYCLERK_SQLCLR 38 MEMORYCLERK_SOSNODE 26 CACHESTORE_SQLCP 11 และจากนั้นจะมีขนาดเล็กอีกสองสามรวมที่ <30MB ดูเหมือนจะแปลกสำหรับฉัน -arg- ที่การจัดรูปแบบความคิดเห็น
Dan

อืมม MEMORYCLERK_SQLBUFFERPOOL เพียงอย่างเดียวเกินขีด จำกัด 1GB ดังนั้นเราอาจเผชิญข้อบกพร่อง สิ่งที่ฉันคิดว่าแปลกคือการใช้ 9.5GB โดยที่ไม่แสดงในแบบสอบถาม
spaghettidba

ฉันคิดว่ามีคอลัมน์ที่น่าสนใจอื่น ๆ ใน sys.dm_os_memory_clerks (ข้าง single_pages_kb): virtual_memory_committed_kb ดูเหมือนว่ามีความเกี่ยวข้องมากขึ้นในกรณีของ MEMORYCLERK_SQLBUFFERPOOL
Razvan Socol
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.