เหตุใด SQL Server จึงใช้หน่วยความจำเซิร์ฟเวอร์มากขึ้น


36

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


3
คุณทราบได้อย่างไรว่าการใช้ RAM ของ SQL Server เป็นที่มาของคอขวดใด ๆ ความช้าในอะไร หากมีสิ่งใด SQL Server ควรมีประสิทธิภาพมากกว่าหากใช้ RAM มากที่สุดเท่าที่จะเป็นไปได้ (หรือมากกว่าที่คุณคาดหวังหรือต้องการใช้) และถ้าคุณมีโปรแกรมอื่น ๆ บนเซิร์ฟเวอร์ที่กำลังทุกข์ทรมานเพราะ SQL Server คือใช้หน่วยความจำ (มันออกแบบมาเพื่อทำ) ย้ายไปยังเซิร์ฟเวอร์อื่น
Aaron Bertrand

ฉันใช้วิธีการที่นี่lucidica.com/help/got-sql-eating-up-ram แจ้งให้เราทราบว่าสิ่งนั้นช่วยได้หรือไม่ :) ขอแสดงความนับถือ Nikita
Nikita Kosousov

คำตอบ:


48

SQL Server จะใช้หน่วยความจำมากที่สุดเท่าที่คุณจะยอมให้มัน ตามค่าเริ่มต้นหมายเลขนั้นจะครอบคลุม 100% ของหน่วยความจำตัวเลขในเครื่องของคุณ นั่นเป็นเหตุผลที่คุณเห็นสิ่งที่คุณเห็น ถ้าคุณให้หน่วยความจำ SQL Server 24 GB SQL Server จะพยายามอย่างดีที่สุดในการใช้หน่วยความจำ 24 GB จากนั้นคุณมี SQL Server และ OS ที่ต้องต่อสู้กับทรัพยากรและมันจะส่งผลให้ประสิทธิภาพต่ำ

เมื่อคุณตั้งmax server memoryค่าขีด จำกัด การกำหนดค่าคุณกำลัง จำกัด จำนวน SQL Server ที่สามารถจัดสรรให้กับพูลบัฟเฟอร์ (โดยที่มันเก็บหน้าข้อมูลและขั้นตอนแคช) มีเสมียนหน่วยความจำอื่น ๆ ภายใน SQL Server ดังนั้นสำหรับรุ่นเฉพาะของคุณ (2008 R2 และต่ำกว่า) max server memoryเพียงแค่ควบคุมบัฟเฟอร์พูล แต่นี่จะเป็นผู้บริโภคหน่วยความจำรายใหญ่ที่สุดเสมอ

การอ้างอิง TechNet เกี่ยวกับผลกระทบของหน่วยความจำเซิร์ฟเวอร์ขั้นต่ำและสูงสุด

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

เท่าที่คำถามที่ฉันควรจะเก็บไว้สำหรับหน่วยความจำระบบปฏิบัติการนั่นเป็นตัวชี้วัดที่ถกเถียงกันโดยทั่วไป จริงๆมันทั้งหมดขึ้นอยู่ส่วนใหญ่ในสิ่งที่กระบวนการอื่นที่กำลังทำงานบนเซิร์ฟเวอร์ ระบุว่าเป็นเซิร์ฟเวอร์ที่ทุ่มเทอย่างแท้จริง (และแทบจะไม่เกิดขึ้นเลย) ฉันชอบที่จะเห็นหน่วยความจำอย่างน้อย 4 GB สำหรับระบบปฏิบัติการ (และยิ่งกว่านั้นในกล่องฮาร์ดแวร์ขนาดใหญ่) แต่ที่สำคัญที่สุดตรวจสอบว่ามีหน่วยความจำที่ไม่ได้ใช้งานมากแค่ไหน มีอิสระและให้หน่วยความจำ SQL Server มากขึ้นถ้าคุณสังเกตเห็นว่ามีจำนวนมาก (สามารถตรวจสอบผ่าน perfmon) และหน่วยความจำที่ไม่ได้ใช้งาน (แน่นอนว่าจะทิ้งบัฟเฟอร์ขนาดเล็กไว้สำหรับสถานการณ์มุมเหล่านั้นเสมอ)


11

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

โดยปกติแล้วฉันแนะนำให้คนออก RAM ประมาณ 4 Gigs สำหรับ Windows แต่ขึ้นอยู่กับปริมาณของซอฟต์แวร์ที่ใช้บนเซิร์ฟเวอร์ส่วนประกอบใดของ SQL Server ที่คุณใช้งานอยู่ (ไม่ใช่ส่วนประกอบทั้งหมดตามการตั้งค่านั้น) เป็นต้น


6

สามารถใช้งานได้ทันทีโดยไม่ต้องรีสตาร์ท SQL:

ตัวเลือกการกำหนดค่าเซิร์ฟเวอร์หน่วยความจำเซิร์ฟเวอร์

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

โพรซีเดอร์สำหรับการกำหนดค่าจำนวนหน่วยความจำคงที่เมื่อต้องการตั้งค่าจำนวนหน่วยความจำคงที่:

  1. ใน Object Explorer คลิกขวาที่เซิร์ฟเวอร์และเลือกคุณสมบัติ
  2. คลิกที่โหนดหน่วยความจำ
  3. ภายใต้ตัวเลือกหน่วยความจำเซิร์ฟเวอร์ให้ป้อนจำนวนเงินที่คุณต้องการสำหรับหน่วยความจำเซิร์ฟเวอร์ขั้นต่ำและหน่วยความจำเซิร์ฟเวอร์สูงสุด

ใช้การตั้งค่าเริ่มต้นเพื่อให้ SQL Server เปลี่ยนข้อกำหนดหน่วยความจำแบบไดนามิกตามทรัพยากรระบบที่มีอยู่ การตั้งค่าเริ่มต้นสำหรับหน่วยความจำเซิร์ฟเวอร์ขั้นต่ำคือ 0 และการตั้งค่าเริ่มต้นสำหรับหน่วยความจำเซิร์ฟเวอร์สูงสุดคือ 2147483647 เมกะไบต์ (MB)

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


3

ดังที่ Eric กล่าวไว้คุณต้องจัดการหน่วยความจำเพื่อให้มีพื้นที่ว่างสำหรับกระบวนการอื่น ๆ สำหรับคำอธิบายทั่วไปและคำแนะนำเกี่ยวกับวิธีการตั้งค่าหน่วยความจำสูงสุดให้ตรวจสอบการโพสต์โดย Jonathan Kehayias:

http://www.sqlskills.com/blogs/jonathan/how-much-memory-does-my-sql-server-actually-need/

คุณสามารถแก้ไขคำแนะนำโดยคำนึงถึงการใช้งานเซิร์ฟเวอร์ของคุณ


1

SQL Server จะใช้ RAM ที่มีอยู่เว้นแต่ว่าคุณจะใส่การใช้งานไว้ ตามกฎแล้วฉันพยายามปล่อยให้ระบบปฏิบัติการฟรีไม่น้อยกว่า 2GB เช่นถ้าคุณมี RAM จริง 64 GB ในโฮสต์ให้ครอบคลุม SQL Server @ 62 GB

http://msdn.microsoft.com/en-us/library/ms191144(v=sql.105).aspx

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