การเก็บตารางข้อมูล SQL Server ไว้ในหน่วยความจำเป็นฟังก์ชันที่ SQL Server มอบให้ ซึ่งไม่ค่อยเกี่ยวข้องกับกระบวนการพัฒนาของระบบขนาดเล็กทั่วไป เอกสารที่เกี่ยวข้องได้รับการรวบรวมไว้ที่นี่เพื่อสาธิตวิธีใส่ข้อมูลทั้งหมดของตารางใน SQL Server ลงในหน่วยความจำเพื่อใช้ฐานข้อมูลในหน่วยความจำและปรับปรุงประสิทธิภาพแบบเรียลไทม์
1, DBCC PINTABLE
ทำเครื่องหมายตารางที่จะปักหมุด ซึ่งหมายความว่า Microsoft SQL Server จะไม่ล้างเพจสำหรับตารางจาก
ไวยากรณ์
DBCC PINTABLE (database_id , table_id )
หากต้องการระบุ ID ฐานข้อมูล ให้ใช้ฟังก์ชัน DB_ID
หากต้องการระบุ ID ตาราง ให้ใช้ฟังก์ชัน OBJECT_ID
การแสดงความคิดเห็น
DBCC PINTABLE ไม่ทำให้ตารางถูกอ่านลงในหน่วยความจำ เมื่อเพจในตารางถูกอ่านในแคชโดยคำสั่ง Transact-SQL ธรรมดา เพจเหล่านั้นจะถูกทำเครื่องหมายเป็นเพจที่อยู่ในหน่วยความจำ เพจที่อยู่ในหน่วยความจำจะไม่ถูกล้างเมื่อ SQL Server ต้องการพื้นที่ในการอ่านในหน้าใหม่ SQL Server ยังคงบันทึกการอัปเดตไปยังเพจ และหากจำเป็น ให้เขียนเพจที่อัปเดตกลับไปยังดิสก์ อย่างไรก็ตาม SQL Server จะเก็บสำเนาของเพจที่มีอยู่ในแคชจนกว่าตารางจะถูกทำให้ไม่มีถิ่นที่อยู่โดยใช้คำสั่ง DBCC UNPINTABLE
DBCC PINTABLE เหมาะที่สุดสำหรับการเก็บตารางขนาดเล็กที่มีการอ้างอิงบ่อยครั้งไว้ในหน่วยความจำ อ่านหน้าต่างๆ ของตารางเล็กลงในหน่วยความจำพร้อมกัน และการอ้างอิงข้อมูลในอนาคตทั้งหมดไม่จำเป็นต้องอ่านจากดิสก์
หมายเหตุ DBCC PINTABLE สามารถให้การปรับปรุงประสิทธิภาพได้ แต่ต้องใช้ด้วยความระมัดระวัง หากมีตารางขนาดใหญ่อยู่ ตารางแรกจะใช้แคชส่วนใหญ่โดยไม่เหลือแคชเพียงพอสำหรับตารางอื่นๆ ในระบบ หากตารางที่โฮสต์มีขนาดใหญ่กว่าแคช ตารางจะเติมแคชทั้งหมด สมาชิกของบทบาทเซิร์ฟเวอร์คงที่ของ sysadmin ต้องปิดระบบและรีสตาร์ท SQL Server จากนั้นทำให้ตารางไม่มีถิ่นที่อยู่ การโฮสต์ตารางมากเกินไปจะสร้างปัญหาเดียวกันกับการโฮสต์ตารางที่มีขนาดใหญ่กว่าแคช
ตัวอย่าง:
Declare @db_id int, @tbl_id int
Use DATABASE_NAME
Set @db_id = DB_ID('DATABASE_NAME')
Set @tbl_id = Object_ID('Department')
DBCC pintable (@db_id, @tbl_id)
สามารถกำหนดให้ตาราง Department เป็น memory- ถิ่นที่อยู่
ประกาศ @db_id int, @tbl_id int
ใช้ DATABASE_NAME
Set @db_id = DB_ID('DATABASE_NAME')
Set @tbl_id = Object_ID('Department')
DBCC UNpintable (@db_id, @tbl_id)
สามารถยกเลิกการตั้งค่า table Department เป็น memory-resident ได้
คุณสามารถใช้คำสั่ง SQL ต่อไปนี้เพื่อตรวจจับการดำเนินการ:
เลือก ObjectProperty(Object_ID('Department'),'TableIsPinned')
หากผลลัพธ์ที่ส่งคืนคือ 1: หมายความว่าตารางได้รับการตั้งค่าให้อยู่ในหน่วยความจำ 0: หมายความว่า ว่าไม่ได้ตั้งค่าให้อยู่ในหน่วยความจำ
2, SP_TableOption
ตั้งค่าตัวเลือกสำหรับตารางที่ผู้ใช้กำหนด sp_tableoption อาจใช้ในการเปิดคุณลักษณะข้อความในแถวบนตารางที่มีข้อความ, ntext หรือคอลัมน์
รูปภาพ
sp_tableoption [ @TableNamePattern = ] 'ตาราง'
, [ @OptionName = ] 'option_name'
, [ @OptionValue = ] 'value'
โดยที่ 'option_name' มีการใช้งานดังต่อไปนี้:
pintable -- เมื่อปิดใช้งาน (ค่าเริ่มต้น) จะทำเครื่องหมายตารางว่าไม่มี RAM อีกต่อไป เมื่อเปิดใช้งาน ทำเครื่องหมายตารางเป็น RAM-resident (ตารางที่ระบุสามารถอยู่ในหน่วยความจำได้)
นอกจากนี้ การล็อกตารางเมื่อโหลดจำนวนมาก การแทรกการล็อกแถว ข้อความในแถว และค่าเสริมอื่นๆ ไม่เกี่ยวข้องกับตารางที่อยู่ในหน่วยความจำ สำหรับการใช้งานเฉพาะ คุณสามารถสอบถาม SQL Server Books ได้ ออนไลน์
ค่า มีการใช้งานดังต่อไปนี้:
option_name เปิดใช้งาน (จริง เปิด หรือ 1) หรือปิดใช้งาน (เท็จ ปิด หรือ 0)
ตัวอย่าง:
EXEC sp_tableoption 'Department', 'pintable', 'true'
จะ
ทำให้แผนกตารางข้อมูลอยู่ในหน่วยความ
จำ .
คุณสามารถใช้คำสั่ง SQL ต่อไปนี้เพื่อตรวจจับการดำเนินการ:
เลือก ObjectProperty(Object_ID('Department'),'TableIsPinned')
หากผลลัพธ์ที่ส่งคืนคือ 1: หมายความว่าตารางได้รับการตั้งค่าให้อยู่ในหน่วยความจำ 0: หมายความว่า ว่าไม่ได้ตั้งค่าให้อยู่ในหน่วยความจำ
3. บทสรุป
เมื่อตั้งค่าตารางข้อมูลให้เป็นหน่วยความจำ ตารางจะไม่ถูกอ่านเข้าสู่หน่วยความจำจริงๆ จนกว่าตารางจะถูกดึงข้อมูล ดังนั้น คุณสามารถใช้คำสั่ง SQL ต่อไปนี้เพื่อเก็บแผนกตารางข้อมูลเพิ่มเติมในหน่วยความจำได้:
เลือก * จากแผนก
นอกจากนี้ คุณสามารถใช้คำสั่ง SQL ต่อไปนี้เพื่อแสดง/ตรวจจับตารางทั้งหมดที่ตั้งค่าให้อยู่ในหน่วยความจำในฐานข้อมูลได้อย่างง่ายดาย:
SELECT * FROM INFORMATION_SCHEMA.Tables
WHERE TABLE_TYPE = 'BASE TABLE'
AND OBJECTPROPERTY(object_id(TABLE_NAME), 'TableIsPinned' ) > 0