Arbetsbelastningsklassificering för dedikerad SQL-pool i Azure Synapse Analytics

Den här artikeln beskriver arbetsbelastningsklassificeringsprocessen för att tilldela en arbetsbelastningsgrupp och vikten av inkommande begäranden med dedikerade SQL-pooler i Azure Synapse.

Klassificering

Klassificering av arbetsbelastningshantering gör att arbetsbelastningsprinciper kan tillämpas på begäranden genom tilldelning av resursklasser och prioritet.

Det finns många sätt att klassificera arbetsbelastningar för datalager, men den enklaste och vanligaste klassificeringen är belastning och fråga. Du läser in data med infognings-, uppdaterings- och borttagningsinstruktioner. Du kör frågor mot data med hjälp av val. En datalagerlösning har ofta en arbetsbelastningsprincip för belastningsaktivitet, till exempel att tilldela en högre resursklass med fler resurser. En annan arbetsbelastningsprincip kan gälla för frågor, till exempel lägre prioritet jämfört med belastningsaktiviteter.

Du kan också underklassificera dina belastnings- och frågearbetsbelastningar. Med underklassificering får du mer kontroll över dina arbetsbelastningar. Frågearbetsbelastningar kan till exempel bestå av kubuppdateringar, instrumentpanelsfrågor eller ad hoc-frågor. Du kan klassificera var och en av dessa frågearbetsbelastningar med olika resursklasser eller prioritetsinställningar. Belastning kan också dra nytta av underklassificering. Stora transformeringar kan tilldelas till större resursklasser. Högre prioritet kan användas för att säkerställa att viktiga försäljningsdata läses in före väderdata eller ett socialt dataflöde.

Alla instruktioner klassificeras inte eftersom de inte kräver resurser eller behöver betydelse för att påverka körningen. DBCC kommandon, BEGIN, COMMIToch ROLLBACK TRANSACTION -instruktioner klassificeras inte.

Klassificeringsprocess

Klassificering för dedikerad SQL-pool uppnås idag genom att tilldela användare till en roll som har en motsvarande resursklass tilldelad till den med hjälp av sp_addrolemember. Möjligheten att karakterisera begäranden utöver en inloggning till en resursklass är begränsad med den här funktionen. En mer omfattande klassificeringsmetod är nu tillgänglig med syntaxen CREATE WORKLOAD CLASSIFIER . Med den här syntaxen kan dedikerade SQL-poolanvändare tilldela prioritet och hur mycket systemresurser som tilldelas en begäran via parametern workload_group .

Klassificeringsviktning

Som en del av klassificeringsprocessen finns viktning på plats för att avgöra vilken arbetsbelastningsgrupp som tilldelas. Viktningen går så här:

Parameter för klassificerare Grovlek
MEMBERNAME:USER 64
MEMBERNAME:ROLE 32
WLM_LABEL 16
WLM_CONTEXT 8
START_TIME/END_TIME 4

Parametern MEMBERNAME är obligatorisk. Men om det angivna medlemsnamnet är en databasanvändare i stället för en databasroll är viktningen för användaren högre och därmed väljs klassificeraren.

Om en användare är medlem i flera roller med olika resursklasser tilldelade eller matchade i flera klassificerare får användaren den högsta resursklasstilldelningen. Det här beteendet överensstämmer med det befintliga resursklasstilldelningsbeteendet.

Kommentar

Klassificeringen av beteendet för hanterade identiteter skiljer sig mellan den dedikerade SQL-poolen i Azure Synapse-arbetsytor och den fristående dedikerade SQL-poolen (tidigare SQL DW). Medan den fristående dedikerade hanterade SQL-poolidentiteten underhåller den tilldelade identiteten, körs den hanterade identiteten för Azure Synapse-arbetsytor som dbo. Det här går inte att ändra. Dbo-rollen klassificeras som standard till smallrc. När du skapar en klassificerare för dbo-rollen kan du tilldela begäranden till en annan arbetsbelastningsgrupp än smallrc. Om enbart dbo är för generiskt för klassificering och har bredare effekter kan du överväga att använda etikett, session eller tidsbaserad klassificering tillsammans med dbo-rollklassificeringen.

Förutom smallrc implementeras de dynamiska resursklasserna som fördefinierade databasroller. Smallrc visas inte som en databasroll, men är resursklassen Standard.

Systemklassificerare

Arbetsbelastningsklassificering har systemarbetsbelastningsklassificerare. Systemklassificerarna mappar befintliga resursklassrollmedlemskap till resursallokeringar för resursklass med normal betydelse. Systemklassificerare kan inte tas bort. Om du vill visa systemklassificerare kan du köra frågan nedan:

SELECT * FROM sys.workload_management_workload_classifiers where classifier_id <= 12

Blanda resursklasstilldelningar med klassificerare

Systemklassificerare som skapats för din räkning är en enkel väg att migrera till arbetsbelastningsklassificering. Om du använder rollmappningar för resursklass med klassificeringsprioritet kan det leda till felklassificering när du börjar skapa nya klassificerare med prioritet.

Föreställ dig följande scenario:

  • Ett befintligt informationslager har en databasanvändare DBAUser tilldelad rollen större resursklass. Resursklasstilldelningen gjordes med sp_addrolemember.
  • Informationslagret uppdateras nu med arbetsbelastningshantering.
  • För att testa den nya klassificeringssyntaxen har databasrollen DBARole (som DBAUser är medlem i) en klassificerare som skapats för att mappa dem till mediumrc och hög prioritet.
  • När DBAUser loggar in och kör en fråga tilldelas frågan till largerc. Eftersom en användare har företräde framför ett rollmedlemskap.

För att förenkla felsökningen av felklassificering rekommenderar vi att du tar bort resursklassrollmappningar när du skapar arbetsbelastningsklassificerare. Koden nedan returnerar befintliga resursklassrollmedlemskap. Kör sp_droprolemember för varje medlemsnamn som returneras från motsvarande resursklass.

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;