Strona korzysta z plików cookies w celu realizacji usług i zgodnie z Polityką Plików Cookies.



01.12.2022

Wyższy poziom programowania

Progress oferuje nowe narzędzia programistyczne: Progress Telerik, Progress Kendo UI i...
01.12.2022

Łączność w podróży

VMware SD-WAN VMware zaprezentował rozwiązanie SD-WAN nowej generacji, w tym nowego...
01.12.2022

Bezpieczne e-maile

Nowa aplikacja firmy Cypherdog Security Inc. umożliwia bezpieczną wymianę maili i...
01.12.2022

Pierwszy w branży

Schneider Electric wprowadza na rynek APC Smart-UPS Ultra. To pierwszy w branży...
01.12.2022

Przełączniki 10G dla MŚP

Nowe urządzenia to przełączniki 10G kompatybilne z systemem Omada SDN.
01.12.2022

Zarządzanie danymi

Firma Synology wprowadziła na rynek czterokieszeniowy DiskStation DS923+.
01.12.2022

Nowatorski system chłodzenia

OVHcloud zaprezentował nową, autorską technologię hybrydowego zanurzeniowego chłodzenia...
01.12.2022

Linia smart routerów

D-Link zaprezentował najnowszą rodzinę routerów Smart Wi-Fi z algorytmami sztucznej...
04.11.2022

Nowa platforma Red Hat

Nowa platforma Red Hat Enterprise Linux (RHEL) w wersjach 8.7 i 9.1 Beta obsługuje...

Wydajność i bezpieczeństwo

Data publikacji: 06-10-2022 Autor: Marcin Szeliga

Po trzyletniej przerwie – poprzednia wersja serwera SQL trafiła na rynek w listopadzie 2019 r. – Microsoft ogłosił najnowsze wydanie swojego serwera baz danych. W czasie powstawania artykułu dostępna była publiczna wersja zapoznawcza SQL Server 2022, natomiast dokładna data premiery nie była jeszcze znana.

 

Nowości i udoskonalenia serwera SQL 2022 dotyczą trzech głównych obszarów: wydajności, bezpieczeństwa i ciągłej dostępności. Co ciekawe w wielu przypadkach są one rozwinięciem funkcji znanych z wcześniejszych wersji serwera. Na przykład wprowadzony w wersji 2016 magazyn zapytań (Query Store) jest dodatkowo wykorzystywany do przechowywania wskazówek dla optymalizatora zarówno tych ustawionych przez użytkowników, jak i utworzonych automatycznie na podstawie wcześniej wykonywanych zapytań. Innym przykładem jest wprowadzona w wersji 2017 możliwość uruchamiania serwera SQL w systemach Linux – najnowsza wersja pozwala wykonać kopię migawkową bazy danych na tym systemie operacyjnym i odtworzyć ją na Windowsie.

 

W niniejszym artykule przedstawiamy najważniejsze nowości SQL Server 2022 i jednocześnie zachęcamy do jego samodzielnego przetestowania. Wersja zapoznawcza dla systemu Windows dostępna jest pod adresem bit.ly/3wT7QBO, natomiast wersję dla systemu Linux znajdziemy pod adresem bit.ly/3et9NPe.

 

Instalując serwer SQL, wybraliśmy wersję Custom, co pozwoliło na wybranie, oprócz silnika baz danych, funkcji PolyBase Query Services for External Data. Poza tym instalacja polega na zaakceptowaniu domyślnych odpowiedzi i sugestii instalatora. Zainstalowana też została wersja zapoznawcza konsoli SSMS 19 dostępna pod adresem bit.ly/3CZKnCT i odtworzona za jej pomocą kopia zapasowa przykładowej bazy danych AdventureWorks2019 (bit.ly/3wXTyzY).

 

> Wydajność

 

