ฉันสามารถปรับปรุงประสิทธิภาพบนตารางระบบ Bloated ได้หรือไม่


12

ความเป็นมา:
ฉันมีฐานข้อมูลจำนวนมากที่มี 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

การอัพเดตสถิติและการจัดระเบียบดัชนีใหม่ช่วยได้ แต่ไม่มากนัก


อุ๊ยตาย ฉันเดาว่าคุณกำลังทำธุระผู้เช่าหลายประเภทที่ยุ่งเหยิงทำให้ข้อมูลของทุกคนอยู่ในตารางเดียวกัน & กรองด้วยมุมมองและการใช้คำพ้องเพื่อตั้งชื่อพวกเขาหลังจากวัตถุฐานในระดับใหญ่? ไม่ว่าฉันจะรู้สึกอย่างไรกับคุณ
Philᵀᴹ

2
ผู้เช่าหลายคน? จริงๆแล้วไม่มี มันไม่ใช่ ค่อนข้างยุ่งอยู่ใช่มั้ย FWIW เป็นความเข้าใจของฉันว่าสำหรับผู้ใช้แอปพลิเคชันทุกคนมีการสร้าง 5 SYNONYM สำหรับทุกตาราง ฉันโชคดี.
Dave Mason

การลบการอนุญาตให้บางวัตถุเหล่านั้นเพิ่มประสิทธิภาพ (เพื่อให้มีการใช้งานได้น้อยลงหรือไม่) ฉันไม่รู้ว่าเป็นตัวเลือกในระดับผู้ใช้หรือไม่
ConstantineK

มันจะน่าสนใจที่จะเห็นแผนการดำเนินการเกี่ยวกับเรื่องนี้ บางทีคุณสามารถโพสต์หนึ่งจากผู้สำรวจแผน sql ไปยังanswer.sqlperformance.comและเชื่อมโยงกับมันเว้นแต่จะมีวิธีการฝังที่นี่เช่นกัน ฉันน่าสนใจในการดู
SheldonH

คำตอบ:


1

หากคุณยังไม่ได้ดำเนินการคุณสามารถเพิ่มประสิทธิภาพโดยย้ายไฟล์ข้อมูลหลักไปยังชุดแกนแยกแยกจากส่วนที่เหลือของข้อมูล (ดูที่ไฟล์และสถาปัตยกรรมกลุ่มไฟล์และSQL Server: กลุ่มไฟล์สำหรับตารางระบบเท่านั้น? )


ฉันคิดว่านี่เป็นคำแนะนำทางเสียง แต่มันจะถูกลบล้างในเรื่องผลกระทบมากถ้าการตั้งค่า IO ไม่ใช่เซิร์ฟเวอร์ฟิสิคัลมาตรฐานที่มีดิสก์ที่แนบมาเช่นอินสแตนซ์เสมือนกับ SAN หรือไดรฟ์ SSD จะลดผลกระทบที่สังเกตเห็นได้ชัดเจน ไปยังตำแหน่งอื่นใช่ไหม
SheldonH

1
หากคุณมีการควบคุมฮาร์ดแวร์ (เช่นคุณไม่ได้โฮสต์โดยบุคคลที่สาม) คุณสามารถมีชุดแกนหมุนที่แตกต่างกันใน SAN (เช่นโวลุ่ม RAID-10 สองตัวหรือมากกว่าแยกต่างหาก) หากคุณกำลังใช้ (หรือโฮสต์) กับ SSD หมายความว่าไม่มีแกนหมุนและ IO จะถูก จำกัด โดยส่วนใหญ่สิ่งใดก็ตามที่เป็นคอขวดระหว่างไดรฟ์และเมนบอร์ด (เช่น SATA, RAID หรือ NIC การ์ด, สายเคเบิล, เราเตอร์ / สวิตช์ , SAN, SSDs ความเร็ว) ดังนั้นคุณจะไม่ได้อะไรจากการแยกไฟล์ในกรณีนั้น
Ziggy Crueltyfree Zeitgeister
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.