Workspace หน่วยความจำภายใน


13

ตามหนังสือการอ่านของฉันเกี่ยวกับ 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 ทันที แม้ว่าระบบจะมีหน่วยความจำเวิร์กสเปซจำนวนมากที่พร้อมใช้งานในระหว่างการดำเนินการเมื่อเคียวรีเกินกว่าหน่วยความจำเวิร์กสเปซที่ได้รับในระหว่างการดำเนินการ ความเข้าใจของฉันถูกต้องหรือไม่?

คำตอบ:


13

มันจะสนใจที่จะผ่านคิวการให้หน่วยความจำนี้หรือทันทีที่รั่วไหลไปยังดิสก์?

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

หากเครื่องมือเพิ่มประสิทธิภาพการค้นหาทราบว่าเนื่องจากสถิติไม่ดีหรือดัชนีหายไป

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

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

น่าเสียดายใช่ อย่างไรก็ตามเครื่องมือเพิ่มประสิทธิภาพควรมาพร้อมกับแผนการที่ใช้ประโยชน์จาก RAM ที่มีอยู่

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


4
Remus Rusanu (MSFT) ฉันดูในโพสต์บล็อกของคุณในระหว่างการค้นหาเว็บที่เกี่ยวข้องกับผู้ให้บริการที่ต้องการหน่วยความจำแบบสอบถาม ขอบคุณคุณเป็นอัญมณีที่แท้จริงที่สนับสนุนฟอรัมนี้
SQL Learner


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