ฉันกำลังนำเข้าข้อมูลจำนวนมากไปยังฐานข้อมูลว่างเปล่าและก่อนที่ฉันจะเริ่มฉันจะปิดการใช้งานดัชนีที่ไม่ใช่แบบคลัสเตอร์ที่ไม่ซ้ำกันทั้งหมดเพื่อดูว่าฉันสามารถปรับปรุงประสิทธิภาพของการนำเข้าได้หรือไม่
ตอนนี้ฉันต้องการเปิดใช้งานดัชนีอีกครั้งและฉันสงสัยว่ามีสิ่งใดบ้างที่ฉันสามารถทำได้เพื่อปรับให้เหมาะสมนี้
มีตารางมากกว่า 100 ตารางและดัชนีเกือบ 2,000 รายการที่จะสร้างใหม่ ฐานข้อมูลมีขนาด 200GB
ส่วนสำคัญของสคริปต์ที่ฉันใช้คือ:
declare c_toggle_index cursor FORWARD_ONLY READ_ONLY for
select 'alter index ' + QUOTENAME(i.name) + ' on ' + o.name + ' rebuild'
from sys.indexes as i
Inner Join sys.objects o
On o.object_id = i.object_id
Where o.is_ms_shipped = 0
And i.index_id >= 1
and i.type > 1
and i.is_disabled = 1
ฉันถือว่าการตั้งค่า ONLINE = OFF สำหรับคำสั่งเปลี่ยนแปลงดัชนี แต่เมื่อดัชนีเริ่มต้นปิดการใช้งานฉันไม่แน่ใจว่าการตั้งค่านี้จะมีผลกระทบใด ๆ ฉันยังพิจารณาการตั้งค่า SORT_IN_TEMPDB = ON แต่เนื่องจากไฟล์ tempdb อยู่ในไดรฟ์เดียวกันกับไฟล์. mdf ของฐานข้อมูลที่ฉันคิดว่าไม่มีประโยชน์ในการทำเช่นนั้น
ขณะที่เรียกใช้สคริปต์การสร้างใหม่ฉันสังเกตว่าฉันมี CXPACKET หลายประเภทรออยู่ ฉันไม่เข้าใจจริงๆว่าทำไมถึงเป็นเช่นนั้นหรือถ้าเป็นปัญหาที่ฉันควรมองหาที่อยู่
ประเด็นสุดท้ายที่อาจเกี่ยวข้อง: เซิร์ฟเวอร์ทั้งหมดของฉันไม่ได้ใช้งานในปัจจุบันนอกเหนือจากการนำเข้าข้อมูลเข้าสู่ฐานข้อมูล ไม่มีกิจกรรมของผู้ใช้อื่น ๆ ที่ต้องพิจารณาหรือกังวล ข้อกังวลเดียวของฉันคือการนำเข้าข้อมูลไปยังฐานข้อมูลในเวลาที่สั้นที่สุด
CXPACKET
waits: index จะสร้างดัชนีการสแกนเองใหม่ (แม้แต่ดัชนีที่ถูกสร้างใหม่ ) และการสแกนเหล่านั้นสามารถใช้การขนานได้ คุณไม่ควรกังวลเกี่ยวกับการรอคอย - การขนานกันอาจช่วยได้