SlideShare a Scribd company logo
1 of 19
Po co mi Temporal Tables?
SQLDay Lite 2015, Warszawa
Sponsorzy strategiczni
Sponsorzy srebrni
O czym będzie?
O przechowywaniu danych, które zmieniają się w czasie
Jak to obsługujemy teraz
Jak będziemy to mogli zrobić za pomocą Temporal Tables
Czy to ma sensowną wydajność?
Przydaje się?
O mnie
Bartosz Ratajczyk
Programista baz danych
(i aplikacji)
czasem też administrator
MCTS SQL Server 2008, MCSA SQL Server 2012, MCT
http://bartekr.net | b.ratajczyk@gmail.com
Dane zmienne w czasie
SYSTEM VERSIONING – zarejestrowano zmianę
BUSINESS VERSIONING – ważne biznesowo od - do
(Dane) ValidFrom ValidTo
(…) 2015-10-01 10:21:15 2015-10-10 18:11:24
(Dane) DateFrom DateTo
(…) 2015-10-01 2015-10-10
Dlaczego je przechowujemy?
Bo wymagają tego przepisy
Bo chcemy wiedzieć kiedy dane się zmieniły (audyt)
Bo chcemy znać poprzednie wersje danych (SCD)
Bo chcemy móc szybko przywrócić poprzednią wersję danych (oops!)
Bo nasze dane mają okres obowiązywania w czasie (cennik)
BO TAK! (BO TAK!)
Jak sobie radzimy teraz?
• Własna logika w aplikacji, procedury składowane, klauzula OUTPUT
• Wyzwalacze
• Change Tracking
• Change Data Capture
Nowa możliwość
Temporal Tables, czyli tabele z definicją OKRESU
Mechanizm samodzielny, bez zależności od innych komponentów
Automatycznie tworzy poprzednie wersje danych i dodaje nowe
Obsługuje tylko wersjonowanie systemowe
(co oczywiście nie wyklucza wersjonowania biznesowego we własnym
zakresie)
DEMO
Testujemy wydajność
Zbiór wejściowy: 10 mln rekordów
Cztery zbiory pomocnicze po 1 mln rekordów losowane ze zbioru
wejściowego
Cztery kolejne operacje: UPDATE, DELETE, UPDATE, DELETE na zbiorze
wejściowym z wykorzystaniem zbiorów pomocniczych
Cztery zapytania sumujące dane w zbiorze wejściowym:
Sumowanie danych z wyszukiwaniem po kluczu głównym
Sumowanie danych z klauzulą AS OF z wyszukiwaniem po kluczu głównym
Sumowanie danych z wyszukiwaniem po kolumnie spoza PK
Sumowanie danych z klauzulą AS OF z wyszukiwaniem po kolumnie spoza PK
Trzy przypadki testowe – indeksy rowstore i columnstore
Czy to zajmie dużo miejsca?
3479
2560
355
454
90
98
0 500 1000 1500 2000 2500 3000 3500 4000 4500
Scenariusz 1: rowstore/rowstore
Scenariusz 2: rowstore/columnstore
Scenariusz 3: columnstore/columnstore
Zajętość dysku (MB)
Tabela główna Tabela historyczna
A szybkie to jest? (1)
1717
1762
498
0 200 400 600 800 1000 1200 1400 1600 1800 2000
Scenariusz 1: rowstore/rowstore
Scenariusz 2: rowstore/columnstore
Scenariusz 3: columnstore/columnstore
Czasy trwania operacjiUPDATE/DELETE (w sekundach)
Całkowity czas trwania
A szybkie to jest? (2)
220121
95120
841
0 50000 100000 150000 200000 250000
Scenariusz 1: rowstore/rowstore
Scenariusz 2: rowstore/columnstore
Scenariusz 3: columnstore/columnstore
Czasy zapytań (w milisekundach)
A szybkie to jest? (3)
907
231
102738
116246
664
284
51868
42304
454
263
63
61
0 20000 40000 60000 80000 100000 120000 140000
SELECT 1 (SUM, WHERE PK)
SELECT 2 (SUM, WHERE PK, AS OF)
SELECT 3 (SUM, WHERE)
SELECT 4 (SUM, WHERE, AS OF)
SELECT 1 (SUM, WHERE PK)
SELECT 2 (SUM, WHERE PK, AS OF)
SELECT 3 (SUM, WHERE)
SELECT 4 (SUM, WHERE, AS OF)
SELECT 1 (SUM, WHERE PK)
SELECT 2 (SUM, WHERE PK, AS OF)
SELECT 3 (SUM, WHERE)
SELECT 4 (SUM, WHERE, AS OF)
Scenariusz1:
rowstore/rowstore
Scenariusz2:
rowstore/columnstore
Scenariusz3:
columnstore/columnstore
Czasy zapytań (w milisekundach)
O czym jeszcze warto wspomnieć?
Możliwość odmiennego partycjonowania tabeli głównej i historycznej
Wsparcie dla In-Memory OLTP od wersji 3.0
Obecne ograniczenia
Nie można zrobić TRUNCATE TABLE
Nie można przełączyć partycji między tabelą główną a historyczną
Do historii trafiają wszystkie zmiany
(UPDATE T1 SET k = 1 WHERE k = 1)
Nie możemy ręcznie modyfikować danych historycznych
Nie możemy ustawić śledzenia zmian tylko dla części kolumn
Nie można przenieść danych historycznych do chmury (Stretch
Database)
Nie można używać wyzwalaczy INSTEAD OF
Nie wiadomo w których edycjach będzie dostępne
No dobrze, ale po co mi one?
Kolejne narzędzie do monitorowania zmian rekordów
Zgodne ze standardem SQL:2011
Szybsze od samodzielnych implementacji na wyzwalaczach
Gdzie poczytać więcej na ten temat?
Alex Volok – blog: http://www.alexvolok.com
Itzik Ben-Gan – artykuły na SQL Server Pro: http://sqlmag.com/sql-
server/first-look-system-versioned-temporal-tables-part-1-creating-
tables-and-modifying-data
Channel9 – nagranie o Temporal Tables + dyskusja pod nim
https://channel9.msdn.com/Shows/Data-Exposed/Temporal-in-SQL-
Server-2016
Dokumentacja – Books OnLine
Sponsorzy strategiczni
Sponsorzy srebrni

