หน้าจะถูกอ่านในหน่วยความจำตามต้องการหากไม่มีหน่วยความจำว่างหน้าเก่าที่ไม่ได้แก้ไขจะถูกแทนที่ด้วยหน้าขาเข้า
ซึ่งหมายความว่าหากคุณเรียกใช้คิวรีที่ต้องการข้อมูลมากกว่าที่จะสามารถใส่ในหน่วยความจำได้หลายหน้าจะมีชีวิตที่สั้นมากในหน่วยความจำทำให้เกิด I / O จำนวนมาก
คุณสามารถเห็นเอฟเฟกต์นี้ได้โดยดูที่ตัวนับ "Page Life Expectancy" ใน Windows Performance Monitor ดูhttps://sqlperformance.com/2014/10/sql-performance/knee-jerk-page-life-expectancyสำหรับรายละเอียดที่ดีเกี่ยวกับตัวนับนั้น
ในความคิดเห็นคุณถามเฉพาะสิ่งที่เกิดขึ้นเมื่อผลลัพธ์ของแบบสอบถามมีขนาดใหญ่กว่าพื้นที่บัฟเฟอร์ที่พร้อมใช้งาน ยกตัวอย่างที่ง่ายที่สุดselect * from some_very_big_table;
- ถือว่าตารางคือ 32GB และmax server memory (MB)
กำหนดค่าไว้ที่ 24GB ทั้งหมด 32GB ของตารางข้อมูลจะถูกอ่านในหน้าในหน้ากันชนหนึ่งที่เวลา, สลักจัดรูปแบบเป็นแพ็คเก็ตเครือข่ายและส่งข้ามสาย สิ่งนี้เกิดขึ้นทีละหน้า; คุณสามารถมีการค้นหา 300 ครั้งในเวลาเดียวกันและสมมติว่าไม่มีการบล็อกเกิดขึ้นข้อมูลสำหรับแต่ละแบบสอบถามจะถูกอ่านในพื้นที่บัฟเฟอร์ของหน้าหน้าในแต่ละครั้งและวางลงบนสายเร็วที่สุดเท่าที่ลูกค้าสามารถทำได้ ร้องขอและใช้ข้อมูล เมื่อข้อมูลทั้งหมดจากแต่ละหน้าถูกส่งไปที่การวางสายหน้าจะไม่เรียงกันและจะถูกแทนที่อย่างรวดเร็วโดยหน้าอื่นจากดิสก์
ในกรณีที่มีการสืบค้นที่ซับซ้อนยิ่งขึ้นให้พูดเช่นการรวมผลลัพธ์จากหลาย ๆ ตารางหน้าจะถูกดึงเข้าสู่หน่วยความจำตรงตามที่ต้องการโดยตัวประมวลผลแบบสอบถาม หากประมวลผลการสอบถามความต้องการของพื้นที่ทำงานชั่วคราวเพื่อผลการคำนวณก็จะรู้ล่วงหน้าว่าเมื่อมันรวบรวมแผนสำหรับการค้นหาและจะขอพื้นที่การทำงาน (หน่วยความจำ) จากSQLOS ในบางกรณี SQLOS (สมมติว่ามันไม่ได้หมดเวลา ) ให้หน่วยความจำนั้นกับตัวประมวลผลแบบสอบถามซึ่งการประมวลผลแบบสอบถามแบบจุดจะกลับมาทำงานอีกครั้ง หากตัวประมวลผลแบบสอบถามทำให้เกิดข้อผิดพลาดในการประเมินจำนวนหน่วยความจำที่จะขอจาก SQLOS อาจต้องดำเนินการ"การรั่วไหลไปยังดิสก์"การดำเนินการที่ข้อมูลถูกเขียนชั่วคราวลงใน tempdb ในรูปแบบกลาง เพจที่ถูกเขียนไปยัง tempdb จะไม่ได้เปรียบเมื่อพวกเขาถูกเขียนไปยัง tempdb เพื่อให้มีที่ว่างสำหรับหน้าอื่น ๆ ที่จะอ่านลงในหน่วยความจำ ในที่สุดกระบวนการสืบค้นจะกลับไปที่ข้อมูลที่เก็บไว้ใน tempdb การเพจที่ใช้ latching ลงในหน้าต่างๆในบัฟเฟอร์ที่ทำเครื่องหมายว่าว่าง
ฉันไม่ต้องสงสัยเลยว่าต้องมีรายละเอียดทางเทคนิคมากมายในบทสรุปข้างต้น แต่ฉันคิดว่ามันรวบรวมสาระสำคัญของวิธีที่ SQL Server สามารถประมวลผลข้อมูลได้มากกว่าที่จะพอดีกับหน่วยความจำ