Réglage des performances de la purge des données de table dans SQL Server 2016

Aug 15 2020

Je dois automatiser la purge d'un énorme volume de données de la table principale à l'archive.

Étapes que je suis :

  1. J'insère les données de la table principale dans la table d'archives.

  2. Après vérification croisée du nombre dans les deux tables, suppression des données de la table principale.

Risque : l'instruction de suppression peut passer à l'état bloqué et la base de données passera en mode de récupération.

Remarque : nous ne pouvons effectuer aucune opération DDL sur la table principale car il s'agit d'une table de transactions en direct. Nous pouvons aller avec DML.

  • Base de données : SQL Server 2016
  • Système d'exploitation : Windows et IIS

Réponses

4 MTay Aug 15 2020 at 15:58

DDL est l'un des principaux moyens d'accélérer la suppression des enregistrements, mais étant donné que DDL n'est pas une option et que vous êtes confronté à des "états suspendus" pour les instructions de suppression, je suggère peut-être d'envisager de supprimer des enregistrements par lots ?

Veuillez consulter le lien , et voici un exemple de requête basé sur le lien :

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

Dans ce cas, lorsque nous supprimons par Date, assurez-vous d'avoir un index sur Date afin que SQL Server puisse récupérer rapidement ces lignes. Vous voudrez éviter le verrouillage au niveau de la table.