หน่วยความจำสูงสุดของเซิร์ฟเวอร์ SQL ไม่ จำกัด การใช้ RAM


18

ฉันต้องการให้คุณป้อนข้อมูลนี้ ฉันมี sql server 2008r2 Ent เอ็ด 64 บิตพร้อม 16 คอร์และ RAM 64GB มีอินสแตนซ์หนึ่งของเซิร์ฟเวอร์ SQL ที่ได้รับการแพตช์อย่างสมบูรณ์ตั้งแต่ 20111014

หน่วยความจำสูงสุดถูกตั้งไว้ที่ 60000MB จำนวน ram ฟรี 0 ตามตัวจัดการงานหลังจากสองสามวันออนไลน์

ถ้าฉันเปลี่ยน ram สูงสุดเป็นต่ำกว่า 53GB มันจะหลังจากนั้นสองสามวันเพื่อทำให้เสถียรและมี ram ฟรี

เป็นกระบวนการ sql ที่จัดสรร ram ตามตัวจัดการงาน ฉันจะตกลงกับสิ่งที่เป็นปัญหาได้อย่างไร? มันไปโดยไม่บอกว่าฉันทำการทดสอบจำนวนมากแล้ว แต่ก็ยังไม่ได้แก้ไขสิ่งนี้ตามความชอบของฉัน และโอ้เราไม่ได้รับความอดอยากของหน่วยความจำทั่วไปเมื่อ ram ที่มีอยู่ลดลงเหลือ 0

อัปเดต 1:

แรงบันดาลใจจากอีก Q / เกี่ยวข้องกับแรมในหน้านี้/dba//a/7062/2744 ฉันใช้สองสิ่งนี้เพื่อดูว่า RAM กำลังใช้งานอะไรอยู่

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 ) ;

จำนวนที่ใช้โดยสิ่งเหล่านี้แสดงให้เห็นก่อนเลือก 7948432 Kb ที่สอง 44030,57812 MB ที่รวมทั้งหมด 52GB ที่ใช้โดยเซิร์ฟเวอร์ sql ... ดังนั้นส่วนที่เหลือของ RAM ของฉันไปที่ไหน :-) ตัวจัดการงานแสดงตอนนี้แคช 363 ใช้ได้ 401, ฟรี 40 และ sqlservr.exe มีหน่วยความจำส่วนตัวตั้ง 64 459 656 Max Ram ตั้งค่าเป็น 60000MB เหมือนก่อน

คำตอบ:


20

การตั้งค่าหน่วยความจำสูงสุดของเซิร์ฟเวอร์ SQL กำหนดขีด จำกัด สำหรับการใช้บัฟเฟอร์พูลเท่านั้น จะมีตัวแปร แต่จำเป็นต้องมีการจัดสรรที่สำคัญเกินกว่าจำนวนที่ จำกัด

ของ Jonathan Kehayias , Christian BoltonและJohn Samsonมีโพสต์ระดับ 300/400 โพสต์ในหัวข้อ เบรนต์โอซาร์มีบทความที่อ่านง่ายขึ้นซึ่งอาจเป็นจุดเริ่มต้นที่ดีกว่า

สิ่งที่เกี่ยวข้อง: SQL Server 2008 R2“ Ghost Memory”


ใช่ฉันตกลงว่าจะ จำกัด บัฟเฟอร์พูลเท่านั้น ขอบคุณสำหรับบุ๊คมาร์คที่ฉันจะตรวจสอบ
Martin Sjöberg

ฉันกำลังอ่านลิงก์เหล่านั้นและมีบางสิ่งที่ดีมี def ฉันจะอัปเดตคำถามของฉันด้วยสิ่งที่พบ ฉันรู้สึก relifed ว่าฉันมีหมายเลข Max Pizzeria พร้อมใช้งาน ... ฉันสงสัยว่าพวกเขาทำ homedelivery?
Martin Sjöberg

16

ดังที่กล่าวไว้ในบัฟเฟอร์พูลและโพรซีเดอร์แคชเกี่ยวกับสิ่งเดียวที่ควบคุมโดยหน่วยความจำเซิร์ฟเวอร์สูงสุด มีสิ่งอื่น ๆ อีกมากมายภายใน SQL Server ที่สามารถกินหน่วยความจำเกินขีด จำกัด นั้นได้ พวกเขารวมถึง (แต่ไม่ จำกัด เฉพาะ):

  • จดหมายฐานข้อมูล
  • SQLCLR
  • ขั้นตอนการจัดเก็บเพิ่มเติม
  • ไบนารีพวกเขาเอง
  • จดหมาย SQL
  • SSIS
  • SSAS
  • SSRS

จากที่กล่าวมาข้างต้นเราใช้ไบนารีของ c และ ssis บนเซิร์ฟเวอร์นี้
Martin Sjöberg

1
ติดตั้งซอฟต์แวร์อื่นใดบนเซิร์ฟเวอร์ และฉันหมายถึงอะไร ไดรเวอร์ MPIO, ไดรเวอร์แฟลชไดรฟ์, ซอฟต์แวร์สำรองข้อมูล, ป้องกันไวรัส, sys-internals และอื่น ๆ
mrdenny

