| Termin | Definicja |
|---|---|
| poziom zgodności | Poziom zgodności to ustawienie bazy określające, według której wersji silnika zachowuje się optymalizator. Poziom zgodności w SQL Server — co właściwie określaPoziom zgodności (compatibility level) jest właściwością bazy danych w Microsoft SQL Server. Wskazuje, z jakim zestawem zachowań języka T-SQL oraz mechanizmów optymalizatora zapytań ma pracować dana baza. Ustawienie jest zapisane dla konkretnej bazy, a nie dla całej instancji. Dzięki temu na jednej instancji SQL Server mogą działać bazy korzystające z różnych poziomów zgodności, o ile dany silnik obsługuje wymagane ustawienia. Poziom zgodności nie oznacza, że baza jest fizycznie przechowywana w formacie starszej wersji SQL Server. Nie zmienia również wersji zainstalowanego silnika. Określa przede wszystkim warstwę zgodności zachowania zapytań: sposób interpretacji wybranych konstrukcji T-SQL, dostępność niektórych funkcji języka oraz reguły podejmowania decyzji przez optymalizator. Z tego powodu zmiana poziomu może wpłynąć na plany wykonania, czas realizacji zapytań i obciążenie procesora, mimo że dane oraz indeksy pozostają na miejscu. Numery poziomów i ich powiązanie z wersją silnikaMicrosoft SQL Server używa liczbowych wartości poziomu zgodności. Wartość 100 odpowiada zgodności z SQL Server 2008, 110 z SQL Server 2012, 120 z SQL Server 2014, 130 z SQL Server 2016, 140 z SQL Server 2017, 150 z SQL Server 2019, a 160 z SQL Server 2022. Nowszy silnik może obsługiwać starszy poziom zgodności, ale starszy silnik nie obsłuży poziomu wprowadzonego dopiero w późniejszej wersji. Faktycznie dostępne wartości zależą więc od wersji SQL Server, edycji oraz konkretnej konfiguracji środowiska. Informację o aktualnym poziomie można sprawdzić w widoku katalogowym Wpływ ustawienia na parser i optymalizator zapytańZmiana poziomu zgodności może zmienić sposób, w jaki SQL Server tworzy plan wykonania zapytania. Optymalizator analizuje między innymi statystyki, selektywność predykatów, szacowaną liczbę wierszy oraz możliwe strategie dostępu do tabel i indeksów. Przy innym poziomie zgodności może wybrać skan zamiast wyszukiwania po indeksie, zmienić kolejność łączenia tabel, zastosować inną metodę agregacji albo inaczej rozdzielić pamięć dla operatorów sortowania i łączenia. Nie każda zmiana planu oznacza błąd; jej skutek trzeba ocenić na rzeczywistych zapytaniach i danych. Ważną różnicą jest powiązanie poziomu zgodności z domyślnym modelem estymacji kardynalności. W SQL Server 2014 poziom 120 wprowadził nowszy model Cardinality Estimator względem wcześniejszych poziomów. Kolejne wersje mogły rozszerzać reguły optymalizacji i zachowania zapytań. Jeśli po podniesieniu poziomu zgodności konkretne zapytanie zacznie działać wolniej, należy porównać jego plan przed i po zmianie, sprawdzić statystyki oraz zweryfikować, czy problem dotyczy wszystkich zapytań, czy tylko określonego wzorca. Przydatne są w tym celu rzeczywisty plan wykonania, czas CPU, czas upływający i liczba odczytanych stron. Poziom zgodności wpływa także na dostępność i interpretację części funkcji języka T-SQL. Kod aplikacji może więc ujawnić problem nie tylko przez zmianę wydajności, lecz również przez błąd kompilacji albo inną interpretację składni. Przed zmianą warto przejrzeć procedury składowane, funkcje, widoki, wyzwalacze oraz zapytania generowane przez aplikację. Weryfikacja powinna obejmować szczególnie konstrukcje zależne od wersji silnika, zapytania wykorzystujące nietypowe konwersje typów oraz fragmenty, dla których wcześniej stosowano obejścia zgodne ze starszą wersją SQL Server. Bezpieczna zmiana poziomu w działającej baziePoziom zgodności można zmienić poleceniem Praktyczna kontrola po zmianie obejmuje odtworzenie reprezentatywnych operacji aplikacji, porównanie czasu zapytań oraz obserwację błędów kompilacji i wykonania. Warto sprawdzić raporty Query Store, jeżeli Query Store jest włączony, ponieważ przechowuje historię zapytań i ich planów, ułatwiając wskazanie regresji. Gdy problem dotyczy pojedynczego zapytania, rozwiązaniem może być korekta indeksu, aktualizacja statystyk lub wymuszenie sprawdzonego planu; obniżanie poziomu całej bazy powinno być traktowane jako decyzja awaryjna i poprzedzone ustaleniem konkretnej przyczyny. W przypadku diagnostyki komputera, na którym działa lokalna instancja SQL Server, trzeba rozdzielić problemy poziomu zgodności od problemów sprzętowych. Błędy dysku, niewystarczająca ilość pamięci RAM, przegrzewanie procesora albo uszkodzenie systemu plików mogą spowalniać bazę niezależnie od ustawienia zgodności. Prawidłowa analiza porównuje konfigurację SQL Server, stan systemu Windows, dzienniki zdarzeń, wydajność podzespołów oraz konkretne plany wykonania. |