Udostępnij za pomocą


Pula hybrydowych

Dotyczy: SQL Server 2019 (15.x) i nowsze wersje

Pula hybrydowych umożliwia obiektom puli odwoływania się do stron danych w plikach bazy danych znajdujących się na urządzeniach pamięci trwałej (PMEM), a nie konieczności pobierania kopii stron danych z dysku i buforowania ich w nietrwałej pamięci DRAM. Ta funkcja została wprowadzona w programie SQL Server 2019 (15.x) i została dodatkowo rozszerzona w programie SQL Server 2022 (16.x).

Diagram przedstawiający pulę z włączoną pulą hybrydowych i bez tej puli.

Urządzenia pamięci trwałej (PMEM) są adresowalne bajtowo, a jeśli używany jest system plików z pamięcią trwałą (np. XFS, EXT4 lub NTFS), pliki w systemie plików mogą być dostępne przy użyciu zwykłych interfejsów API systemu plików w systemie operacyjnym. Alternatywnie program SQL Server może wykonywać operacje ładowania i przechowywania względem map pamięci plików na urządzeniu PMEM. Dzięki temu aplikacje obsługujące pmEM, takie jak PROGRAM SQL Server, mogą uzyskiwać dostęp do plików na urządzeniu bez przechodzenia przez tradycyjny stos magazynu.

Pula hybrydowych używa tej możliwości do wykonywania operacji ładowania i przechowywania względem plików mapowanych pamięci, aby użyć urządzenia PMEM zarówno jako pamięci podręcznej dla puli, jak i lokalizacji magazynu dla plików bazy danych. Tworzy to unikatową sytuację, w której zarówno odczyt logiczny, jak i odczyt fizyczny stają się zasadniczo tą samą operacją. Urządzenia pamięci trwałej są dostępne za pośrednictwem magistrali pamięci, podobnie jak zwykłe nietrwałe DRAM.

Domyślnie tylko czyste strony danych są buforowane w module PMEM dla puli hybrydowych. Aby strona została zmodyfikowana i oznaczona jako zanieczyszczona, należy ją skopiować z urządzenia PMEM do puli DRAM, zmodyfikować, a następnie w końcu skopiować zmodyfikowaną stronę z pamięci DRAM z powrotem do modułu PMEM, w którym można oznaczyć ją jako czystą ponownie. Ten proces odbywa się przy użyciu normalnych operacji w tle, takich jak punkt kontrolny lub leniwy moduł zapisywania, tak jakby moduł PMEM był standardowym urządzeniem blokowym.

Funkcja puli hybrydowych jest dostępna zarówno dla systemów Windows, jak i Linux. Urządzenie PMEM musi używać systemu plików obsługującego język DAX (DirectAccess). Systemy plików XFS, EXT4 i NTFS obsługują rozszerzenia języka DAX, które zapewniają dostęp do systemu plików bezpośrednio z miejsca użytkownika. Program SQL Server wykryje, czy jakiekolwiek pliki danych bazy danych znajdują się na odpowiednio skonfigurowanym urządzeniu dysku PMEM i automatycznie wykonują niezbędne mapowanie pamięci plików bazy danych podczas uruchamiania bazy danych lub za każdym razem, gdy baza danych jest dołączona, przywrócona lub utworzona.

Aby uzyskać więcej informacji, zobacz:

Włączanie puli hybrydowych

Program SQL Server 2019 (15.x) wprowadza język danych dynamicznych (DDL) do kontrolowania puli hybrydowych.

W poniższym przykładzie włączono pulę hybrydowych dla wystąpienia programu SQL Server:

ALTER SERVER CONFIGURATION SET MEMORY_OPTIMIZED HYBRID_BUFFER_POOL = ON;

Domyślnie pula hybrydowych jest wyłączona w zakresie wystąpienia. Aby zmiana ustawienia została w życie, należy ponownie uruchomić wystąpienie programu SQL Server. Ponowne uruchomienie jest konieczne, aby ułatwić przydzielanie wystarczających stron skrótu, aby uwzględnić łączną pojemność PMEM na serwerze.

W poniższym przykładzie włączono pulę hybrydowych dla określonej bazy danych.

ALTER DATABASE <databaseName> SET MEMORY_OPTIMIZED = ON;

Domyślnie pula hybrydowych jest włączona w zakresie bazy danych.

Wyłączanie puli hybrydowych

Poniższy przykład wyłącza pulę hybrydowych na poziomie wystąpienia:

ALTER SERVER CONFIGURATION SET MEMORY_OPTIMIZED HYBRID_BUFFER_POOL = OFF;

Domyślnie pula hybrydowych jest wyłączona na poziomie wystąpienia. Aby ta zmiana została w życie, należy ponownie uruchomić wystąpienie. Ponowne uruchomienie zapewnia przydzielanie wystarczającej liczby stron skrótu dla puli, ponieważ należy uwzględnić pojemność PMEM na serwerze.

