• 11.12.2018
  • Ing. Jan Zedníček - Data Engineer & Controlling
  • 0

SQL Server nabízí 3 druhy recovery modelu databází – simple recovery model, full a bulk-logged. Recovery model je způsob, jak SQL Server nakládá se transakcemi a transakčním logem a jak tyto data ukládá nebo neukládá. To ve finále ovlivňuje možnosti, které máme při obnovení dat ze zálohy. Recovery model se nastavuje nad určitou databází a každá databáze může mít pouze 1 recovery model. Napříč SQL instancí ale mohou mít různé databáze různé recovery modely.

Simple recovery model

Každá databáze má minimálně 2 soubory – master file (.mdf) ve kterém jsou ukládána data a logovací file (.ldf) kde leží transakční log. Pokud nad určitou databází provedeneme full nebo differential sql backup (zálohu), tak zálohujeme .mdf soubor. V tomto případě jsme schopni data obnovit pouze do okamžiku takové poslední zálohy. V případě tohoto typu recovery modelu můžeme udělat pouze tyto 2 typy záloh. Zálohu transakčního logu provést nemůžeme a vystavujeme se tedy tak riziku, že příjdeme o data od poslední FULL nebo DIFF zálohy. Siple recovery po každé transakci log vyčistí a neumožňuje nám tedy vytvořit restore point.

V některých situacích ale klidně raději volíme právě simple recovery model, protože nám to nevadí – naše data mohou být lehce reprodukovatelná, naše databáze je neprodukční nebo pro to existuje jiný důvod.

Jak funguje transakční log v Simple recovery modelu?

Pokud máme nad databází zvolen Simple recovery model, tak data z transakcí nejsou v .ldf souboru trvale ukládána. Neznamená to ale, že transakce v tomto souboru nejsou dočasně…jsou.  Při spuštění transakce se transakční log ukládá a čeká až transakce doběhne do konce. Tento způsob chování umožňuje data rollbacknout v případě kdy je transakce přerušena – abychom o data nepřišli.

Např děláme update a uprostřed transakce klikneme na cancel – data se během update operace nad tabulkou ukládala do transakčního logu, aby bylo možné následně na žádost uživatele o zrušení data obnovit do původního stavu.

Znamená to tedy, že se i v případě simple recovery modelu musíme starat o údržbu (shrink) .ldf souboru na rozumnou velikost, aby nám moc nebobtnal. Pokud provedeme nějakou náročnější operaci nad několika miliony záznamů, tak nám pravděpodobně ldf file pěkně nakynul a měli bychom jej shrinknout. Já to dělám tak, že shrink logovacích souborů mám nastaven v daily maintenance plánu.

Příklad: Mějme databázi Temp, která má 2 soubory .mdf a .ldf oba o velikosti 8MB. Recovery model nastaven jako SIMPLE

recovery model - priklad

 

Založím tabulku s BEGIN TRAN a do ní vložím 100000 záznamů

Celé vložení obalím transakcí BEGIN TRAN

CREATE TABLE [dbo].[Test_Transakcni_Log] (
[Cislo] INT NOT NULL
);

BEGIN TRAN

DECLARE @Cislo AS INT = 1
WHILE @Cislo < 100000
BEGIN
INSERT INTO [dbo].[Test_Transakcni_Log] ([Cislo])
VALUES (@Cislo)

SET @Cislo = @Cislo + 1
END;

Po založení tabulky s BEGIN TRAN máme čekající transakci

Transakce provede insert záznamů do tabulky [dbo].[Test_Transakcni_Log] a můžeme se podívat, jak nám to ovlivnilo transakční log. Pomocí Database console command DBCC SQLPERF(logspace) se můžeme podívat, že velikost logovacího souboru vzrostla na 72 MB z čehož je 43 % využito. 72 MB proto, že increment je nastaven na 64MB viz obrázek výše. Co se stane když nad transakcí spustíme COMMIT/ROLLBACK?

DBCC-SQLPERF(logspace)

Potvrzení transakce příkazem COMMIT

Po COMMIT transakce znovu pouštím DBCC SQLPERF(logspace) a je vidět, že se transakční log téměř vyčistil. V případě, že bychom měli recovery model nastaven jako FULL, tak by data v logu zůstala až do doby, kdy je provedena záloha transakčního logu nebo jsme data z logu nevymazali.

SQLPERF po commitu transakce

5/5 - (2 votes)

Ing. Jan Zedníček - Data Engineer & Controlling

Jmenuji se Honza Zedníček a působím jako freelancer. Pracoval jsem dříve také jako BI developer, finanční controller a analytik. Vše pro společnosti z oblasti IT, bankovnictví, consultingu a výroby. Po práci si rád zahraju tenis, volejbal, šachy, zajdu do posilovny a občas neúspěšně odpálím pár balónků v golfu 🏌️

Již cca 10 let zapisuji na tento web různé návody určené zejména odborné veřejnosti, studentům a zájemcům o informace z oblastí Business intelligence, korporátních financí a reportingu.

🔥 Přihlašte se do naší Excel facebook skupiny (2.4k+ členů), kde si pomáháme Excel CZ/SK diskuse »

Leave a Reply

Your email address will not be published. Required fields are marked *