J'ai supposé qu'après chaque opération d'indexation effectuée par le formulaire "ALL" de la commande, les données du journal des transactions seraient vidées avant la prochaine reconstruction d'index. Est-ce ainsi que cela fonctionne réellement, ou les reconstructions d'index sont-elles enregistrées comme si elles faisaient partie d'une seule transaction?
1) Purge du journal: le modèle de récupération SIMPLE n'efface pas le journal après chaque transaction, mais aux points de contrôle. ( lien pour plus d'informations)
2a) RECONSTRUIRE TOUT: oui, RECONSTRUIRE TOUT fonctionne comme une transaction unique. Les reconstructions d'index à l'intérieur ont leurs propres transactions, mais l'opération globale n'est pas entièrement validée jusqu'à la fin. Alors oui, vous pouvez limiter la croissance des fichiers journaux en reconstruisant des index individuels (et éventuellement en émettant des commandes CHECKPOINT).
2b) La preuve! Ici, ayez un script de démonstration. (Construit en 2016 dev) Tout d'abord, configurez une base de données de test, avec table et index:
USE master
GO
CREATE DATABASE Test_RebuildLog
GO
ALTER DATABASE Test_RebuildLog
SET RECOVERY SIMPLE
GO
USE Test_RebuildLog
GO
CREATE TABLE IndexTest
(ID int identity(1,1),
a char(1),
b char(1))
CREATE CLUSTERED INDEX CIX_IndexTest_ID ON IndexTest(ID)
CREATE INDEX IX_IndexTest_a ON IndexTest(a)
CREATE INDEX IX_IndexTest_b ON IndexTest(b)
INSERT IndexTest
(a,b)
VALUES ('a','b'),('z','y'),('s','r')
Vous pouvez maintenant comparer l'activité du journal entre RECONSTRUIRE TOUT et reconstruire individuellement
CHECKPOINT
GO
ALTER INDEX ALL ON IndexTest REBUILD
SELECT *
FROM sys.fn_dblog(NULL,NULL)
WHERE Operation = 'LOP_COMMIT_XACT'
OR Operation = 'LOP_BEGIN_XACT'
GO
CHECKPOINT
GO
ALTER INDEX CIX_IndexTest_ID ON IndexTest REBUILD
ALTER INDEX IX_IndexTest_a ON IndexTest REBUILD
ALTER INDEX IX_IndexTest_b ON IndexTest REBUILD
SELECT *
FROM sys.fn_dblog(NULL,NULL)
WHERE Operation = 'LOP_COMMIT_XACT'
OR Operation = 'LOP_BEGIN_XACT'
GO
Notez que la première transaction ouverte (ID de transaction 0000: 000002fa pour moi) n'est pas validée jusqu'à la fin de la RECONSTRUCTION TOUT, mais pour les reconstructions index par index, elles sont validées successivement.