Research SQL Server 2016CTP2 – 6/13

Rozwój sprzętu komputerowego i coraz większe zapotrzebowanie na wydajne systemy bazodanowe spowodowały bardzo duży rozwój technologii In-Memory. Microsoft w SQL Server już w wersji 2008R2 zaimplementował nowości związane z In-Memory, był to PowerPivot, w kolejnych wersjach pojawiały się następne rewolucyjne rozwiązania tak jak SQL Server Analysis Services pracujący w trybie tabelarycznym (ang. Tabular), który ma zaimplementowane rozwiązanie xVelocity (dawniej VertiPaq), a także indeks kolumnowy będący prawdziwą rewolucją w hurtowniach danych i dający duży wzrost wydajności. Indeks kolumnowy a dokładnie jego nowe oblicze było już omówione w 3 części cyklu Research SQL Server 2016CTP2.

In-Memory dla OLTP było w architekturze SQL Server bardzo dużym przełomem, kompletnie przeprojektowana architektura, kompatybilna z dotychczasowym rozwiązaniem dyskowym, co daje możliwość budowania rozwiązań, gdzie część danych jest przechowywanych w strukturach dyskowych, a najbardziej używane tabele, są przechowywane w nowy sposób w pamięci. Rozwiązanie to korzysta z kompletnie nowych jak na SQL Server indeksów, a samo przechowywanie danych jest w postaci wiersza, struktury te są również odpowiedzialne w sposób naturalny za wersjonowanie, przez co współbieżność nie jest realizowana poprzez mechanizm blokad.

Wiele aspektów tej nowej architektury spowodowało, że wydajność tego rozwiązania w stosunku do dotychczasowego przetwarzania rosło nawet do kilkudziesięciu razy. Niestety jak to bywa w przypadku nowych rozwiązań przechodzą problemy wieku dziecięcego. I tak jest z In-Memory. Rewolucyjna architektura, doskonała wydajność, ale…

Tutaj w wersji SQL Server 2016 i to w CTP2 widzimy już dużo zmian na lepsze.

Pierwsza rzecz, o której już pisałem w poprzednim odcinku naszego cyklu, to możliwość włączenia na bazie danych Transparent Data Encryption (TDE). Pierwsza wersja rozwiązania In-Memory miało ograniczenie do wielkości danych znajdujących się w takiej tabeli In-Memory, wynosiło ono 256GB, obecnie In-Memory wspiera 2TB tabelę, niestety tutaj muszę zaufać producentowi, nie mogę tego sam przetestować, gdyż w moim sprzęcie na ta chwile nie dysponuje taką pamięcią J

Kolejną rzeczą odstraszającą od In-Memory, był brak polecenia ALTER i tutaj korzystna zmiana, możemy obecnie robić ALTER PROC dla procedur kompilowanych natywnie In-Memory, a także można użyć polecenia sp_recompile w celu ponownej kompilacji takiej procedury. Co jest istotne z punktu widzenia optymalizacji takiej procedury pod kątem zmian w statystykach danych.

Jak jest ALTER PROC, to także teraz jest dostępne ALTER TABLE, które pozwala zarówno zmienić schemat tabeli, a także indeksy na tabeli. Czyli pełne wsparcie do ADD/ALTER/DROP COLUMN/CONSTRAINT. Dodanie lub usunięcie indeksu, a co także jest ważne zmiana wartości BUCKET_COUNT w indeksach haszujących. Ta zmiana również bardzo cieszy, bo było to ograniczenie, iż przy utworzeniu obiektu musieliśmy stosownie dobrać wielkość tych BUCKET. Zła dobrana wielkość tej wartości powoduje bardzo nieefektywną pracę z tabelami In-Memory, ale może o tym innym razem na blogu. Nie jest za to wspierana procedura zmieniająca nazwę obiektu. Ważną rzeczą, z którą należy się liczyć przy korzystaniu z ALTER TABLE jest to, iż potrzeba podwójnej wielkości pamięci dla przebudowy takiej struktury. Operacja ALTER PROC działa online, natomiast operacja ALTER TABLE przy obecnej wersji SQL Server 2016CTP2 jest offline.

Dotychczasowe działanie rozwiązania In-Memory opierało się na sekwencyjnym przetwarzaniu, czyli zarówno działania po stronie wykonywania planów, jak i operacji na dysku nie były zrównoleglone, co teraz też się zmieniło.

Wśród operacji, które muszą się odbywać jest operacja Garbage Collected, wykonująca MERGE plików danych (rysunek – źródło MSDN)

Obecnie pliki nieużyte mogą być kolejny raz użyte, czyli nie muszą powstawać puste pliki. Ma to też znaczenie na wydajność, szczególnie przy dużej ilości procesorów. MERGE jest wielowątkowy, CHECKPOINT OFFLINE jest również wielowątkowy tzn. w rozbiciu na kontenery, a także RECOVERY odbywa się już od wersji SQL Server 2016CTP2 w wielu wątkach.

