การปรับประสิทธิภาพของการล้างข้อมูลตารางใน SQL Server 2016

Aug 15 2020

ฉันต้องทำการล้างข้อมูลจำนวนมหาศาลจากตารางหลักไปยังที่เก็บถาวรโดยอัตโนมัติ

ขั้นตอนที่ฉันกำลังติดตาม:

  1. ฉันกำลังแทรกข้อมูลจากตารางหลักไปยังตารางเก็บถาวร

  2. หลังจากยืนยันการนับจำนวนในทั้งสองตารางแล้วให้ลบข้อมูลออกจากตารางหลัก

ความเสี่ยง: คำสั่งลบอาจอยู่ในสถานะหยุดทำงานและ DB จะเข้าสู่โหมดการกู้คืน

หมายเหตุ : เราไม่สามารถดำเนินการ DDL บนโต๊ะหลักได้เนื่องจากเป็นตารางธุรกรรมจริง เราสามารถไปกับ DML

  • ฐานข้อมูล: SQL Server 2016
  • ระบบปฏิบัติการ: Windows และ IIS

คำตอบ

4 MTay Aug 15 2020 at 15:58

DDL เป็นหนึ่งในวิธีหลักในการเร่งความเร็วในการลบบันทึก แต่เมื่อเห็นว่า DDL ไม่ใช่ตัวเลือกและคุณกำลังเผชิญกับ 'สถานะหยุดทำงาน' สำหรับคำสั่งลบบางทีฉันขอแนะนำให้มองหาการลบระเบียนในแบทช์?

โปรดดูลิงค์และนี่คือตัวอย่างการค้นหาตามลิงค์:

DECLARE @Batch INT = 1000
WHILE 1 = 1
BEGIN
    DELETE TOP (@Batch)
    FROM MyTable
    WHERE Date < ‘20200401’';
    IF @@ROWCOUNT < @Batch BREAK
END

ในกรณีนี้เมื่อเราลบตามวันที่ตรวจสอบให้แน่ใจว่าคุณมีดัชนีในวันที่เพื่อให้ SQL Server สามารถดึงเฉพาะแถวเหล่านั้นได้อย่างรวดเร็ว คุณจะต้องหลีกเลี่ยงการล็อกระดับโต๊ะ