Penyetelan kinerja Data tabel Pembersihan di SQL Server 2016

Aug 15 2020

Saya harus Mengotomatiskan Pembersihan volume data yang sangat besar dari tabel utama ke Arsip.

Langkah-langkah yang saya ikuti:

  1. Saya memasukkan data dari tabel utama ke tabel arsip.

  2. Setelah memverifikasi silang hitungan di kedua tabel, menghapus data dari tabel utama.

Risiko: Pernyataan penghapusan mungkin masuk dalam keadaan hung dan DB akan masuk dalam mode pemulihan.

Catatan : kami tidak dapat melakukan operasi DDL apa pun di tabel utama karena ini adalah tabel transaksi langsung. Kita bisa pergi dengan DML.

  • Basis data: SQL Server 2016
  • OS: Windows dan IIS

Jawaban

4 MTay Aug 15 2020 at 15:58

DDL adalah salah satu cara utama untuk mempercepat penghapusan record, tetapi melihat bahwa DDL bukanlah pilihan dan Anda menghadapi 'status hang' untuk menghapus pernyataan, mungkin saya menyarankan untuk mencari cara menghapus record dalam batch?

Silakan lihat tautan , dan berikut adalah contoh kueri berdasarkan tautan:

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

Dalam kasus ini, saat kami menghapus menurut Tanggal, pastikan Anda memiliki indeks pada Tanggal sehingga SQL Server dapat dengan cepat mengambil hanya baris tersebut. Anda ingin menghindari penguncian tingkat tabel.