Operacje minimalnie logowane
-
Upload
bartosz-ratajczyk -
Category
Education
-
view
162 -
download
0
Transcript of Operacje minimalnie logowane
Operacje minimalnie logowane
95. Spotkanie PLSSUG Warszawa, 07.04.2016.
Dziś w programieNa czym polega minimalne logowanie?Kiedy możemy z niego skorzystać?Ile można na tym stracić?A ile zyskać?Co to jest logowanie efektywne?Logowanie w TRUNCATE TABLE?
Bartosz Ratajczyk
Konsultant SQL Server
Programista aplikacji i baz danych
MCSE: Data Platform, MCT, MCTS SQL Server 2008
http://bartekr.net | [email protected]
Log transakcyjnyPrzechowuje informacje o każdej wykonanej
modyfikacji danychIlość zapisywanych informacji może zależeć od
modelu odzyskiwania danych (recovery model)
Logowanie minimalne (1)„At a minimum, enough information has to be logged when minimally logged operation is performed to allow SQL Server to rollback a transaction that has failed.”
Kalen Delaney, SQL Server Internals 2012
„Minimal logging involves logging only the information that is required to recover the transaction without supporting point-in-time recovery.”
BOL: https://msdn.microsoft.com/en-us/library/ms191244.aspx
Logowanie minimalne (2)Zawiera tylko informacje o alokacji stron danychPrzez co oszczędzamy na I/O zapisu do logu
ALE:Nie wszystkie informacje niezbędne do odtworzenia danych znajdują
się w logu transakcyjnymDopiero backup logu transakcyjnego zawiera zmienione strony
danych
Rodzaje logowaniaPełne – każda operacja ma swój rekord w logu
Efektywne – w logu znajduje się rekord dla zmienionej strony danych
Minimalne – logowany jest tylko fakt alokacji danych na stronę
DEMOPierwsze z dwóch, ale za to duże i długie
Co jest/może być minimalnie logowane?BULK INSERTbcpSELECT INTOINSERT INTO .. SELECTCREATE INDEXALTER INDEX REBUILD, DBCC DBREINDEX
REORGANIZE niestety nie.WRITEWRITETEXT, UPDATETEXT
DEPRECATED
Wymagania, wymaganianon-FULL recovery modelAND NOT replicatedAND ( (Heap AND TABLOCK) OR (B-tree AND empty AND TABLOCK) OR (B-tree AND empty AND TF-610) OR (B-tree AND nonempty AND TF-610 AND NEW key-range))
Źródło: Itzik Ben-Gan, http://sqlmag.com/t-sql/minimally-logged-inserts
Jeszcze jeden mykJeśli nie ma możliwości użycia TABLOCK można użyć wytrychu
EXEC sys.sp_tableoption@TableNamePattern = N’dbo.Tabela’,@OptionName = ’table lock on bulk load’,@OptionValue = ’ON’
ZaletySzybszy zapis danych do loguMniejsze I/O
WadyWrażliwe na błędy w plikach danychWymaga trybu odzyskiwania danych SIMPLE lub
przełączania między FULL i BULK LOGGEDCzyli odpadają mirroring i Availability GroupsAle zadziała przy Log Shipping
Może wymagać TF 610 – sysadminWszystkie strony danych muszą być zapisane na dysku
przed zakończeniem transakcji
TRUNCATEBłyskawiczne kasowanie danychJest logowane, czy nie jest?Dlaczego działa tak szybko?
DEMODrugie i ostatnie, za to krótkie
Do zapamiętaniaLogowanie minimalne to zapisywanie do logu
transakcyjnego tylko informacji o alokacji stron danychPrzyspiesza część operacji, ale jest wrażliwe na błędy
plików danychTRUNCATE jest operacją w pełni logowaną, po prostu
jest logowana efektywnie
Do poczytaniaItzik Ben-Gan „Minimally logged inserts:
http://sqlmag.com/t-sql/minimally-logged-insertsGail Shaw, Tony Davis „Managing the Log in BULK_LOGGED Recovery
Model” http://www.sqlservercentral.com/articles/Stairway+Series/94552/
Paul Randall „The Myth that DROP and TRUNCATE TABLE are Non-Logged” http://sqlperformance.com/2013/05/sql-performance/drop-truncate-log-myth
Remus Rusanu „How to read and interpret the SQL Server log” http://rusanu.com/2014/03/10/how-to-read-and-interpret-the-sql-server-log/