Ottimizzazione delle prestazioni dei dati della tabella di eliminazione in SQL Server 2016

Aug 15 2020

Devo automatizzare l'eliminazione di un enorme volume di dati dalla tabella principale all'archivio.

Passi che sto seguendo:

  1. Sto inserendo i dati dalla tabella principale alla tabella di archivio.

  2. Dopo aver verificato il conteggio in entrambe le tabelle, eliminando i dati dalla tabella principale.

Rischio: l'istruzione Delete può andare in stato bloccato e il DB andrà in modalità di ripristino.

Nota : non possiamo eseguire alcuna operazione DDL sulla tabella principale poiché è una tabella delle transazioni live. Possiamo andare con DML.

  • Base dati: SQL Server 2016
  • Sistema operativo: Windows e IIS

Risposte

4 MTay Aug 15 2020 at 15:58

DDL è uno dei modi principali per accelerare l'eliminazione dei record, ma visto che DDL non è un'opzione e stai affrontando "stati di sospensione" per le istruzioni di eliminazione, forse suggerisco di esaminare l'eliminazione dei record in batch?

Consulta link , ed ecco un esempio di query basato sul link:

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

In questo caso, quando eliminiamo per data, assicurati di avere un indice su data in modo che SQL Server possa acquisire rapidamente solo quelle righe. Ti consigliamo di evitare il blocco a livello di tabella.