Poniższy przykład wyłącza pulę hybrydowych dla określonej bazy danych.

ALTER DATABASE <databaseName> SET MEMORY_OPTIMIZED = OFF;

Domyślnie pula hybrydowych jest włączona w zakresie bazy danych i wyłączona w zakresie serwera.

Wyświetlanie konfiguracji puli hybrydowych

Pokaż wartość czasu wykonywania

Poniższy przykład zwraca bieżący stan konfiguracji puli hybrydowych wystąpienia.

SELECT * FROM sys.server_memory_optimized_hybrid_buffer_pool_configuration;

W poniższym przykładzie wymieniono bazy danych i ustawienie poziomu bazy danych dla puli hybrydowych (is_memory_optimized_enabled).

Można również zainstalować lub sformatować moduł PMEM bez włączonego języka DAX i traktować go jako zwykłe urządzenie blokowe (czyli wykonywać operacje we/wy za pośrednictwem jądra). Po skonfigurowaniu w ten sposób program SQL Server nie może używać modułów PMEM do wykonywania operacji z możliwością adresowania bajtów (oznacza to, że wszystkie wywołania będą używać sterowników przestrzeni jądra).

SELECT name, is_memory_optimized_enabled
FROM sys.databases;

Hybrydowa pula buforowa z bezpośrednim zapisem

Pula hybrydowych z zachowaniem zapisu bezpośredniego zmniejsza liczbę memcpy poleceń, które należy wykonać na zmodyfikowanych danych lub stronach indeksu znajdujących się na urządzeniach PMEM. Robi to przy użyciu trwałego buforu utrwalonego dziennika jako środka do modyfikowania strony bez konieczności kopiowania jej do jednej z pul DRAM. Zamiast tego strony w plikach bazy danych znajdujących się na urządzeniach PMEM są modyfikowane bezpośrednio bez konieczności buforowania w puli DRAM, a później asynchronicznie opróżniania na dysk. To zachowanie nadal jest zgodne z semantyki rejestrowania z wyprzedzeniem (WAL), ponieważ rekordy (dziennika) w utrwalonego buforu dziennika transakcji zostały zapisane lub wzmocnione na nośnikach trwałych. Zaobserwowano znaczne wzrosty wydajności dla obciążeń transakcyjnych korzystających z puli hybrydowych i buforu dziennika utrwalonego w ten sposób.

Aby włączyć tryb zapisu bezpośredniego, włącz pulę hybrydowych i bufor dziennika utrwalonego dla bazy danych i włącz flagę śledzenia uruchamiania 809.

Najlepsze rozwiązania dotyczące puli hybrydowych

  • Podczas formatowania urządzenia PMEM w systemie Windows użyj największego rozmiaru jednostki alokacji dostępnego dla systemu plików NTFS (2 MB w systemie Windows Server 2019 i nowszych) i upewnij się, że urządzenie zostało sformatowane dla języka DAX (bezpośredni dostęp).

  • Włącz zasady blokowania stron w pamięci w systemie Windows.

  • Rozmiary plików powinny mieć wielokrotność 2 MB (modulo 2 MB powinno być równe zero).

  • Jeśli ustawienie o zakresie serwera dla puli hybrydowych jest wyłączone, funkcja nie będzie używana przez żadną bazę danych użytkownika.

  • Po włączeniu ustawienia o zakresie serwera dla puli hybrydowych można użyć ustawienia o określonym zakresie bazy danych, aby wyłączyć funkcję dla poszczególnych baz danych użytkowników.

  • Od programu SQL Server 2019 (15.x) CU 3 (zobacz KB4538118), buforowanie odczytu zostało domyślnie włączone, proces, w którym najgorętsze strony są śledzone w puli hybrydowych, a następnie automatycznie awansowane do puli DRAM w celu zwiększenia wydajności.

  • Począwszy od programu SQL Server 2022 (16.x) CU 1, bezpośredni zapis jest zachowaniem domyślnym, gdy pula hybrydowych jest połączona z utrwalonego buforu dziennika. Powinno to poprawić wydajność niemal wszystkich obciążeń, ale zawsze istnieje prawdopodobieństwo regresji, a cu należy dokładnie przetestować przed zastosowaniem. Jeśli wystąpi regresja spowodowana tą zmianą zachowania, możesz przywrócić poprzednie zachowanie przy użyciu flagi śledzenia uruchamiania 898.

  • Począwszy od programu SQL Server 2022 (16.x) CU 1, flaga śledzenia 809 zostanie zignorowana przez program SQL Server podczas uruchamiania. Flaga śledzenia 809 i flaga śledzenia 898 mają zastosowanie tylko do systemu Windows i nie mają zastosowania do programu SQL Server w systemie Linux. Flagi śledzenia powinny być używane tylko w przypadku przekierowania do tego przez certyfikowanych specjalistów firmy Microsoft Server.