Serwisanci dostępni teraz · czynne całą dobę, także w weekendy i świętaWarszawa i okolice · dojazd bezpłatny
Darmowa diagnoza laptopa
Darmowa diagnoza laptopa
Dojazd do klienta bezpłatnie
Dojazd do klienta bezpłatnie
Laptopy zastępcze bezpłatnie
Laptopy zastępcze bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie

Poziom zgodności bazy danych (compatibility level)

Termin Definicja
Poziom zgodności bazy danych (compatibility level)

Compatibility level pozwala uruchomić nowszy silnik przy zachowaniu zachowania starszej wersji dla danej bazy.

Rola poziomu zgodności w Microsoft SQL Server

Poziom zgodności bazy danych (compatibility level) to ustawienie dostępne w Microsoft SQL Server, które określa, z jakim zestawem zachowań zgodnych z określoną generacją silnika ma działać dana baza. Ustawienie jest przypisane do konkretnej bazy, a nie do całej instancji. Dzięki temu na jednej instancji można uruchamiać bazy korzystające z różnych poziomów zgodności, o ile są one obsługiwane przez zainstalowaną wersję SQL Server.

Mechanizm służy przede wszystkim do kontrolowanego przechodzenia na nowszą wersję silnika. Baza może zostać przeniesiona na nowszy SQL Server, ale początkowo zachować część wcześniejszych reguł przetwarzania zapytań i interpretacji języka T-SQL. Nie oznacza to jednak uruchomienia starego silnika wewnątrz nowego. Wersję serwera, dostępne funkcje oraz zgodność plików określa sam silnik SQL Server, natomiast compatibility level wpływa na wybrane zachowania bazy podczas wykonywania zapytań.

Wartości 100–160 i ich powiązanie z wersją silnika

Wartość poziomu zgodności jest zapisywana jako liczba całkowita. Przykładowo poziom 100 odpowiada zachowaniom 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. Sama liczba nie jest numerem wersji instancji. SQL Server 2022 może obsługiwać bazę pozostawioną na poziomie 150, ale baza taka nie korzysta automatycznie ze wszystkich zmian wprowadzonych dla poziomu 160.

Poziom zgodności nie jest ustawieniem pozwalającym cofnąć wszystkie właściwości nowszej wersji. Nie zmienia między innymi fizycznej architektury instancji, wersji systemu operacyjnego ani ogólnej wersji zainstalowanego produktu. Nie zapewnia również pełnej zgodności aplikacji, jeżeli aplikacja korzysta z usuniętych funkcji, zmienionych sterowników albo innej konfiguracji połączeń. Przed zmianą należy sprawdzić dokumentację konkretnej wersji SQL Server oraz zależności używane przez daną bazę.

Wpływ ustawienia na zapytania i plan wykonania

Zmiana compatibility level może zmienić sposób optymalizacji zapytań. W SQL Server poziom zgodności jest powiązany między innymi z dostępnymi zmianami procesora zapytań, regułami optymalizacji oraz zachowaniem estymatora liczby wierszy. W rezultacie to samo zapytanie może po zmianie otrzymać inny plan wykonania. Plan może być korzystniejszy, ale w konkretnych przypadkach może także ujawnić regresję wydajności, zwłaszcza gdy zapytanie wcześniej zależało od określonego sposobu szacowania selektywności filtrów lub kolejności operacji.

Poziom zgodności może wpływać również na interpretację wybranych konstrukcji T-SQL, działanie nowych funkcji języka oraz reguły przetwarzania wprowadzane w kolejnych wersjach SQL Server. Dlatego po zmianie ustawienia należy przetestować zapytania raportowe, procedury składowane, funkcje, widoki, zadania oraz aplikacje korzystające z bazy. Szczególną uwagę warto zwrócić na zapytania długotrwałe, operacje masowe, złożone połączenia tabel i instrukcje, których plany wykonania były wcześniej wymuszane lub przechowywane w pamięci podręcznej.

Odczyt i bezpieczna zmiana compatibility level

Aktualny poziom zgodności można odczytać z widoku katalogowego sys.databases, korzystając z kolumny compatibility_level. Przydatne są także informacje o wersji instancji zwracane przez SERVERPROPERTY, ponieważ dopiero zestawienie wersji serwera z poziomem konkretnej bazy pokazuje, czy dostępny jest nowszy poziom zgodności. Przykładowe zapytanie diagnostyczne może odczytać nazwę bazy, poziom zgodności i stan bazy, bez modyfikowania danych.

Zmiana ustawienia wykonywana jest poleceniem ALTER DATABASE, na przykład ALTER DATABASE [NazwaBazy] SET COMPATIBILITY_LEVEL = 160;, jeżeli instancja obsługuje poziom 160. Przed wykonaniem operacji należy potwierdzić nazwę właściwej bazy, wykonać kopię zapasową zgodnie z przyjętą procedurą oraz zaplanować testy po zmianie. Weryfikacja powinna obejmować błędy aplikacji, czas wykonania kluczowych zapytań, użycie procesora, odczyty z dysku i zmiany planów wykonania. W środowisku, w którym wystąpi regresja, możliwe jest czasowe przywrócenie wcześniej używanego poziomu, ale nie zastępuje to analizy przyczyny i sprawdzenia zgodności kodu.

Problemy z poziomem zgodności mogą objawiać się jako błędy składni, różnice w wynikach zapytań, nagłe zwiększenie czasu wykonania albo większe obciążenie serwera po migracji. Diagnostyka wymaga wtedy porównania wersji SQL Server, ustawień bazy, planów wykonania i kodu aplikacji. Przy pracy z laptopem lub komputerem PC, na którym działa lokalne środowisko testowe albo narzędzie klienckie SQL Server, można również sprawdzić konfigurację połączenia, wersję sterownika i komunikaty generowane przez aplikację.

+48 22 100 48 29Zadzwoń teraz · serwisant w 1 godzinę