Komutun "TÜMÜ" formu tarafından gerçekleştirilen her dizin işleminden sonra, işlem günlüğü verilerinin bir sonraki dizin yeniden oluşturmadan önce temizleneceğini varsaydım. Aslında bu şekilde mi çalışıyor, yoksa dizin yeniden oluşturma işlemleri tek bir işlemin parçası gibi mi günlüğe kaydediliyor?
1) Günlük temizleme: SIMPLE kurtarma modeli, her işlemden sonra günlüğü temizlemez, ancak kontrol noktalarında. ( daha fazla bilgi için bağlantı )
2a) TÜMÜNÜ YENİDEN OLUŞTUR: evet, TÜMÜNÜ TEKRAR İNDİR tek bir işlem olarak çalışır. İçinde dizin yeniden oluşturma kendi işlemleri vardır, ancak genel işlem sonuna kadar tam olarak taahhüt edilmez. Bu nedenle evet, tek tek dizinleri yeniden oluşturarak (ve muhtemelen CHECKPOINT komutları vererek) günlük dosyasının büyümesini sınırlayabilirsiniz.
2b) Kanıt! Burada bir demo betiği var. (2016 devinde oluşturuldu) İlk olarak, tablo ve dizinlerle bir test db oluşturun:
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')
Artık REBUILD ALL ile bireysel olarak yeniden oluşturma arasındaki günlük etkinliğini karşılaştırabilirsiniz
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
İlk açık işlemin (İşlem Kimliği 0000: 000002fa benim için) TÜMÜNÜ REBUILD sonuna kadar nasıl işlemediğine dikkat edin, ancak endeks bazında yeniden yapılandırmalar için ard arda taahhüt edilmiştir.