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

Questions? Answer and Share

เขียนโค๊ดติดปัญหา สอบถาม ระดมสมอง หาหนทางที่ดีที่สุดให้โค๊ดของคุณ ร่วมสร้างสรรค์สังคมนักพัฒนา เขียนโค๊ดติดบั๊ก อยากได้ไอเดีย เจอเรื่องดีๆ โพสถาม โพสแชร์ ได้ที่นี่

beta version

ต้องการลบข้อมูลขนาดใหญ่แบบไม่เกิด 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

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

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

ขอบคุณครับ

vb.net sqlserver2012 sqlserver ssis big data 5 ม.ค. 2017, 22:25:31
Icq San
Icq San metee009
ตั้ง:1 ตอบ:0
แสดงความคิดเห็น

คำตอบ-คำอธิบาย


ไม่พบผลลัพธ์

คำตอบ-คำอธิบายของคุณ



กลับขึ้นบน