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

Spis funkcji ograniczonych w OLTP

Termin Definicja
Spis funkcji ograniczonych w OLTP

Spis funkcji ograniczonych w OLTP In-Memory obejmuje m.in. część konstrukcji T-SQL niedostępnych dla tabel pamięciowych.

Zakres pojęcia OLTP In-Memory w SQL Server

Spis funkcji ograniczonych w OLTP In-Memory dotyczy mechanizmu In-Memory OLTP w Microsoft SQL Server, a więc pamięciowych tabel, pamięciowych typów tabel oraz modułów T-SQL kompilowanych natywnie. Nie jest to ogólna lista wszystkich poleceń niedostępnych w języku T-SQL. Ograniczenie może odnosić się do konkretnego rodzaju obiektu, sposobu dostępu do tabeli albo całej bazy danych zawierającej grupę plików MEMORY_OPTIMIZED_DATA.

Pamięciowa tabela może być używana z interpretowanym T-SQL, podobnie jak zwykła tabela dyskowa, ale nie wszystkie konstrukcje pozostają wtedy dostępne. Osobny, zwykle węższy zakres języka obowiązuje w procedurach składowanych utworzonych z opcją WITH NATIVE_COMPILATION. Z tego powodu podczas analizy aplikacji trzeba ustalić, czy problem dotyczy samej tabeli pamięciowej, procedury natywnie kompilowanej, czy ustawień bazy danych.

Konstrukcje T-SQL niedostępne przy tabelach pamięciowych

Przy dostępie do tabel pamięciowych z interpretowanego T-SQL nie są obsługiwane między innymi operacje TRUNCATE TABLE oraz MERGE, gdy tabela pamięciowa występuje jako cel modyfikacji. Polecenie MERGE może być użyte z tabelą pamięciową jako źródłem, ale nie jako tabelą docelową. Ograniczenia obejmują także odwołania do takiej tabeli z widoku indeksowanego oraz użycie połączenia kontekstowego z modułu CLR.

Nie można również wykonywać zapytań między bazami danych, jeżeli to samo zapytanie korzysta z tabeli pamięciowej. Z podobnego powodu transakcja obejmująca obiekt In-Memory OLTP nie może w typowym scenariuszu odwoływać się do tabel użytkownika w innej bazie. Niedostępne jest też używanie serwera połączonego w tym samym zapytaniu lub transakcji co tabela pamięciowa. Szczególnej uwagi wymagają kursory dynamiczne i keyset: dla zapytań korzystających z tabel pamięciowych nie zachowują pełnej pierwotnej semantyki i są degradowane do kursorów statycznych tylko do odczytu.

Węższy język procedur natywnie kompilowanych

Procedura natywnie kompilowana jest tłumaczona do kodu wykonywanego bez standardowej interpretacji T-SQL. Zapewnia to inny model wykonania, ale wymaga ograniczenia składni. Procedura tego typu może uzyskiwać dostęp wyłącznie do tabel pamięciowych; nie może bezpośrednio korzystać z tabel dyskowych. W natywnych modułach nie są dostępne między innymi wyrażenia CTE, czyli konstrukcje WITH definiujące wspólne wyrażenia tabelaryczne, a także część operatorów zapytań i funkcji znanych z pełnego T-SQL.

Ograniczenia dotyczą także planu zapytania. W procedurach natywnie kompilowanych nie występuje przetwarzanie równoległe, a operatory łączenia hash join i merge join nie mogą być elementem planu; stosowane są złączenia nested loop. Z tego względu procedury natywne są przeznaczone przede wszystkim do krótkich, powtarzalnych operacji transakcyjnych, a nie do rozbudowanych zapytań raportowych. Funkcje okna, w tym konstrukcje wykorzystujące OVER, są przykładem składni typowej dla raportowania, która może wymagać pozostawienia procedury w trybie interpretowanym.

Wpływ ograniczeń na projekt i diagnostykę

Przed migracją tabeli do In-Memory OLTP należy sprawdzić wszystkie zapytania, procedury, wyzwalacze i funkcje korzystające z danego obiektu. Samo utworzenie tabeli pamięciowej nie oznacza, że każda powiązana część aplikacji może zostać automatycznie skompilowana natywnie. Często właściwym rozwiązaniem jest pozostawienie warstwy raportowej i administracyjnej w interpretowanym T-SQL oraz przeniesienie do modułu natywnego tylko krótkiej ścieżki krytycznej dla obsługi transakcji.

Kontroli wymagają również funkcje na poziomie bazy danych. W bazie z grupą plików MEMORY_OPTIMIZED_DATA nie można używać między innymi opcji AUTO_CLOSE, odbudowy dziennika podczas dołączania bazy ani dublowania bazy danych. Replikacja z użyciem metody synchronizacji opartej na migawce bazy danych również nie jest obsługiwana. Migawki bazy danych zostały obsłużone dla baz z grupą MEMORY_OPTIMIZED_DATA od SQL Server 2019, dlatego przy starszych wersjach trzeba uwzględnić wcześniejsze ograniczenie.

W praktyce diagnoza błędu powinna obejmować wersję SQL Server, definicję obiektu, rodzaj modułu T-SQL oraz pełny komunikat silnika. Należy odróżnić błąd składni w procedurze natywnie kompilowanej od zakazu operacji na poziomie bazy. Dopiero takie rozróżnienie pozwala dobrać obejście: zmianę konstrukcji zapytania, rozdzielenie operacji między moduły, użycie zwykłej tabeli pomocniczej albo rezygnację z konkretnej funkcji In-Memory OLTP.

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