Score:2

เพิ่มหน่วยความจำใน Windows Server 2019 สำหรับอินสแตนซ์ SQL Server หรือไม่

ธง kr

เรามี Windows Server 2019 Standard (x64) พร้อมหน่วยความจำ 64GB

ภาพหน้าจอด้านล่างแสดงการใช้หน่วยความจำที่ 96% ด้วย เซิร์ฟเวอร์ SQL Windows NT กำลังรันและใช้งาน 344.5 MB.

ป้อนคำอธิบายรูปภาพที่นี่

นี่คือตัวจัดการงานหลังจากหยุดบริการ เซิร์ฟเวอร์ SQL Windows NT. การใช้หน่วยความจำลดลงถึง 8%

ป้อนคำอธิบายรูปภาพที่นี่

ฉันเริ่มให้บริการ เซิร์ฟเวอร์ SQL Windows NT อีกครั้ง.ตัวจัดการงานต่ำมากที่ 9% แต่เซิร์ฟเวอร์ Sql กำลังใช้หน่วยความจำมากกว่าตอนที่ใช้หน่วยความจำอยู่ที่ 96% ป้อนคำอธิบายรูปภาพที่นี่

สองคำถาม:

  1. หน่วยความจำมีปัญหาอะไร
  2. ฉันจะลดการใช้หน่วยความจำโดยไม่ต้องรีสตาร์ทอินสแตนซ์เซิร์ฟเวอร์ sql ได้อย่างไร