เซิร์ฟเวอร์ค่อนข้างสะอาดและติดตั้งใหม่ แต่เรามีบางอย่างที่นั่น ฉันจะพยายามรวบรวมรายชื่อทั้งหมดตอนปลายสัปดาห์นี้ สั้นและจากความทรงจำของฉัน ... เรามี iodrive (dell), mcafee, processexplorer บนเดสก์ท็อป, iometer, treesize ...
Martin Sjöberg

1
ไดรเวอร์ FusionIO ต้องการหน่วยความจำจำนวนมากเพื่อใช้งาน นั่นอาจจะใช้เวลามาก
mrdenny

เป็นไปได้ไหมที่จะพิสูจน์เรื่องนี้? หรือกำหนดค่าให้ใช้ RAM น้อยลง โซฟาดูเหมือนว่าจะปล่อยแรมเมื่อมันมีและฉันไม่ได้สังเกตเห็นข้อเสียใด ๆ แต่เพียงกรณีที่เราต้องเพิ่มจำนวนของแพคเกจ SSIS ฉันกังวลเกี่ยวกับสิ่งที่อาจเกิดขึ้นกับการใช้ RAM
Martin Sjöberg

3

จาก SQL 2012 เป็นต้นไป single_pages_kb ก็ถูกแทนที่ด้วย pages_kb ใน DMV นั้น https://msdn.microsoft.com/en-us/library/ms175019.aspx?f=255&MSPPError=-2147217396

ดังนั้นหากคุณต้องการเรียกใช้คิวรีที่รวมอยู่ในคำถามบนเซิร์ฟเวอร์ 2012+ ให้ลบสตริง single_ ออก


ขอบคุณ ฉันแปลงเป็น page_size_in_bytes แต่นั่นไม่เหมือนกัน
อีเลียส

2

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

เพื่อลดหน่วยความจำเซิร์ฟเวอร์สูงสุดคุณอาจต้องรีสตาร์ท SQL Server เพื่อปล่อยหน่วยความจำ

ความเข้าใจของฉันคือว่าถ้าหน้าในพูลบัฟเฟอร์ไม่ได้ถูกเขียนไปยังดิสก์มันจะไม่ถูกปล่อยจนกว่าจะ

การลดการตั้งค่าหน่วยความจำสูงสุดทำให้ SQL Server ล้างหน้าสกปรกออกหรือไม่

เขาสามารถมอนิเตอร์ตัวจัดการบัฟเฟอร์ใน perfmon เพื่อตรวจสอบว่า Perfmon -> SQLServer: ตัวจัดการบัฟเฟอร์: หน้าฐานข้อมูล


คุณ "อาจ" ต้องรีสตาร์ท SQL Server มันไม่จำเป็นเสมอไป คุณรู้เงื่อนไขภายใต้การรีสตาร์ทหรือไม่จำเป็นต้องปล่อยหน่วยความจำ?
Nick Chammas

ฉันจะแก้ไขรายละเอียดเหล่านี้เป็นคำตอบที่คุณมีอยู่แล้วลบออก บางที mrdenny สามารถตอบคำถามของคุณเกี่ยวกับการล้างหน้าสกปรก
Nick Chammas

1
ถูกต้อง SQL ไม่สามารถปล่อยเพจหน่วยความจำในขณะที่สกปรก (ถูกเขียนไป) ทุกครั้งที่ระบบจุดตรวจหน้าสกปรกถูกเขียนลงดิสก์ ฉันไม่เชื่อว่าการเปลี่ยนหน่วยความจำสูงสุดของเซิร์ฟเวอร์ทำให้จุดตรวจสอบเกิดขึ้น
mrdenny

1
การเริ่มต้นอินสแตนซ์ใหม่เพื่อเปลี่ยนการตั้งค่าหน่วยความจำอาจเป็นความผิดพลาดครั้งใหญ่ แม้ว่าการเปลี่ยนการตั้งค่าหน่วยความจำจะไม่ทำให้เกิดการCHECKPOINTดำเนินการกับฐานข้อมูล แต่จะล้างแคชโพรซีเดอร์ออก หากคุณรีสตาร์ตอินสแตนซ์เพียงเพื่อเปลี่ยนการตั้งค่าหน่วยความจำแคชโพรซีเดอร์ไม่เพียง แต่จะเย็น แต่แคชข้อมูลก็จะเย็นเกินไป หากหน่วยความจำสูงสุดไม่สามารถลดลงได้เนื่องจากเพจสกปรกในหน่วยความจำให้รันCHECKPOINTคำสั่งบนฐานข้อมูลเพื่อล้างข้อมูลเพจสกปรกไปยังดิสก์จากนั้นเปลี่ยนการตั้งค่าหน่วยความจำในช่วงเวลาที่ไม่มีการใช้งานสูงสุดโดยไม่ต้องรีสตาร์ทอินสแตนซ์
Jon Seigel
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.