Réglage des performances de la purge des données de table dans SQL Server 2016
Je dois automatiser la purge d'un énorme volume de données de la table principale à l'archive.
Étapes que je suis :
J'insère les données de la table principale dans la table d'archives.
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
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.