Jak zaczynamy zabawę z In-Memory to ucieszy nas pierwszy fakt, obecnie jest już wsparcie do wszystkich COLLATION.

Kolejna nowość to funkcję użytkownika natywnie kompilowane!

Jak popatrzymy do katalogu XTP, to od strony kodu i oznaczenia powstaje coś podobnego do procedury (czego można było się spodziewać J)

 

 

Mając do dyspozycji procedury, funkcję nasuwa się pytanie a co z triggerami? Dokładnie i trigger się ma pojawić, oczywiście tylko AFTER. Skąd moje stwierdzenie oczywiście? Bo jak się zastanowimy nad architekturą rozwiązania In-Memory, gdzie procedura i tabela jest w pamięci, to korzystniej jest uruchomić coś po czasie, niż zamiast.. Myślę, że biznesowo dla zastosowań OLTP jest też wystarczające. Funkcjonalność ta jest niedostępna w wersji SQL Server 2016CTP2, ale w zapowiedziach na konferencjach Microsoft w maju była wielokrotnie przedstawiana.

W wersji SQL Server 2014 nie było możliwości zakładania ograniczeń (CONSTRAINT), teraz miła niespodzianka, można.

Należy pamiętać, że procedury i funkcję natywnie kompilowane mają obowiązkowo klauzulę SCHEMABINDING, więc powyższe polecenie bez usunięcia tych obiektów nie będzie możliwe..

Niestety FOREIGN KEY na razie w wersji SQL Server 2016CTP2 nie jest wspierany, ale zapowiedzi od dawna były wprowadzenie jego, wierzę, że wersja finalna rozwiąże i ten problem.

W obecnej wersji możemy dodać nieklastrowany indeks będący zwykłym B-Drzewem (klasyczne indeksy w rozwiązaniach dyskowych) dla tabel In-Memory

Jest też możliwość dodania indeksu kolumnowego, ale to temat na kolejny odcinek Research SQL Server 2016CTP2, pozostawię to na razie w tajemnicy, już niebawem na blogu!

Pojawiło się także wsparcie dla MARS (Multi Active Result Sets), a także możliwość zagnieżdżania procedur natywnie kompilowanych.

Warto też wspomnieć o większej ilości poleceń i operacji na zbiorach wspieranych wewnątrz procedur natywnie kompilowanych, miedzy innymi OUTER JOIN, OR, NOT, UNION [ALL], DISTINCT, EXISTS, IN. Jest również możliwość użycia TOP (n) ORDER, ale z pewnymi ograniczeniami np.: chcąc użyć stałej w postaci TOP mamy ograniczenie 8192, większą wartość możemy użyć, ale używając w tym celu zmiennej. Więcej informacji na temat tego, co możemy wykorzystywać dostępne tutaj na stronie MSDN

Pojawiło się trochę zmian i rozszerzeń mających na celu wsparcie przy migracji do In-Memory, w tym również mechanizmy specjalny cmdlet w PowerShell.

Dla tych, co lubią interfejs graficzny, może ucieszyć widok w Object Explorerze programu SQL Server Management Studio.

Co niestety kończy się jedynie wygenerowaniem TSQL TAMPLATE..

 

Podsumowanie

Jak widzimy In-Memory w wersji SQL Server 2016CTP2 rozwiązuje najważniejsze problemy, czy też niedoskonałości wersji In-Memory, które zadebiutowało w SQL Server 2014. Z całą pewnością więcej osób doceni to rozwiązanie i będzie łatwiejsze w zaimplementowaniu w powstających systemach OLTP. Jak w zapowiedziach widzimy, migracja istniejących rozwiązań ma być również łatwiejsza. Nic tylko testować i myśleć jak wykorzystać to potężne rozwiązanie na nowoczesnych serwerach naszych klientów. Oczywiście zapraszam do śledzenia kolejnych części Research SQL Server 2016CTP2, jeszcze ich trochę zostało! W tym wrócimy raz jeszcze do rozwiązań In-Memory, głównie w aspekcie biznesowym, ale o tym już niebawem..

Share this article ...

Google Plus
Ihren LinkedIn Kontakten zeigen



This entry was posted in General, SQL Server and tagged , , , , , , by Lukasz Grala. Bookmark the permalink.
Lukasz Grala

About Lukasz Grala

A Data Platform and Business Intelligence architect and consultant. An authorized Microsoft trainer and university lecturer. A holder of numerous Microsoft certificates, since 2010 Microsoft Most Valuable Professional (MVP) in the SQL Server category. An author of articles and webcasts available on TechNet portal. He runs two blogs, SQL Research and PowerPivot’s Blog. The author of various trainings and a speaker at numerous IT conferences, as well as the Polish SQL Server User Group (PLSSUG) leader.

Leave a Reply

Connect with:
  • This field its required.
  • This field its required.
    • Message is required