Klasyfikacja obciążeń dla dedykowanej puli SQL w usłudze Azure Synapse Analytics

W tym artykule wyjaśniono proces klasyfikacji obciążeń przypisywania grupy obciążeń i ważności do żądań przychodzących z dedykowanymi pulami SQL w usłudze Azure Synapse.

Klasyfikacja

Klasyfikacja zarządzania obciążeniami umożliwia stosowanie zasad obciążeń do żądań za pomocą przypisywania klas zasobów i ważności.

Chociaż istnieje wiele sposobów klasyfikowania obciążeń magazynowania danych, najprostszą i najbardziej typową klasyfikacją jest ładowanie i wykonywanie zapytań. Dane są ładowane za pomocą instrukcji wstawiania, aktualizowania i usuwania. Wykonujesz zapytanie dotyczące danych przy użyciu wybranych opcji. Rozwiązanie do magazynowania danych często będzie mieć zasady obciążenia dla działania obciążenia, takie jak przypisywanie wyższej klasy zasobów z większą większa większa ilością zasobów. Inne zasady obciążenia mogą mieć zastosowanie do zapytań, takich jak mniejsze znaczenie w porównaniu z działaniami ładowania.

Możesz również podklasyfikować obciążenia i wykonywać zapytania o obciążenia. Podklasyfikacja zapewnia większą kontrolę nad obciążeniami. Na przykład obciążenia zapytań mogą składać się z odświeżeń modułów, zapytań pulpitu nawigacyjnego lub zapytań ad hoc. Każde z tych obciążeń zapytań można sklasyfikować przy użyciu różnych klas zasobów lub ustawień ważności. Obciążenie może również korzystać z podklasyfikacji. Duże przekształcenia można przypisać do większych klas zasobów. Większe znaczenie może służyć do zapewnienia, że kluczowe dane sprzedaży są ładowane przed danymi pogodowymi lub kanałem danych społecznościowych.

Nie wszystkie instrukcje są klasyfikowane, ponieważ nie wymagają zasobów lub wymagają znaczenia, aby wpływać na wykonywanie. DBCC polecenia, BEGIN, COMMITi ROLLBACK TRANSACTION instrukcje nie są klasyfikowane.

Proces klasyfikacji

Klasyfikacja dedykowanej puli SQL jest obecnie osiągana przez przypisanie użytkowników do roli, która ma przypisaną do niej odpowiednią klasę zasobów przy użyciu sp_addrolemember. Możliwość scharakteryzowania żądań poza logowaniem do klasy zasobów jest ograniczona dzięki tej możliwości. Bogatsza metoda klasyfikacji jest teraz dostępna za pomocą składni CREATE WORKLOAD CLASSIFIER . Dzięki tej składni użytkownicy dedykowanej puli SQL mogą przypisywać znaczenie i ilość zasobów systemowych przypisanych do żądania za pośrednictwem parametru workload_group .

Waga klasyfikacji

W ramach procesu klasyfikacji wagę jest częścią procesu określania, która grupa obciążeń jest przypisana. Waga jest następująca:

Parametr klasyfikatora Weight
MEMBERNAME:USER 64
MEMBERNAME:ROLE 32
WLM_LABEL 16
WLM_CONTEXT 8
START_TIME/END_TIME 100

Parametr MEMBERNAME jest obowiązkowy. Jeśli jednak określona nazwa elementu członkowskiego jest użytkownikiem bazy danych zamiast roli bazy danych, waga dla użytkownika jest wyższa i dlatego jest wybierana klasyfikator.

Jeśli użytkownik jest członkiem wielu ról z różnymi klasami zasobów przypisanymi lub dopasowanymi w wielu klasyfikatorach, użytkownik otrzymuje najwyższe przypisanie klasy zasobów. To zachowanie jest zgodne z zachowaniem istniejącego przypisania klasy zasobów.

Uwaga

