ตามหนังสือการอ่านของฉันเกี่ยวกับ SQL Server 2008 Internals และการแก้ไขปัญหา (ยืมมาจากห้องสมุดท้องถิ่นในรัฐอิลลินอยส์) โดย Christian Bolton, Brent Ozar เป็นต้นฉันกำลังพยายามทำความเข้าใจและยืนยันบนเซิร์ฟเวอร์ SQL และการค้นหาบนเว็บฉันจะขอบคุณถ้ามีคน สามารถยืนยันหรือแก้ไขความเข้าใจของฉัน
ทุกแบบสอบถามหรือการดำเนินการที่ต้องการให้หน่วยความจำแบบสอบถามจะต้องมีหน่วยความจำพื้นที่ทำงาน ในข้อความค้นหาทั่วไปที่ใช้การเรียงลำดับการจับคู่การแฮชการขนาน (ไม่แน่ใจเกี่ยวกับเรื่องนี้) การแทรกจำนวนมาก (ไม่แน่ใจ) การสร้างดัชนีใหม่เป็นต้นจะต้องใช้หน่วยความจำของพื้นที่ทำงานแบบสอบถาม
หน่วยความจำพื้นที่ทำงานเป็นส่วนหนึ่งของพูลบัฟเฟอร์ของ SQL Server (ถูกจัดสรรเป็นส่วนหนึ่งของบัฟเฟอร์พูล) และหน่วยความจำสูงสุดของพื้นที่ทำงานคือ 75% ของหน่วยความจำที่จัดสรรให้กับบัฟเฟอร์พูล โดยค่าเริ่มต้นแบบสอบถามเดียวไม่สามารถรับหน่วยความจำเวิร์กสเปซเกินกว่า 25% (ใน SQL 2008 / SQL 2012 - ควบคุมโดยกลุ่มภาระงานเริ่มต้นของผู้ว่าการทรัพยากรออกจากกล่อง)
ค้นหาการยืนยันความเข้าใจของฉัน
1) ระบบการพิจารณาที่มี 48 GB RAM และหน่วยความจำเซิร์ฟเวอร์สูงสุดที่กำหนดค่าเป็น 40 GB หมายความว่าหน่วยความจำสูงสุดของพื้นที่ทำงานถูก จำกัด ที่ 30 GB และแบบสอบถามเดียวไม่สามารถรับหน่วยความจำพื้นที่ทำงาน (หน่วยความจำแบบสอบถาม) มากกว่า 10 GB ดังนั้นหากคุณมีคำถามที่ไม่ดีทำงานร่วมกับหนึ่งพันล้านแถวที่เข้าร่วมแฮชจำนวนมากและต้องการหน่วยความจำมากกว่า 10 GB (หน่วยความจำของเวิร์กสเปซ) มันจะยิ่งสนใจที่จะผ่านคิวการให้สิทธิ์ของหน่วยความจำนี้หรือทันที
2) ถ้าแบบสอบถามทำดำเนินการเรียงลำดับขนาดใหญ่ได้รับการกำหนดหน่วยความจำพื้นที่ทำงานของ 5 MB และในระหว่างการดำเนินการแบบสอบถามของแบบสอบถามถ้าเพิ่มประสิทธิภาพการค้นหาตระหนักว่าเนื่องจากสถิติที่ไม่ดีหรือดัชนีที่หายไปแบบสอบถามนี้จริงจะต้อง30 MBหน่วยความจำพื้นที่ทำงานมัน จะรั่วไหลไปยัง tempdb ทันที แม้ว่าระบบจะมีหน่วยความจำเวิร์กสเปซจำนวนมากที่พร้อมใช้งานในระหว่างการดำเนินการเมื่อเคียวรีเกินกว่าหน่วยความจำเวิร์กสเปซที่ได้รับในระหว่างการดำเนินการ ความเข้าใจของฉันถูกต้องหรือไม่?