Aynı sorunu yaşıyorum ve çözdüğüme inanıyorum ama onaylamak için tam olarak test edemedim.
Sorunların boyutunuzla değil, günlük dosyanızdaki VLF'lerin sayısıyla ilgili olduğuna inanıyorum. Büyük bir günlük dosyanız varsa, muhtemelen otomatik büyüme olayları yoluyla organik olarak büyüdüğü ve kasıtlı olarak planlanmış bir büyüme olmadığı muhtemeldir. Bu durumda, günlük dosyalarında binlerce VLF olabilir.
Burada ben den kullanılan kaç VLFs görmek için bir sorgu burada :
Create Table #stage(
FileID int
, FileSize bigint
, StartOffset bigint
, FSeqNo bigint
, [Status] bigint
, Parity bigint
, CreateLSN numeric(38));
Create Table #results(
Database_Name sysname
, VLF_count int
);
Exec sp_msforeachdb N'Use ?;
Insert Into #stage
Exec sp_executeSQL N''DBCC LogInfo(?)'';
Insert Into #results
Select DB_Name(), Count(*)
From #stage;
Truncate Table #stage;'
Select *
From #results
Order By VLF_count Desc;
Drop Table #stage;
Drop Table #results;
VLF'lerin ne olduğuna dair daha fazla açıklama için bu bağlantıya bakın .
Sorun çok sayıda VLF ile kendi durumunu değerlendirmek ve daha sonra veritabanını kurtarma dışında getirmek için SQL Server uzun bir süre alır inanıyorum. Günlük dosyanızı olabildiğince küçük boyuta, genellikle günlük dosyasında oluşturulan ilk VLF'nin boyutuna küçültürseniz, derhal yeniden büyütebilir ve böylece doğru sayıda VLF (daha az bir şey) oluşturmasını sağlayabilirsiniz. 16).
Bu tamamlandığında, veritabanınızın kurtarma işleminden çok daha hızlı geldiğini görebileceğinize inanıyorum.
Kendi VLF sorunlarımızı çözdükten sonra üretim örneklerinin başarısızlığını test etme şansım olmadı, bu yüzden sorunun temel nedeni olduğunu onaylayabiliyorsanız çok merak ediyorum. Deneysel olarak, evreleme ortamımızda restore edilmenin ortaya çıkma zamanının, bu yüzden umarım bu yüzden önemli ölçüde azaldığını gördüm.