ในการสรุปข้อมูลเฉพาะ: เราจำเป็นต้องทำขั้นตอนประมาณ 5 ล้านแถวในฐานข้อมูลผู้จำหน่าย (Oracle) ทุกอย่างทำงานได้อย่างยอดเยี่ยมสำหรับแถวที่มีขนาด 500k โดยใช้OracleBulkCopy
(ODP.NET) แต่เมื่อเราพยายามที่จะขยายขนาดสูงสุด 5M ประสิทธิภาพการทำงานจะเริ่มช้าลงเมื่อทำการรวบรวมข้อมูลเมื่อมันมาถึงเครื่องหมาย 1M จะช้าลงเรื่อย ๆ เมื่อโหลดแถวมากขึ้น หมดเวลาหลังจาก 3 ชั่วโมงหรือมากกว่านั้น
ฉันสงสัยว่ามันเกี่ยวข้องกับคีย์หลักบนโต๊ะ แต่ฉันได้สืบค้นฟอรัม Oracle และ Stack Overflow เพื่อดูข้อมูลและสิ่งที่ฉันอ่านขัดแย้งมาก (เช่นกันโพสต์จำนวนมากดูเหมือนจะขัดแย้งกัน ) . ฉันหวังว่าใครบางคนสามารถตั้งค่าการบันทึกตรงคำถามที่เกี่ยวข้องอย่างใกล้ชิดเกี่ยวกับกระบวนการ:
ที่ไม่
OracleBulkCopy
ระดับธรรมดาหรือใช้โดยตรงเส้นทางโหลด? มีวิธีที่ฉันสามารถยืนยันสิ่งนี้ไม่ทางใดก็ทางหนึ่งได้หรือไม่?สมมติว่ามันไม่ใช้โดยตรงเส้นทางโหลด: มันเป็นความจริงว่า Oracle จะตั้งค่าดัชนีทั้งหมดจะใช้ไม่ได้ในระหว่างการโหลดและทำให้พวกเขากลับมาออนไลน์หลังจากนั้น? ฉันได้อ่านแถลงการณ์หลายฉบับเกี่ยวกับเอฟเฟกต์นี้ แต่ไม่สามารถยืนยันได้อีก
ถ้า # 2 เป็นจริงแล้วมันควรสร้างความแตกต่างใด ๆ ที่ดัชนีอยู่บนตารางก่อนที่ฉันจะเริ่มต้นการดำเนินการคัดลอกจำนวนมาก? ถ้าเป็นเช่นนั้นทำไม
เกี่ยวข้องกับ # 3 มีความแตกต่างในทางปฏิบัติโดยทั่วไประหว่างการโหลดจำนวนมากกับดัชนีที่ใช้ไม่ได้กับการลดลงดัชนีจริงก่อนที่จะโหลดและสร้างใหม่ในภายหลังหรือไม่
หาก # 2 คือไม่ถูกต้องหรือหากมีบางประการที่ฉันไม่เข้าใจแล้วมันจะสร้างความแตกต่างใด ๆอย่างชัดเจนทำให้ดัชนีไม่สามารถใช้งานก่อนที่จะโหลดทั้งกลุ่มแล้ว อย่างชัดเจนสร้างมันหลังจากนั้น?
มีสิ่งอื่นใดนอกเหนือจากการสร้างดัชนีซึ่งอาจทำให้การดำเนินการคัดลอกจำนวนมากเติบโตช้าลงอย่างต่อเนื่องเมื่อมีการเพิ่มบันทึกมากขึ้นหรือไม่ (อาจเกี่ยวข้องกับการบันทึกแม้ว่าฉันจะคาดหวังว่าการดำเนินการจำนวนมากจะไม่ถูกบันทึกไว้)
หากไม่มีวิธีอื่นที่จะทำให้ประสิทธิภาพการทำงานลดลงจากการลดระดับ PK / ดัชนีก่อนสิ่งที่ฉันสามารถทำได้เพื่อให้แน่ใจว่าดัชนีจะไม่หายไปอย่างสมบูรณ์เช่นถ้าการเชื่อมต่อกับฐานข้อมูลหายไป กลางกระบวนการ