More Related Content

More from Bartosz Ratajczyk

SQL Server + docker - pierwsze kroki
SQL Server + docker - pierwsze krokiSQL Server + docker - pierwsze kroki
SQL Server + docker - pierwsze krokiBartosz Ratajczyk
 
OLE DB - kiedy FastLoad nie jest takie fast
OLE DB - kiedy FastLoad nie jest takie fastOLE DB - kiedy FastLoad nie jest takie fast
OLE DB - kiedy FastLoad nie jest takie fastBartosz Ratajczyk
 
Jak działa rekurencyjne CTE?
Jak działa rekurencyjne CTE?Jak działa rekurencyjne CTE?
Jak działa rekurencyjne CTE?Bartosz Ratajczyk
 
SqlSaturday Denmark 2017 - Automate your SSIS deployment process
SqlSaturday Denmark 2017 - Automate your SSIS deployment processSqlSaturday Denmark 2017 - Automate your SSIS deployment process
SqlSaturday Denmark 2017 - Automate your SSIS deployment processBartosz Ratajczyk
 
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbaćBartosz Ratajczyk
 
Zautomatyzuj swój proces wdrażania projektów SSIS
Zautomatyzuj swój proces wdrażania projektów SSISZautomatyzuj swój proces wdrażania projektów SSIS
Zautomatyzuj swój proces wdrażania projektów SSISBartosz Ratajczyk
 
How minimalloggingcanhelpme bartoszratajczyk_sql_sat534
How minimalloggingcanhelpme bartoszratajczyk_sql_sat534How minimalloggingcanhelpme bartoszratajczyk_sql_sat534
How minimalloggingcanhelpme bartoszratajczyk_sql_sat534Bartosz Ratajczyk
 
Szkolenia i certyfikacjesqlserver2016_plssug99
Szkolenia i certyfikacjesqlserver2016_plssug99Szkolenia i certyfikacjesqlserver2016_plssug99
Szkolenia i certyfikacjesqlserver2016_plssug99Bartosz Ratajczyk
 
Jak szybko przetwarzasz hurtowe ilości XML?
Jak szybko przetwarzasz hurtowe ilości XML?Jak szybko przetwarzasz hurtowe ilości XML?
Jak szybko przetwarzasz hurtowe ilości XML?Bartosz Ratajczyk
 
Operacje minimalnie logowane
Operacje minimalnie logowaneOperacje minimalnie logowane
Operacje minimalnie logowaneBartosz Ratajczyk
 

More from Bartosz Ratajczyk (15)

SQL Server + docker - pierwsze kroki
SQL Server + docker - pierwsze krokiSQL Server + docker - pierwsze kroki
SQL Server + docker - pierwsze kroki
 
OLE DB - kiedy FastLoad nie jest takie fast
OLE DB - kiedy FastLoad nie jest takie fastOLE DB - kiedy FastLoad nie jest takie fast
OLE DB - kiedy FastLoad nie jest takie fast
 
Jak działa rekurencyjne CTE?
Jak działa rekurencyjne CTE?Jak działa rekurencyjne CTE?
Jak działa rekurencyjne CTE?
 
SqlSaturday Denmark 2017 - Automate your SSIS deployment process
SqlSaturday Denmark 2017 - Automate your SSIS deployment processSqlSaturday Denmark 2017 - Automate your SSIS deployment process
SqlSaturday Denmark 2017 - Automate your SSIS deployment process
 
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
 
Zautomatyzuj swój proces wdrażania projektów SSIS
Zautomatyzuj swój proces wdrażania projektów SSISZautomatyzuj swój proces wdrażania projektów SSIS
Zautomatyzuj swój proces wdrażania projektów SSIS
 
How minimalloggingcanhelpme bartoszratajczyk_sql_sat534
How minimalloggingcanhelpme bartoszratajczyk_sql_sat534How minimalloggingcanhelpme bartoszratajczyk_sql_sat534
How minimalloggingcanhelpme bartoszratajczyk_sql_sat534
 
Szkolenia i certyfikacjesqlserver2016_plssug99
Szkolenia i certyfikacjesqlserver2016_plssug99Szkolenia i certyfikacjesqlserver2016_plssug99
Szkolenia i certyfikacjesqlserver2016_plssug99
 
Podstawy ETL z SSIS
Podstawy ETL z SSISPodstawy ETL z SSIS
Podstawy ETL z SSIS
 
XML w SQL Server w praktyce
XML w SQL Server w praktyceXML w SQL Server w praktyce
XML w SQL Server w praktyce
 
Jak szybko przetwarzasz hurtowe ilości XML?
Jak szybko przetwarzasz hurtowe ilości XML?Jak szybko przetwarzasz hurtowe ilości XML?
Jak szybko przetwarzasz hurtowe ilości XML?
 
Operacje minimalnie logowane
Operacje minimalnie logowaneOperacje minimalnie logowane
Operacje minimalnie logowane
 
Co to te CTE?
Co to te CTE?Co to te CTE?
Co to te CTE?
 
O co chodzi z FILESTREAM?
O co chodzi z FILESTREAM?O co chodzi z FILESTREAM?
O co chodzi z FILESTREAM?
 
Alerty WMI
Alerty WMIAlerty WMI
Alerty WMI
 

Po co mi Temporal Tables?

  • 1. Po co mi Temporal Tables? SQLDay Lite 2015, Warszawa
  • 3. O czym będzie? O przechowywaniu danych, które zmieniają się w czasie Jak to obsługujemy teraz Jak będziemy to mogli zrobić za pomocą Temporal Tables Czy to ma sensowną wydajność? Przydaje się?
  • 4. O mnie Bartosz Ratajczyk Programista baz danych (i aplikacji) czasem też administrator MCTS SQL Server 2008, MCSA SQL Server 2012, MCT http://bartekr.net | b.ratajczyk@gmail.com
  • 5. Dane zmienne w czasie SYSTEM VERSIONING – zarejestrowano zmianę BUSINESS VERSIONING – ważne biznesowo od - do (Dane) ValidFrom ValidTo (…) 2015-10-01 10:21:15 2015-10-10 18:11:24 (Dane) DateFrom DateTo (…) 2015-10-01 2015-10-10
  • 6. Dlaczego je przechowujemy? Bo wymagają tego przepisy Bo chcemy wiedzieć kiedy dane się zmieniły (audyt) Bo chcemy znać poprzednie wersje danych (SCD) Bo chcemy móc szybko przywrócić poprzednią wersję danych (oops!) Bo nasze dane mają okres obowiązywania w czasie (cennik) BO TAK! (BO TAK!)
  • 7. Jak sobie radzimy teraz? • Własna logika w aplikacji, procedury składowane, klauzula OUTPUT • Wyzwalacze • Change Tracking • Change Data Capture
  • 8. Nowa możliwość Temporal Tables, czyli tabele z definicją OKRESU Mechanizm samodzielny, bez zależności od innych komponentów Automatycznie tworzy poprzednie wersje danych i dodaje nowe Obsługuje tylko wersjonowanie systemowe (co oczywiście nie wyklucza wersjonowania biznesowego we własnym zakresie)
  • 10. Testujemy wydajność Zbiór wejściowy: 10 mln rekordów Cztery zbiory pomocnicze po 1 mln rekordów losowane ze zbioru wejściowego Cztery kolejne operacje: UPDATE, DELETE, UPDATE, DELETE na zbiorze wejściowym z wykorzystaniem zbiorów pomocniczych Cztery zapytania sumujące dane w zbiorze wejściowym: Sumowanie danych z wyszukiwaniem po kluczu głównym Sumowanie danych z klauzulą AS OF z wyszukiwaniem po kluczu głównym Sumowanie danych z wyszukiwaniem po kolumnie spoza PK Sumowanie danych z klauzulą AS OF z wyszukiwaniem po kolumnie spoza PK Trzy przypadki testowe – indeksy rowstore i columnstore
  • 11. Czy to zajmie dużo miejsca? 3479 2560 355 454 90 98 0 500 1000 1500 2000 2500 3000 3500 4000 4500 Scenariusz 1: rowstore/rowstore Scenariusz 2: rowstore/columnstore Scenariusz 3: columnstore/columnstore Zajętość dysku (MB) Tabela główna Tabela historyczna
  • 12. A szybkie to jest? (1) 1717 1762 498 0 200 400 600 800 1000 1200 1400 1600 1800 2000 Scenariusz 1: rowstore/rowstore Scenariusz 2: rowstore/columnstore Scenariusz 3: columnstore/columnstore Czasy trwania operacjiUPDATE/DELETE (w sekundach) Całkowity czas trwania
  • 13. A szybkie to jest? (2) 220121 95120 841 0 50000 100000 150000 200000 250000 Scenariusz 1: rowstore/rowstore Scenariusz 2: rowstore/columnstore Scenariusz 3: columnstore/columnstore Czasy zapytań (w milisekundach)
  • 14. A szybkie to jest? (3) 907 231 102738 116246 664 284 51868 42304 454 263 63 61 0 20000 40000 60000 80000 100000 120000 140000 SELECT 1 (SUM, WHERE PK) SELECT 2 (SUM, WHERE PK, AS OF) SELECT 3 (SUM, WHERE) SELECT 4 (SUM, WHERE, AS OF) SELECT 1 (SUM, WHERE PK) SELECT 2 (SUM, WHERE PK, AS OF) SELECT 3 (SUM, WHERE) SELECT 4 (SUM, WHERE, AS OF) SELECT 1 (SUM, WHERE PK) SELECT 2 (SUM, WHERE PK, AS OF) SELECT 3 (SUM, WHERE) SELECT 4 (SUM, WHERE, AS OF) Scenariusz1: rowstore/rowstore Scenariusz2: rowstore/columnstore Scenariusz3: columnstore/columnstore Czasy zapytań (w milisekundach)
  • 15. O czym jeszcze warto wspomnieć? Możliwość odmiennego partycjonowania tabeli głównej i historycznej Wsparcie dla In-Memory OLTP od wersji 3.0
  • 16. Obecne ograniczenia Nie można zrobić TRUNCATE TABLE Nie można przełączyć partycji między tabelą główną a historyczną Do historii trafiają wszystkie zmiany (UPDATE T1 SET k = 1 WHERE k = 1) Nie możemy ręcznie modyfikować danych historycznych Nie możemy ustawić śledzenia zmian tylko dla części kolumn Nie można przenieść danych historycznych do chmury (Stretch Database) Nie można używać wyzwalaczy INSTEAD OF Nie wiadomo w których edycjach będzie dostępne
  • 17. No dobrze, ale po co mi one? Kolejne narzędzie do monitorowania zmian rekordów Zgodne ze standardem SQL:2011 Szybsze od samodzielnych implementacji na wyzwalaczach
  • 18. Gdzie poczytać więcej na ten temat? Alex Volok – blog: http://www.alexvolok.com Itzik Ben-Gan – artykuły na SQL Server Pro: http://sqlmag.com/sql- server/first-look-system-versioned-temporal-tables-part-1-creating- tables-and-modifying-data Channel9 – nagranie o Temporal Tables + dyskusja pod nim https://channel9.msdn.com/Shows/Data-Exposed/Temporal-in-SQL- Server-2016 Dokumentacja – Books OnLine