Po co mi Temporal Tables?

19
Po co mi Temporal Tables? SQLDay Lite 2015, Warszawa

Transcript of Po co mi Temporal Tables?

Page 1: Po co mi Temporal Tables?

Po co mi Temporal Tables?SQLDay Lite 2015, Warszawa

Page 2: Po co mi Temporal Tables?

Sponsorzy strategiczni

Sponsorzy srebrni

Page 3: Po co mi Temporal Tables?

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ę?

Page 4: Po co mi Temporal Tables?

O mnieBartosz Ratajczyk

Programista baz danych(i aplikacji)

czasem też administrator

MCTS SQL Server 2008, MCSA SQL Server 2012, MCT

http://bartekr.net | [email protected]

Page 5: Po co mi Temporal Tables?

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

Page 6: Po co mi Temporal Tables?

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!)

Page 7: Po co mi Temporal Tables?

Jak sobie radzimy teraz?

• Własna logika w aplikacji, procedury składowane, klauzula OUTPUT

• Wyzwalacze

• Change Tracking

• Change Data Capture

Page 8: Po co mi Temporal Tables?

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)

Page 9: Po co mi Temporal Tables?

DEMO

Page 10: Po co mi Temporal Tables?

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

Page 11: Po co mi Temporal Tables?

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

Page 12: Po co mi Temporal Tables?

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

Page 13: Po co mi Temporal Tables?

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)

Page 14: Po co mi Temporal Tables?

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)

Sce

nar

iusz

1:

row

sto

re/r

ow

sto

reSc

en

ariu

sz 2

:ro

wst

ore

/co

lum

nst

ore

Sce

nar

iusz

3:

colu

mn

sto

re/c

olu

mn

sto

re

Czasy zapytań (w milisekundach)

Page 15: Po co mi Temporal Tables?

O czym jeszcze warto wspomnieć?

Możliwość odmiennego partycjonowania tabeli głównej i historycznej

Wsparcie dla In-Memory OLTP od wersji 3.0

Page 16: Po co mi Temporal Tables?

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 (StretchDatabase)

Nie można używać wyzwalaczy INSTEAD OF

Nie wiadomo w których edycjach będzie dostępne

Page 17: Po co mi Temporal Tables?

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

Page 18: Po co mi Temporal Tables?

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

Page 19: Po co mi Temporal Tables?

Sponsorzy strategiczni

Sponsorzy srebrni