ความเป็นมา:
ฉันมีฐานข้อมูลจำนวนมากที่มี VIEW จำนวนมากและ SYNONYM จำนวนมาก ตัวอย่างเช่นหนึ่งฐานข้อมูลมีมากกว่า 10k VIEW และ 2+ ล้าน SYNONYM
ปัญหาทั่วไป:
ข้อความค้นหาที่เกี่ยวข้องsys.objects
(และตารางระบบโดยทั่วไป) มีแนวโน้มที่จะช้า ข้อความค้นหาที่เกี่ยวข้องsys.synonyms
เป็นน้ำแข็ง ฉันสงสัยว่าฉันจะทำอย่างไรเพื่อปรับปรุงประสิทธิภาพ
ตัวอย่างที่เฉพาะเจาะจง
คำสั่งนี้ดำเนินการโดยเครื่องมือของบุคคลที่สาม มันช้าทั้งในแอพและใน SSMS:
exec sp_tables_rowset;2 NULL,NULL
คำถามของฉัน :
ฉันจะทำให้การทำงานนี้เร็วขึ้นได้อย่างไร
สิ่งที่ฉันได้ลอง :
ถ้าSET STATISTICS IO ON
ฉันได้รับสิ่งนี้:
(2201538 แถวที่ได้รับผลกระทบ)
ตาราง 'sysobjrdb' จำนวนการสแกน 1, การอ่านเชิงตรรกะ 28, การอ่านทางกายภาพ 0, การอ่านล่วงหน้าอ่าน 0, การอ่านตรรกะล่วงหน้า lob 0, lob ทางกายภาพอ่าน 0, lob การอ่านล่วงหน้าอ่าน 0
ตาราง 'sysschobjs' จำนวนการสแกน 1, โลจิคัลอ่าน 53926, ฟิสิคัลอ่าน 0, อ่านล่วงหน้าอ่าน 0, โลปลอจิกอ่าน 0, lob ฟิสิคัลอ่าน 0, lob อ่านล่วงหน้าอ่าน 0
ฉันสามารถอัปเดตสถิติในตารางระบบพื้นฐานได้แล้ว สิ่งนี้ใช้ได้ใน SQL 2008 R2 หรือสภาพแวดล้อมที่ใหม่กว่าของฉัน:
UPDATE STATISTICS sys.sysobjrdb WITH FULLSCAN
UPDATE STATISTICS sys.sysschobjs WITH FULLSCAN
ฉันยังสามารถทำการบำรุงรักษาดัชนีได้เช่นกัน สิ่งนี้ใช้ได้ใน SQL 2012 หรือสภาพแวดล้อมที่ใหม่กว่าของฉัน ตัวอย่างเช่นการรันsp_help 'sys.sysschobjs'
ระบุดัชนีบนโต๊ะและจากนั้นฉันก็สร้างและรันคำสั่งเหล่านี้:
ALTER INDEX clst ON sys.sysschobjs REORGANIZE
ALTER INDEX nc1 ON sys.sysschobjs REORGANIZE
ALTER INDEX nc2 ON sys.sysschobjs REORGANIZE
ALTER INDEX nc3 ON sys.sysschobjs REORGANIZE
การอัพเดตสถิติและการจัดระเบียบดัชนีใหม่ช่วยได้ แต่ไม่มากนัก