cn flag
`สำหรับฉันแล้วดูเหมือนว่าเซิร์ฟเวอร์ sql ใช้หน่วยความจำน้อยเพราะ Windows กำลังใช้ทุกอย่างที่เหลือ' 100% ไม่ใช่ Windows
Score:8
ธง cn

คุณกำลังเรียกใช้ SQL Server บนเครื่องนี้ ดังนั้นมันจึงทำในสิ่งที่ SQL Server ทำ - มันสงวน (เกือบ) หน่วยความจำทั้งหมดที่มีอยู่บนระบบปฏิบัติการ ดังนั้นเมื่อได้รับคำสั่งจำนวนมากหรือการดำเนินการอื่นๆ ก็ไม่จำเป็นต้องจัดสรร RAM มันมีอยู่แล้ว

คุณมีตัวเลือกน้อย

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

ฉันจะไม่ทำตัวเลือกที่ 2 อย่างแน่นอน เว้นแต่ว่า SQL ไม่เคยใช้ RAM เลย คุณจะรู้เรื่องนี้ก็ต่อเมื่อคุณกำลังวัดตัวนับประสิทธิภาพ SQL ระดับ OS และมุมมองการจัดการแบบไดนามิกระดับ SQL

ภาพใหญ่ คุณกำลังพยายามแก้ปัญหาอะไรอยู่ "การเพิ่มพื้นที่ว่างในหน่วยความจำ" ในสถานการณ์นี้เป็นงานที่ไร้จุดหมาย เว้นแต่คุณจะรู้ว่าคุณกำลังเพิ่มพื้นที่ว่างสำหรับสิ่งอื่นที่จะใช้ คุณกำลังมีปัญหาเกี่ยวกับประสิทธิภาพการทำงานของ SQL หรือไม่ และถ้าใช่ คุณทราบได้อย่างไรว่า RAM ของคุณมีปัญหาคอขวด แทนที่จะเป็น เช่น การออกแบบดัชนีที่ไม่ถูกต้อง หรือข้อความค้นหาที่ไม่ได้เพิ่มประสิทธิภาพ

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

https://docs.microsoft.com/en-us/sql/relational-databases/performance-monitor/monitor-memory-usage?view=sql-server-ver15

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

/ แก้ไขตามการแก้ไขของคุณ:

แม้ว่าฉันจะไม่ใช่ผู้ดูแลระบบ แต่ฉันคิดว่าเซิร์ฟเวอร์ sql เป็น ใช้หน่วยความจำน้อยเพราะทุกอย่างถูกใช้งานโดย หน้าต่าง.

คุณเกือบจะผิดที่นี่ ดังที่ฉันได้กล่าวไว้ข้างต้น SQL Server จะจัดสรร RAM ของระบบเกือบทั้งหมดเมื่อเวลาผ่านไป จำนวน RAM ที่ใช้โดยกระบวนการ sqlserver.exe ไม่ได้บอกคุณว่า RAM ที่ SQL จัดสรรจริงเป็นจำนวนเท่าใด DMVs และ perfcounters จะบอกคุณว่า

ฉันใช้ SSMS เพื่อทำงานกับฐานข้อมูล และฉันสังเกตเห็นโดยตรงว่ามันช้าเพียงใด ทุกๆสิ่งคือ. แม้แต่เรื่องง่ายๆ เช่น การเปิดบานหน้าต่างตารางเพื่อดู ตารางทั้งหมดของฉันใช้เวลาสักครู่และบางครั้งก็หมดเวลา

อย่าเรียกใช้บนเซิร์ฟเวอร์ SQL ให้เรียกใช้จากเวิร์กสเตชันของคุณ

rbhat avatar
kr flag
ฉันต้องการลดหน่วยความจำของบริการ Windows เพื่อให้เซิร์ฟเวอร์ sql ใช้หน่วยความจำมากขึ้น ไม่ควรเติมที่ 97% ตลอดเวลา
mfinni avatar
cn flag
ไม่ คุณทำไม่ได้จริงๆ บริการ Windows ที่มาพร้อมกับระบบปฏิบัติการกำลังทำงานอยู่ ปล่อยให้พวกเขาอยู่คนเดียว
rbhat avatar
kr flag
คุณกำลังบอกว่าเป็นเรื่องปกติที่ส่วนหัวของคอลัมน์หน่วยความจำตัวจัดการงานจะเป็นสีแดงเสมอ?
mfinni avatar
cn flag
อ่านบทความที่ฉันเชื่อมโยง หรือเพียงแค่อ่านย่อหน้าที่เกี่ยวข้องซึ่งฉันยกมาในคำตอบของฉัน
rbhat avatar
kr flag
ฉันได้อัปเดตคำถามด้วยภาพหน้าจอของตัวจัดการงานหลังจากหยุดบริการเซิร์ฟเวอร์ sql และเริ่มใหม่อีกครั้ง เหตุใดหน่วยความจำจึงอยู่ที่ 9% และเซิร์ฟเวอร์ sql ใช้หน่วยความจำมากกว่าที่ 96%
rbhat avatar
kr flag
FYI ฉันเรียกใช้ SSMS จากเวิร์กสเตชันของฉัน
Score:8
ธง ng

คุณขาดรายละเอียดสำคัญที่นี่: ตัวจัดการงานแสดง SQL Server ว่าใช้ RAM เพียง 344.5 MB แต่จริง ๆ แล้วสงวนไว้มากกว่านั้นมาก เกือบทั้งหมด สำหรับการใช้งานของตัวเอง ตัวจัดการงานจะไม่แสดงสิ่งนี้ ตัวเลขในตัวจัดการงานไม่ได้เพิ่มหน่วยความจำระบบถึง 97% เนื่องจากหน่วยความจำที่สงวนไว้ไม่แสดง

ข้อสันนิษฐานของคุณที่ว่าหน่วยความจำเกือบทั้งหมดของคุณถูกใช้งานโดยสิ่งอื่น และ SQL Server จึงไม่สามารถใช้งานได้มากกว่า 344.5 MB นั้นเป็นสิ่งที่ผิด มันใช้งานไม่ได้แบบนี้ ตัวจัดการงานอาจทำให้เข้าใจผิดได้ ให้ดูที่ตัวนับประสิทธิภาพจริง


ปรับปรุงเพื่อพยายามอธิบายให้ดียิ่งขึ้น

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

นี่คือ ไม่มีทาง ปัญหา; มันทำตามวัตถุประสงค์และโดยการออกแบบ ไม่มี "ปัญหา" ที่คุณเห็น มีเพียงสิ่งที่คุณเห็นในตัวจัดการงานเท่านั้นที่ทำให้เข้าใจผิด

หากคุณหยุด SQL Server แน่นอนว่าจะปล่อยหน่วยความจำที่จัดสรรไว้ทั้งหมด ทั้งที่แสดงใน Task Manager และ (อีกมากมาย) ที่ไม่แสดง เมื่อคุณเริ่มต้นอีกครั้ง จะใช้หน่วยความจำน้อยมาก: การใช้งานจะเพิ่มขึ้นอีกครั้งเมื่อเวลาผ่านไป เนื่องจาก SQL Server โหลดข้อมูลในหน่วยความจำและแคชไว้ แต่ความทรงจำส่วนใหญ่นี้อีกครั้งจะ ไม่ แสดงใน Task Manager เนื่องจากเครื่องมือเฉพาะนั้นไม่สามารถมองเห็นได้

ฉันจะเพิ่มด้วยว่าหาก SQL Server จริง จำเป็น หน่วยความจำก็จะจัดสรรในลักษณะที่แตกต่างกันและ แล้ว ตัวจัดการงานจะแสดง; คุณจะเห็นหน่วยความจำ 60 GB ที่ใช้โดย SQL Server หากเป็นเช่นนั้นจริง ที่จำเป็น หน่วยความจำมากขนาดนั้น แทนที่จะใช้เพื่อแคชเท่านั้น

rbhat avatar
kr flag
ฉันได้อัปเดตคำถามด้วยภาพหน้าจอของตัวจัดการงานหลังจากหยุดบริการเซิร์ฟเวอร์ sql และเริ่มใหม่อีกครั้ง เหตุใดหน่วยความจำจึงอยู่ที่ 9% และเซิร์ฟเวอร์ sql ใช้หน่วยความจำมากกว่าที่ 96%
Massimo avatar
ng flag
อย่างที่ฉันพูด SQL Server *จองหน่วยความจำเมื่อมันทำงาน* หน่วยความจำที่สงวนไว้นี้ไม่แสดงในตัวจัดการงาน แต่ใช้โดย SQL Server หากคุณรีสตาร์ท หน่วยความจำที่สงวนไว้ทั้งหมดจะถูกปลดปล่อยและการใช้งานหน่วยความจำจะลดลง มันจะเติบโตอีกครั้งเมื่อเวลาผ่านไปและตัวจัดการงานจะ *ไม่* แสดงต่อไป
Massimo avatar
ng flag
สิ่งที่คุณทำแสดงให้เห็นว่ากระบวนการที่ใช้หน่วยความจำทั้งหมดของคุณคือ *ตรง* กับ SQL Server มิฉะนั้นการรีสตาร์ทจะไม่มีผลต่อการใช้หน่วยความจำ
in flag
ตามแนวทางปฏิบัติที่ดีที่สุด ระบบปฏิบัติการควรเหลือหน่วยความจำเท่าใด

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา