ต้องการลบข้อมูลขนาดใหญ่แบบไม่เกิด timeout

wave
Icq San
2,722
สังคมนักพัฒนาระบบ (Community)
ต้องการลบข้อมูลขนาดใหญ่แบบไม่เกิด timeout

สวัสดีครับ

ตอนนี้ผมเจอปัญหาคือ ผมไม่สามารถลบข้อมูลบน 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

ประมาณนี้ครับ 

รบกวนด้วยครับ 

ขอบคุณครับ

0 ความคิดเห็น
ไม่พบผลลัพธ์