Dbanie o wydajność jest jednym z podstawowych obowiązków administratorów baz danych. Jest to jednocześnie jedno z najtrudniejszych zadań. Po pierwsze, optymalizacja zapytań jest skomplikowana i wymaga wiele czasu. Po drugie, administratorzy z reguły mają ograniczoną możliwość modyfikowania treści zapytań, a zdarza się też, że nie mogą dowolnie modyfikować obiektów w bazach danych, takich jak tabele, indeksy czy procedury składowane. SQL Server 2022 pomaga rozwiązać te problemy za pomocą nowych funkcji inteligentnego przetwarzania zapytań oraz zmian w budowie i działaniu samego serwera.

 

> Inteligentne przetwarzanie zapytań

 

Przetwarzanie zapytań przez serwer SQL w uproszczeniu przebiega według następującego schematu:

 

  • aplikacja kliencka wysyła zapytanie w języku TSQL;
  • moduł serwera SQL odpowiedzialny za znalezienie wystarczająco dobrych planów wykonania zapytań (Query Optimizer) analizuje zapytanie i na podstawie wbudowanych reguł oraz statystyk opisujących rozkład danych opracowuje plany jego wykonania. Następnie porównuje koszty tych planów i wybiera ten o najniższym koszcie wykonania;
  • moduł serwera SQL odpowiedzialny za wykonywanie zapytań (Query Execution Engine) otrzymuje wybrany plan i go realizuje;
  • wynik zapytania jest odesłany do aplikacji klienckiej.

 

Kluczowy w tym schemacie jest brak sprzężenia zwrotnego pomiędzy modułami serwera SQL. Wynika z tego, że nawet jeśli, wykonując zapytanie, serwer SQL zorientuje się, że wybrany plan był z jakichś powodów nieoptymalny, będzie kontynuował jego realizację. Schemat ten zaczął się zmieniać wraz z wprowadzaniem (w wersji 2017) mechanizmu adaptacyjnego wykonywania zapytań. W wersji 2019 to rozwiązanie przemianowano na mechanizm inteligentnego wykonywania zapytań – Czytelników nieznających tego mechanizmu zachęcamy do obejrzenia krótkiego filmu: bit.ly/3AQWBed.


Jakkolwiek pomocny, mechanizm inteligentnego wykonywania zapytań miał swoje ograniczenia – okazało się, że nie rozwiązuje on niektórych problemów wydajnościowych. Ponadto używane do optymalizacji zapytań (np. przydzielania modułowi wykonującemu zapytania odpowiedniej ilości pamięci) dane były zapisywane wyłącznie w pamięci, a więc były tracone po wyłączeniu serwera. Dlatego Microsoft zdecydował się rozbudować ten mechanizm i zintegrować go z magazynem zapytań.

 

Od wersji SQL Server 2022 CTP2.1 magazyn zapytań jest domyślnie włączony dla nowo utworzonych w wersji SQL 2020 baz danych. Microsoft zdecydował się na ten krok po upewnieniu się, że jego włączenie dla tysięcy baz SQL Azure nie miało negatywnego wpływu na ich wydajność.


Co więcej, po raz pierwszy magazyn zapytań przechowuje informacje o zapytaniach wykonywanych na dodatkowych replikach bazy danych – repliki tylko do odczytu wysyłają potrzebne dane do głównej repliki, która zapisuje je w magazynie danych. Konfigurację magazynu danych przeprowadzamy po stronie głównej repliki: po jego włączeniu należy jeszcze włączyć magazyn dla dodatkowych replik:


alter database current set query_store = on;
go
alter database current
for secondary set query_store = on (
operation_mode = read_write );
go


To rozwiązanie pozwoli używać magazynu zapytań do optymalizacji wydajności zapytań wykonywanych na dodatkowych replikach tylko do odczytu.

 

W wersji 2022 magazyn danych pozwala modyfikować plany wykonania zapytań za pomocą dyrektyw optymalizatora. Przypuśćmy, że jakieś zapytanie wykonuje się wolno, bo SQL Server przetwarza je w trybie blokowym – rozwiązaniem byłoby ustawienie dyrektywy OPTION(USE HINT(‚’DISALLOW_BATCH_MODE’’)). Innym przykładem może być chęć wymuszenia użycia pewnych indeksów czy konkretnego sposobu łączenia tabel. Nie musimy już w tym celu modyfikować zapytań ani używać wskazówek (Plan Guides). Wystarczy, że sprawdzimy identyfikator problematycznego zapytania i wykonamy procedurę składowaną sp_query_store_set_hints, tak jak jest to przedstawione na rys. 1:


