Dela via


Resource Governor-klassificerarfunktion

gäller för:SQL ServerAzure SQL Managed Instance

Klassificeringsprocessen för resursguvernören kan använda en klassificerarfunktion för att tilldela inkommande sessioner till en arbetsbelastningsgrupp. Klassificerarfunktionen innehåller din anpassade logik för att klassificera sessioner i arbetsbelastningsgrupper.

För konfigurations- och övervakningsexempel och för att lära dig resursguvernörens bästa praxis, se Självstudie: Konfigurationsexempel och bästa praxis för resursguvernör.

Klassificering

Med resursguvernör klassificeras varje ny session i en arbetsbelastningsgrupp. Klassificeraren är en skalbar användardefinierad funktion som du skapar. Den innehåller önskad logik för att tilldela inkommande sessioner till en arbetsbelastningsgrupp. Det skalära värde som returneras av klassificeraren är namnet på en arbetsbelastningsgrupp som ska tilldelas till en inkommande session.

Om resursguvernören är aktiverad och en klassificerarfunktion anges i konfigurationen för resursguvernören avgör funktionsutdata den arbetsbelastningsgrupp som används för nya sessioner. Annars klassificeras alla användarsessioner i arbetsbelastningsgruppen default.

Not

Arbetsbelastningsgruppen internal används endast för interna systembegäranden. Du kan inte ändra de kriterier som används för att tilldela begäranden till internal arbetsbelastningsgrupp, och du kan inte uttryckligen klassificera begäranden i internal arbetsbelastningsgrupp.

Du måste utföra följande steg för att börja använda en klassificerarfunktion:

  1. Skapa funktionen i master-databasen med hjälp av CREATE FUNCTION. Funktionen måste använda schemabindning.
  2. Referera till funktionen i konfigurationen för resursguvernören med hjälp av ALTER RESOURCE GOVERNOR med parametern CLASSIFIER_FUNCTION.
  3. Gör den nya konfigurationen effektiv med hjälp av ALTER RESOURCE GOVERNOR RECONFIGURE.

Viktig

Klientanslutningsförsök kan misslyckas om klassificeringsfunktionen inte slutförs inom den av klienten konfigurerade anslutningens tidsgräns. Det är viktigt att du skapar klassificerarfunktioner som slutför körningen innan anslutningens tidsgräns kan inträffa.

Håll klassificerarens funktion enkel. Undvik att använda komplex eller tidskrävande logik. Undvik om möjligt dataåtkomst i klassificeraren.

Klassificerarfunktionen har följande egenskaper och beteenden:

  • Funktionen definieras i serveromfånget (i master-databasen).
  • Funktionen definieras med schemabindning. Mer information finns i SCHEMABINDING.
  • Funktionen utvärderas för varje ny session, även när anslutningspooler är aktiverade.
  • Funktionen returnerar arbetsbelastningsgruppens kontext för sessionen. Sessionen tilldelas den arbetsbelastningsgrupp som returneras av klassificeraren för hela sessionens varaktighet.
  • Om funktionen returnerar NULL, defaulteller namnet på en icke-existerande arbetsbelastningsgrupp får sessionen kontexten default arbetsbelastningsgrupp. Sessionen får också default kontext om funktionen av någon anledning misslyckas.
  • När en klassificerarfunktion har lagts till eller tagits bort med hjälp av ALTER RESOURCE GOVERNOR (WITH CLASSIFIER_FUNCTION = ...)-instruktionen börjar ändringen gälla först när ALTER RESOURCE GOVERNOR RECONFIGURE-instruktionen har körts.
  • Endast en funktion kan anges som klassificerare i taget.
  • Klassificerarens funktion kan inte ändras eller tas bort om inte dess klassificerarstatus tas bort med hjälp av ALTER RESOURCE GOVERNOR (WITH CLASSIFIER_FUNCTION = ...)-instruktion som anger funktionsnamnet till NULL eller till namnet på en annan funktion.
  • I avsaknad av en klassificerarfunktion klassificeras alla sessioner i den default gruppen.
  • De arbetsbelastningsgrupper som anges i klassificerarens funktionsutdata ligger utanför omfånget för schemabindningsbegränsningen. Du kan till exempel inte släppa en tabell som refereras i klassificerarfunktionen, men du kan släppa en arbetsbelastningsgrupp även om klassificeraren returnerar namnet på den gruppen.

