รดน้ำดำหัว


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

สังคมนักพัฒนาระบบ (Community)

สังคมนักพัฒนาระบบ โพสสอบถามปัญหาการเขียนโปรแกรม สมาชิกแนะนำตัว สอบถามความคิดเห็น

beta version

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

vb.net  sqlserver2012  sqlserver  ssis  big data  5 ม.ค. 2017, 22:25:31 173

Icq San

Icq San metee009

  • 0 เพื่อน
  • 0 ผู้ติดตาม
  • 1 โพสต์

สวัสดีครับ

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

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

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

ขอบคุณครับ

โดย Icq San (metee009) ตั้งกระทู้เมื่อ 5 ม.ค. 2017, 22:25:31 แก้ไขล่าสุดเมื่อ 5 ม.ค. 2017, 22:36:03

Udemy

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


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

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



กลับขึ้นบน