Klasyfikowanie zachowań tożsamości zarządzanych różni się między dedykowaną pulą SQL w obszarach roboczych usługi Azure Synapse a autonomiczną dedykowaną pulą SQL (dawniej SQL DW). Chociaż autonomiczna tożsamość zarządzana dedykowanej puli SQL utrzymuje przypisaną tożsamość, w przypadku obszarów roboczych usługi Azure Synapse tożsamość zarządzana jest uruchamiana jako dbo. Nie można tego zmienić. Rola dbo domyślnie jest klasyfikowana na smallrc. Utworzenie klasyfikatora dla roli dbo umożliwia przypisywanie żądań do grupy obciążeń innej niż smallrc. Jeśli sama baza danych jest zbyt ogólna dla klasyfikacji i ma szerszy wpływ, rozważ użycie klasyfikacji etykiet, sesji lub czasu w połączeniu z klasyfikacją roli dbo.

Z wyjątkiem smallrc dynamiczne klasy zasobów są implementowane jako wstępnie zdefiniowane role bazy danych. Smallrc nie jest wyświetlana jako rola bazy danych, ale jest domyślną klasą zasobów.

Klasyfikatory systemowe

Klasyfikacja obciążeń ma klasyfikatory obciążeń systemowych. Klasyfikatory systemowe mapuje istniejące członkostwa w rolach klas zasobów na alokacje zasobów klasy zasobów o normalnym znaczeniu. Nie można porzucić klasyfikatorów systemu. Aby wyświetlić klasyfikatory systemowe, możesz uruchomić poniższe zapytanie:

SELECT * FROM sys.workload_management_workload_classifiers where classifier_id <= 12

Mieszanie przypisań klas zasobów za pomocą klasyfikatorów

Klasyfikatory systemowe utworzone w Twoim imieniu zapewniają łatwą ścieżkę migracji do klasyfikacji obciążeń. Użycie mapowań ról klasy zasobów z pierwszeństwem klasyfikacji może prowadzić do błędnej klasyfikacji podczas tworzenia nowych klasyfikatorów o znaczeniu.

Rozważmy następujący scenariusz:

  • Istniejący magazyn danych ma użytkownika bazy danych DBAUser przypisanego do większej roli klasy zasobów. Przypisanie klasy zasobów zostało wykonane za pomocą polecenia sp_addrolemember.
  • Magazyn danych jest teraz aktualizowany przy użyciu zarządzania obciążeniami.
  • Aby przetestować nową składnię klasyfikacji, rola bazy danych DBARole (która administrator bazy danych jest członkiem), ma klasyfikator utworzony dla nich mapowanie ich na mediumrc i duże znaczenie.
  • Gdy administrator bazy danych zaloguje się i uruchomi zapytanie, zapytanie zostanie przypisane do większego. Ponieważ użytkownik ma pierwszeństwo przed członkostwem w roli.

Aby uprościć rozwiązywanie problemów z błędną klasyfikacją, zalecamy usunięcie mapowań ról klasy zasobów podczas tworzenia klasyfikatorów obciążeń. Poniższy kod zwraca istniejące członkostwa w roli klasy zasobów. Uruchom sp_droprolemember dla każdej nazwy elementu członkowskiego zwróconej z odpowiedniej klasy zasobów.

SELECT  r.name AS [Resource Class]
,       m.name AS membername
FROM    sys.database_role_members rm
JOIN    sys.database_principals AS r ON rm.role_principal_id = r.principal_id
JOIN    sys.database_principals AS m ON rm.member_principal_id = m.principal_id
WHERE   r.name IN ('mediumrc','largerc','xlargerc','staticrc10','staticrc20','staticrc30','staticrc40','staticrc50','staticrc60','staticrc70','staticrc80');
--for each row returned run in the previous query
EXEC sp_droprolemember '[Resource Class]', membername;
  • Aby uzyskać więcej informacji na temat tworzenia klasyfikatora, zobacz CREATE WORKLOAD CLASSIFIER (Transact-SQL).
  • Zobacz przewodnik Szybki start dotyczący tworzenia klasyfikatora obciążenia Tworzenie klasyfikatora obciążenia.
  • Zobacz artykuły z instrukcjami, aby skonfigurować znaczenie obciążenia oraz jak zarządzać zarządzaniem obciążeniami i monitorować zarządzanie nimi.
  • Zobacz sys.dm_pdw_exec_requests , aby wyświetlić zapytania i przypisaną ważność.