Aktivera DAC

För felsökning och diagnostik rekommenderar vi att du proaktivt aktiverar och bekantar dig med den dedikerade administratörsanslutningen (DAC). DAC är inte föremål för klassificering av resursguvernörer. Du kan använda en DAC för att övervaka och felsöka en klassificerarfunktion även om konfigurationen av resursguvernören inte fungerar och gör andra anslutningar inte användbara. För mer information, se Diagnostikanslutning för databasadministratörer.

Om en DAC inte är tillgänglig för felsökning kan du starta servern i enanvändarläge. Även om anslutningen för enanvändarläge inte är föremål för klassificering ger den dig inte möjlighet att diagnostisera klassificering av resursguvernörer när den körs.

När du ansluter med en DAC eller ansluter i enanvändarläge kan du ändra konfigurationen av resursguvernören för att ta bort en funktion med fel på klassificeraren eller inaktivera resource governor.

Inloggningsprocess

När det gäller resursguvernören består inloggningsprocessen för en session av följande steg:

  1. Inloggningsautentisering.
  2. Inloggningsutlösare körning. Inträffar endast om inloggningsutlösare finns i instansen.
  3. Klassificering.

När klassificeringen startar kör resursguvernören klassificerarfunktionen och använder det skalära värdet som returneras av funktionen för att skicka begäranden till den matchande arbetsbelastningsgruppen.

Du kan övervaka körningen av inloggningsutlösare och klassificerarfunktionen med hjälp av sys.dm_exec_sessions och sys.dm_exec_requests systemvyer.

Exempel

Funktionen resource governor classifier kan använda ett brett urval av anpassad logik. Fler exempel och en genomgång finns i Tutorial: Resource governor configuration examples and best practices.

A. Värdnamn

Den här funktionen klassificerar sessioner från ett specifikt värdnamn till en arbetsbelastningsgrupp med namnet Reports, med hjälp av HOST_NAME() inbyggd systemfunktion. Alla andra sessioner fortsätter att klassificeras i arbetsbelastningsgruppen default.

CREATE FUNCTION dbo.rg_classifier()
RETURNS sysname
WITH SCHEMABINDING
AS
BEGIN
    DECLARE @grp_name sysname = 'default';

    IF (HOST_NAME() IN ('reportserver1','reportserver2'))
        SET @grp_name = 'Reports';
    
    RETURN @grp_name;
END;
GO

B. Användarnamn

Den här funktionen klassificerar sessioner från specifika användarnamn eller tjänstkontonamn till en arbetsbelastningsgrupp med namnet Reports, med hjälp av SUSER_SNAME() inbyggd systemfunktion. Alla andra sessioner fortsätter att klassificeras i arbetsbelastningsgruppen default.

CREATE FUNCTION dbo.rg_classifier()
RETURNS sysname
WITH SCHEMABINDING
AS
BEGIN
    DECLARE @grp_name sysname = 'default';

    IF (SUSER_SNAME() IN ('Reporting', 'domain/svc_reporting'))
        SET @grp_name = 'Reports';
    
    RETURN @grp_name;
END;
GO

C. Programnamn

Den här funktionen klassificerar sessioner från specifika programnamn till en arbetsbelastningsgrupp med namnet Adhoc, med hjälp av APP_NAME() inbyggd systemfunktion. Alla andra sessioner fortsätter att klassificeras i arbetsbelastningsgruppen default.

Viktig

Ett program eller en användare kan ange valfritt programnamn som en del av anslutningssträngen. Användare kan ansluta via en mängd olika program.

CREATE FUNCTION dbo.rg_classifier()
RETURNS sysname
WITH SCHEMABINDING
AS
BEGIN
    DECLARE @grp_name sysname = 'default';

    IF (APP_NAME() IN ('Microsoft SQL Server Management Studio - Query','azdata'))
        SET @grp_name = 'Adhoc';
    
    RETURN @grp_name;
END;
GO