พื้นหลัง
ฉันอยู่ในขั้นตอนการย้ายฐานข้อมูล 160GB จาก MSSQL 2008 (มาตรฐาน) บนเซิร์ฟเวอร์ Win 2008 ที่มี 48gb RAM ไปยังเซิร์ฟเวอร์ใหม่ที่ใช้ MSSQL 2012 (รุ่นเว็บ 64 บิต) ใน Win 2012 ด้วย 64GB ของ RAM เซิร์ฟเวอร์เก่าใช้งานได้และอยู่ระหว่างการโหลด เซิร์ฟเวอร์ใหม่ไม่ได้ใช้งานจริง เซิร์ฟเวอร์ใหม่มีไฟล์ 8 tempdb (แต่ละไฟล์ 4GB)
ปัญหา
ในการทดสอบบนเซิร์ฟเวอร์ใหม่ฉันเห็นขั้นตอนในการสอบถามจำนวนมากทำให้เกิดการแจ้งเตือนถึง "ผู้ดำเนินการใช้ tempdb เพื่อทำข้อมูลหกระหว่างการดำเนินการ" ฉันสามารถหลีกเลี่ยงการเรียงลำดับได้โดยเขียนคำค้นหาบางคำใหม่ แต่นี่ไม่ได้เป็นการแก้ปัญหาจริงๆ แบบสอบถามเดียวกันบนเซิร์ฟเวอร์เก่าไม่ทำให้เกิดการรั่วไหล ฉันได้อ่านว่าการรั่วไหลเกิดขึ้นเมื่อ MSSQL ไม่สามารถดำเนินการในหน่วยความจำจนเสร็จและต้องมีการหก / หน้าลงใน tempdb ฉันควรจะกังวลเกี่ยวกับการหกหรือไม่
ตัวอย่าง
ฉันรัน sp_updatestats ในฐานข้อมูลดังนั้นสถิติควรเป็นข้อมูลล่าสุด แต่คุณจะสังเกตเห็นว่ามีความคลาดเคลื่อนระหว่างจำนวนแถวโดยประมาณกับจำนวนแถวจริง
ความกังวลของหน่วยความจำ
ฉันได้ตั้งค่าหน่วยความจำสูงสุดสำหรับ MSSQL 58 จาก 64gb ปัจจุบัน MSSQL ใช้หน่วยความจำนี้ประมาณ 35GB แต่มีชุดการทำงานเพียง 682mb เซิร์ฟเวอร์เก่า (แม้ว่าจะอยู่ระหว่างการผลิต, การจัดการโหลด) มีหน่วยความจำ 44gb ที่มุ่งมั่นกับ MSSQL ซึ่ง 43.5gb อยู่ในชุดการทำงาน
ฉันไม่ทราบว่าการรั่วไหลอาจเกี่ยวข้องกับการตั้งค่าหน่วยความจำ - ทุกคนมีแนวคิดหรือไม่? MSSQL ในปัจจุบันมี RAM เหลืออยู่เป็นจำนวนมากดังนั้นเหตุใดจึงมีการรั่วไหลลงใน tempdb สำหรับการแข่งขันและแฮชบางประเภท