2. Dziś w programie
Na 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?
3. Bartosz Ratajczyk
Konsultant SQL Server
Programista aplikacji i baz danych
MCSE: Data Platform, MCT, MCTS SQL Server 2008
http://bartekr.net | b.ratajczyk@gmail.com
4. Log transakcyjny
Przechowuje informacje o każdej wykonanej
modyfikacji danych
Ilość zapisywanych informacji może zależeć od
modelu odzyskiwania danych (recovery model)
5. 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
6. Logowanie minimalne (2)
Zawiera tylko informacje o alokacji stron danych
Przez co oszczędzamy na I/O zapisu do logu
ALE:
Nie wszystkie informacje niezbędne do odtworzenia danych znajdują
się w logu transakcyjnym
Dopiero backup logu transakcyjnego zawiera zmienione strony
danych
7. Rodzaje logowania
Peł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ę
9. Co jest/może być minimalnie logowane?
BULK INSERT
bcp
SELECT INTO
INSERT INTO .. SELECT
CREATE INDEX
ALTER INDEX REBUILD, DBCC DBREINDEX
REORGANIZE niestety nie
.WRITE
WRITETEXT, UPDATETEXT
DEPRECATED
10. Wymagania, wymagania
non-FULL recovery model
AND NOT replicated
AND (
(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
11. Jeszcze jeden myk
Jeś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’
13. Wady
Wrażliwe na błędy w plikach danych
Wymaga trybu odzyskiwania danych SIMPLE lub
przełączania między FULL i BULK LOGGED
Czyli odpadają mirroring i Availability Groups
Ale zadziała przy Log Shipping
Może wymagać TF 610 – sysadmin
Wszystkie strony danych muszą być zapisane na dysku
przed zakończeniem transakcji
16. Do zapamiętania
Logowanie minimalne to zapisywanie do logu
transakcyjnego tylko informacji o alokacji stron danych
Przyspiesza część operacji, ale jest wrażliwe na błędy
plików danych
TRUNCATE jest operacją w pełni logowaną, po prostu
jest logowana efektywnie
17. Do poczytania
Itzik Ben-Gan „Minimally logged inserts: http://sqlmag.com/t-
sql/minimally-logged-inserts
Gail 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/