สวัสดีครับ
ตอนนี้ผมเจอปัญหาคือ ผมไม่สามารถลบข้อมูลบน database ในจำนวนมากได้ (ประมาณ 1 ล้านแถว) มันจะ timeout ครับ
โปรแกรมของผมคือ ผมเขียน ssis (VB.net) ให้มันเข้าไปลบ ข้อมูลใน database ของ sql server 2012 โดยใช้คำสั่ง delete from where ธรรมดา
แต่ หลังเกิด timeout error มีคนแนะนำให้ผม ค่อยๆ ทยอยลบ ผมเลยไปหาในกูเกิ้ล ได้คำสั่ง delete top (จำนวน row) from where มาครับ
ผมก็เลยเอามาแปลงโปรแกรมของผมนิดหน่อย โดยมีการใช้ do until loop (VB.net) เพื่อเช็คจำนวน row ว่ามันถึง 0 หรือยัง ใช้คำสั่ง select count(*) ครับ และลบทีละ 1 หมื่น row
แต่ก็ยังไม่วายเกิด timeout อยู่ดีครับ
แต่มีข้อสังเกตุที่ผมสังเกตุได้อย่างนึงคือ ใน table ที่มีจำนวน row ประมาณ 9 แสน ลงมา จะไม่เกิด timeout แต่ table ที่เกิด timeout มันมีประมาณ 1.4 ล้าน row ครับ
จึงอยากกได้มีวิธีแก้ปัญหาครับ
นี่คือตัวอย่าง โค้ด ที่ผมเขียนครับ
เป็นโค้ดที่เขียนบน VB.net นะครับ จะไม่ได้ตรงเป๊ะนะครับ เขียนพอให้เห็นรูปแบบโค้ดคร่าวๆครับ
[ connection.open
Do
str = delete top (10000) from ... where..
ส่ง str ไปลบ
rowcount = select count (*) from .... where
untill rowcount = 0
connection.close
ประมาณนี้ครับ
รบกวนด้วยครับ
ขอบคุณครับ
ตอบ/อธิบาย