Sledoval jsem růst souborů pomocí sběrače dat na serveru SQL Server 2008 R2 dva týdny. Databáze neustále roste kolem 35 (MB)/den. DB dosud nedosáhl počáteční velikosti 2 GB.
Automatický růst souborů DB je nastaven na 5 MB a chtěl bych vyzkoušet jiný přístup, takže hledám návrhy nebo komentáře.
Úkol ladění probíhá každý týden v neděli v 13:30. Úkol bude:
Chtěl bych přidat další dva kroky k týdennímu plánu ladění:
Umístěním růstové zátěže v offline hodinách doufám, že dosáhnu výkonu snížením počtu událostí auto-růstu během velkého zatížení.
Mám dvě otázky týkající se automaticky rostoucích souborů.
ALTER DATABASE|MODIFY FILE
Pro růst souboru, jak zjistím, zda SpaceUsedInFile >= ([email protected])
?Měli byste se snažit o co nejmenší automatický růst. Sedmkrát denně je nesnesitelné, a to i při okamžité inicializaci souboru.
Nedělejte Shrink Database. Vůbec. Možná smršťovací, ale až po mimořádné události. Zmenšit to jen proto, aby znovu rostlo, je cvičení v marnosti a mělo by se vlastně nazývat auto-fragment.
Pokud je model obnovy jednoduchý, na zemi neexistuje způsob, jak byste měli zvýšit svůj soubor protokolu o 250 GB. Využité místo v souboru se v průběhu času automaticky vyčistí, pokud jste transakci nezačali před měsícem a nemáte v úmyslu ji nikdy zavázat nebo vrátit zpět.
Moje rada by tedy byla:
Automaticky pěstujte datový soubor ručně během tichého období na velikost, která pojme několik měsíců růstu. Na co to mezitím ukládáte?
Nastavte přírůstek automatického růstu pro datový soubor na něco relativně malého (aby nepřerušoval uživatele, když k tomu dojde) a upozorněte na tuto událost (můžete ji zachytit ve výchozí stopě, například nebo prostřednictvím rozšířeného Události). To vám může říct, že zasáhnete nejvyšší bod, který jste odhadli, a je čas opět ručně růst. V tomto okamžiku budete chtít tuto příručku ponechat pro případ, že chcete přidat nový soubor/skupinu souborů na jinou jednotku, aby vyhovovala místu, protože nakonec vyplníte aktuální jednotku.
Auto-log soubor protokolu, řekněme, dvakrát největší, jaký kdy byl. Nemělo by se dále automaticky růst, ledaže by nějaké neobvyklé transakce zadržovaly věci. Také byste měli sledovat tuto událost, abyste o nich věděli.
Automatický růst je něco, čemu byste se měli pokud možno vyhnout. Problém spočívá v tom, že nemáte kontrolu nad tím, kdy se může růst uskutečnit, a váš systém přitom může zasáhnout vážný zásah.
Nastavte velikost vašeho souboru na něco rozumného za měsíc nebo tak a sledujte svou míru růstu odtamtud, zjistěte, kolik místa odhadujete pro X množství času a nastavte velikost na tuto + meze chyby.
Nastavil jsem jednoduchou monitorovací úlohu, která mě upozorní, když velikost souboru dosáhne předdefinovaného maxima před automatickým růstem. Můžete použít něco takového:
SELECT instance_name,
[Data File(s) Size (KB)],
[LOG File(s) Size (KB)],
[Log File(s) Used Size (KB)],
[Percent Log Used]
into ##Logsize
FROM
(
SELECT *
FROM sys.dm_os_performance_counters
WHERE counter_name IN
(
'Data File(s) Size (KB)',
'Log File(s) Size (KB)',
'Log File(s) Used Size (KB)',
'Percent Log Used'
)
AND instance_name = 'database your interested in'
) AS Src
PIVOT
(
MAX(cntr_value)
FOR counter_name IN
(
[Data File(s) Size (KB)],
[LOG File(s) Size (KB)],
[Log File(s) Used Size (KB)],
[Percent Log Used]
)
) AS pvt
go
declare @logsize int
Select @logsize = [Percent Log Used] from ##Logsize
If @logsize > the maximum percent you want the log to fill too i.e 90
BEGIN
--Do your thing here
END
Drop table ##Logsize
To by samozřejmě mohlo být naplánováno jako práce.