select *
from [production].[product] as p
join [Sales].[SalesOrderDetail] as od on p.ProductID = od.ProductID
order by od.LineTotal
go
exec sp_query_store_set_hints @query_id = 46, @value = n’option (merge join)’;


Mechanizm inteligentnego wykonywania zapytań automatycznie dobiera dwa nowe parametry planów wykonania: maksymalny stopień zrównoleglenia oraz założenia modułu szacującego selektywność danych (Cardinality Estimation). Zmieniony został również sposób modyfikowania parametrów planów wykonania – poprzednio były one ustalane na podstawie ostatniego planu, co w pewnych sytuacjach prowadziło do oscylacji i niemożliwości znalezienia optymalnej wartości parametru. Teraz są one ustalane na podstawie wszystkich wcześniejszych planów wykonania zapytania.

 

Ostatni z nowych mechanizmów inteligentnego przetwarzania zapytań, o którym należy wspomnieć, to mechanizm optymalizacji planów przy uwzględnieniu parametrów (Parameter Sensitive Plan Optimization). Ma on być rozwiązaniem problemu wynikającego z optymalizacji procedur podczas ich pierwszego wykonania.


Do wersji SQL Server 2019 procedury miały jeden plan wykonania – ten, który został zoptymalizowany dla wartości parametrów, z którymi zostały one wywołane po raz pierwszy. Te plany są buforowane i wielokrotnie wykorzystywane, nawet jeśli selektywność parametrów, z którymi wywoływana jest procedura, różni się od selektywności parametrów, dla których plan został zoptymalizowany.

 

W wersji 2022, jeśli selektywność parametrów wywoływanych z procedurą będzie wystarczająco różna od parametrów, dla których zoptymalizowany został plan wykonania, utworzony zostanie dodatkowy plan wykonania. Ilustruje to poniższy przykład:

 

  1. Należy zacząć od utworzenia bazy danych, przełączenia jej w tryb SIMPLE (żeby uniknąć powiększania się pliku dziennika transakcyjnego) i utworzenia tabeli z dwiema kolumnami.
  2. Następnie wstawimy do tej tabeli 500 001 wierszy, przy czym w jednym wierszu zapiszemy wartość 1, a w pozostałych pięciuset tysiącach – wartość 2.
  3. Następnie poindeksujemy obie kolumny – co ważne, każdy z indeksów zawierać będzie tylko jedną kolumnę, a więc użycie tego indeksu będzie opłacalne tylko dla selektywnych (wybierających nie więcej niż 2% wierszy tabeli) parametrów.
  4. Na koniec utworzymy procedurę składowaną, która zwraca wybrane wiersze tabeli.


Jeśli teraz wywołamy naszą procedurę z selektywnym parametrem, zostanie ona wykonana poprzez przeszukanie użytecznego indeksu. Jednak kolejne wywołanie tej procedury z nieselektywnym parametrem powinno być wykonane z pominięciem indeksu (w tym wypadku przeskanowanie całej tabeli byłoby znacznie efektywniejsze), czyli procedura powinna być wykonana według innego planu. W wersji SQL 2022 tak właśnie się stanie.

 

[...]

 

Pracownik naukowy Wyższej Szkoły Bankowej w Poznaniu Wydział Zamiejscowy w Chorzowie, jest autorem książek poświęconych analizie danych i posiada tytuł Microsoft Most Valuable Professional.

Pełna treść artykułu jest dostępna w papierowym wydaniu pisma.

prenumerata Numer niedostępny Spis treści

.

Transmisje online zapewnia: StreamOnline

All rights reserved © 2019 Presscom / Miesięcznik \"IT Professional\"