จะควบคุมการใช้ ram มากเกินไปโดย SQL Server ได้อย่างไร?


13

เซิร์ฟเวอร์ฐานข้อมูลที่ฉันใช้กำลังเรียกใช้อินสแตนซ์ของ SQL Server 6 อินสแตนซ์ที่ต่างกัน มี RAM 48 GB และหนึ่งในนั้นใช้ RAM มากกว่า 10 GB การบริโภคทั้งหมดคือ 20 GB สำหรับตอนนี้ ปริมาณการใช้ RAM เติบโตอย่างต่อเนื่อง สองสามวันก่อนที่จะใช้ RAM มากกว่า 40 GB และเซิร์ฟเวอร์ตอบสนองช้ามาก แอปพลิเคชันแสดงปัญหาการขัดข้องเมื่อบันทึกข้อมูล

ดังนั้นฉันเริ่มบริการ SQL Server ใหม่

ทันทีที่เริ่มบริการใหม่การใช้งานก็ลดลงเหลือ 4 GB แต่ตอนนี้กำลังเพิ่มขึ้น และฉันกังวลว่าจะเพิ่มขึ้นถึง 40 GB ใน 4 หรือ 5 วันและทำให้เซิร์ฟเวอร์ทำงานช้า

การรีสตาร์ทบริการไม่ใช่ตัวเลือกที่ดีที่ฉันเดา

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

มีผู้ใดช่วยปัญหานี้ได้บ้าง


1
โดยค่าเริ่มต้น SQL จะใช้ RAM มากที่สุดเท่าที่จะเป็นไปได้เพื่อเพิ่มประสิทธิภาพการทำงานนี่เป็นสิ่งที่ดี - หมายความว่าแคชแคชการสืบค้นทั่วไปและผลลัพธ์เพื่อทำให้แอปพลิเคชันของคุณเร็วขึ้น มันจะใช้ RAM จนถึงข้อ จำกัด ที่ระบบปฏิบัติการรายงานเพจจิ้งอาจเกิดขึ้น คุณสามารถลบล้างพฤติกรรมนี้ได้ ดูเอกสาร MS นี้: วิธีปรับการใช้หน่วยความจำโดยใช้ตัวเลือกการกำหนดค่าใน SQL Serverสิ่งนี้อาจมีประโยชน์: วิธีการกำหนดการตั้งค่าเซิร์ฟเวอร์ SQL ที่เหมาะสม

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

ใช่ฉันเข้าใจแล้ว มันออกแบบมาอย่างนั้น แต่เมื่อเซิร์ฟเวอร์ sql ใช้หน่วยความจำมากมันทำให้เซิร์ฟเวอร์ช้าและทำให้รายงานหมดเวลา ดังนั้นฉันต้องการป้องกันเซิร์ฟเวอร์ sql ให้ใช้หน่วยความจำที่ จำกัด

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

แต่ฉันสงสัยว่าทำไมมันเริ่มแสดงรายงานได้ดีหลังจากรีสตาร์ทบริการเซิร์ฟเวอร์ sql เป็นกรณีที่มีลูกค้าจำนวนมากเกินไปที่ใช้แอพพลิเคชั่นเนื่องจากไม่มีการแสดงรายงานหรือไม่?

คำตอบ:


14

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

หากคุณต้องการ จำกัด จำนวนหน่วยความจำที่มีการใช้งานอินสแตนซ์ของ SQL Server เดียวคุณสามารถทำได้ใน SQL Server Management Studio โดยคลิกขวาที่ชื่ออินสแตนซ์ภายใน Object Explorer และเลือกคุณสมบัติ จากนั้นเลือกแท็บหน่วยความจำและกำหนดจำนวนหน่วยความจำสูงสุดที่ SQL Server จะอนุญาตให้ใช้ ตอนนี้สิ่งนี้จะไม่ จำกัด ทุกแง่มุมของ SQL Server ให้เท่ากับจำนวนหน่วยความจำนั้น สิ่งนี้จะควบคุมพูลบัฟเฟอร์และแคชแผนการดำเนินการเท่านั้น สิ่งต่างๆเช่น CLR, ข้อความแบบเต็ม, หน่วยความจำจริงที่ใช้โดยไฟล์ exe ของ SQL Server, เอเจนต์ SQL, ขั้นตอนการจัดเก็บแบบขยาย ฯลฯ ไม่ได้ถูกควบคุมโดยการตั้งค่านี้ อย่างไรก็ตามโดยทั่วไปสิ่งเหล่านี้ไม่ต้องการหน่วยความจำขนาดใหญ่ทั้งหมดนั่นคือพูลบัฟเฟอร์และแคชแผนการดำเนินการซึ่งต้องการหน่วยความจำจำนวนมาก

หากคุณตั้งค่านี้ในอินสแตนซ์เดียวคุณจะต้องตั้งค่าในอินสแตนซ์ทั้งหมดเพื่อให้พวกเขาไม่ได้ก้าวต่อกัน

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