Condividi tramite


Concetti di Resource Governor

I tre seguenti concetti sono fondamentali per la comprensione e l'utilizzo di Resource Governor:

  • Pool di risorse. Due pool di risorse (interno e predefinito) vengono creati con l'installazione di SQL Server 2008. Resource Governor supporta anche i pool di risorse definiti dall'utente.

  • Gruppi del carico di lavoro. Due gruppi del carico di lavoro (interno e predefinito) vengono creati e mappati ai relativi pool di risorse con l'installazione di SQL Server 2008. Resource Governor supporta anche i gruppi del carico di lavoro definiti dall'utente.

  • Classificazione. Sono presenti regole interne che consentono di classificare le richieste in arrivo e indirizzarle a un gruppo del carico di lavoro. Resource Governor supporta anche una funzione di classificazione definita dall'utente per l'implementazione delle regole di classificazione.

Nota

Resource Governor non impone controlli su una connessione amministrativa dedicata (DAC, Dedicated Administrator Connection). Non è necessario classificare le query DAC in esecuzione nel gruppo del carico di lavoro interno e nel pool di risorse.

Nel contesto di Resource Governor è possibile considerare i concetti precedenti come componenti. Nella seguente illustrazione vengono mostrati questi componenti e le relazioni tra di essi nell'ambiente del motore di database. Da una prospettiva di elaborazione, il flusso semplificato è il seguente:

  • È presente una connessione in ingresso per una sessione (sessione 1 di n).

  • La sessione è classificata (classificazione).

  • Il carico di lavoro della sessione viene indirizzato a un gruppo del carico di lavoro, ad esempio, il gruppo 4.

  • Il gruppo del carico di lavoro utilizza il pool di risorse al quale è associato, ad esempio il pool 2.

  • Il pool di risorse fornisce e limita le risorse richieste dall'applicazione, ad esempio, l'applicazione 3.

Componenti funzionali di Resource Governor

Pool di risorse

Un pool di risorse, o pool, rappresenta le risorse fisiche del server. Il pool può essere paragonato a un'istanza virtuale di SQL Server in un'istanza di SQL Server.

Un pool è composto da due parti. Una parte non si sovrappone agli altri pool e consente di abilitare la prenotazione delle risorse minime. L'altra parte è condivisa con gli altri pool e supporta l'utilizzo massimo possibile delle risorse. In questa versione di Resource Governor le risorse del pool vengono impostate specificando uno dei seguenti valori per ciascuna risorsa:

  • Valore MIN o MAX per CPU

  • Valore MIN o MAX per memoria

I valori MIN e MAX rappresentano la disponibilità minima garantita delle risorse del pool e le dimensioni massime del pool, rispettivamente, per ciascuna di queste risorse.

La somma dei valori MIN di tutti i pool non può superare il 100% delle risorse del server. Il valore MAX può essere impostato dovunque nell'intervallo tra MIN e 100 percento incluso.

Se un pool ha un valore MIN diverso da zero definito, il valore MAX effettivo degli altri pool viene regolato come valore minimo del valore MAX configurato di un pool e la somma dei valori MIN degli altri pool sottratta dal 100 per cento.

Nella seguente tabella vengono illustrati i concetti precedenti. Nella tabella vengono mostrate le impostazioni per il pool interno, il pool predefinito e due pool definiti dall'utente. Le seguenti formule vengono utilizzate per calcolare il valore MAX% effettivo e la percentuale condivisa.

  • Il valore Min (X, Y) indica il valore più piccolo di X e Y.

  • La somma (X) indica la somma del valore X in tutti i pool.

  • Totale percentuale condivisa = 100 - la somma (MIN%).

  • Valore effettivo MAX% = minimo (X, Y).

  • Percentuale condivisa = Valore effettivo MAX% - valore MIN%.

Nome pool

Impostazione MIN%

Impostazione MAX%

Valore MAX% effettivo calcolato

Valore % condiviso calcolato

Commenti

interno

0

100

100

0

I valori MAX% effettivo e % condiviso non sono applicabili al pool interno.

predefinito

0

100

30

30

Il valore MAX effettivo viene calcolato come: minimo (100,100 - (20+50)) = 30. Il valore % condiviso calcolato è il valore effettivo MAX - MIN = 30.

Pool 1

20

100

50

30

Il valore MAX effettivo viene calcolato come: minimo (100,100-50) = 50. Il valore % condiviso calcolato è il valore effettivo MAX – MIN = 30.

Pool 2

50

70

70

20

Il valore MAX effettivo viene calcolato come: minimo (70,100-20) = 70. Il valore % condiviso calcolato è il valore effettivo MAX – MIN = 20.

Utilizzando la tabella precedente come esempio, è possibile descrivere ulteriormente le regolazioni che si verificano quando viene creato un altro pool. Il pool descritto è il pool 3 e ha una impostazione MIN% di 5.

Nome pool

Impostazione MIN%

Impostazione MAX%

Valore MAX% effettivo calcolato

Valore % condiviso calcolato

Commenti

interno

0

100

100

0

I valori MAX % effettivo e % condiviso non sono applicabili al pool interno.

predefinito

0

100

25

25

Il valore MAX effettivo viene calcolato come: minimo (100,100-(20+50+5) = 25. Il valore % condiviso calcolato è il valore effettivo MAX – MIN = 25.

Pool 1

20

100

45

25

Il valore MAX effettivo viene calcolato come: minimo (100,100-55) = 45. Il valore % condiviso calcolato è il valore effettivo MAX – MIN = 25.

Pool 2

50

70

70

20

Il valore MAX effettivo viene calcolato come: minimo (70,100-25) = 70. Il valore % condiviso calcolato è il valore effettivo MAX – MIN = 20.

Pool 3

5

100

30

25

Il valore MAX effettivo viene calcolato come: minimo (100,100-70) = 30. Il valore % condiviso calcolato è il valore effettivo MAX – MIN = 25.

La parte condivisa del pool viene utilizzata per indicare la destinazione possibile delle risorse, se disponibili. Tuttavia, quando le risorse vengono utilizzate vengono destinate al pool specificato e non vengono condivise. Ciò può migliorare l'utilizzo delle risorse nei casi in cui non sono presenti richieste in un pool specificato e le risorse configurate per il pool possono essere liberate per gli altri pool.

Alcuni casi estremi di configurazione del pool sono:

  • Tutti i pool definiscono valori minimi che in totale rappresentano il 100 per cento delle risorse del server. In questo caso i valori massimi effettivi equivalgono ai minimi. Ciò equivale a dividere le risorse del server in parti non sovrapposte indipendentemente dalle risorse utilizzate in ciascun pool.

  • Tutti i pool hanno zero minimi. Tutti i pool si contendono le risorse disponibili e le dimensioni finali sono basate sull'utilizzo delle risorse in ciascun pool. Altri fattori quali i criteri svolgono un ruolo nella determinazione delle dimensioni finali del pool.

In Resource Governor sono disponibili due pool di risorse, il pool interno e il pool predefinito.

Pool interno

Il pool interno rappresenta le risorse utilizzate da SQL Server. Questo pool contiene sempre soltanto il gruppo interno e non può essere modificato in alcun modo. L'utilizzo delle risorse da parte del pool interno non è limitato. I carichi di lavoro nel pool sono considerati fondamentali per il funzionamento del server e Resource Governor consente al pool interno di richiedere memoria agli altri pool anche se questa comporta la violazione dei limiti impostati per gli altri pool.

Nota

L'utilizzo del pool interno e delle risorse del gruppo interno non viene sottratto dall'utilizzo complessivo delle risorse. Le percentuali vengono calcolate dalle risorse complessive disponibili.

Pool predefinito

Il pool predefinito è il primo pool dell'utente predefinito. Prima della configurazione il pool predefinito contiene solo il gruppo predefinito. Il pool predefinito non può essere creato o eliminato ma può essere modificato. Il pool predefinito può contenere gruppi definiti dall'utente oltre al gruppo predefinito.

Nota

Il gruppo predefinito può essere modificato ma non può essere spostato all'esterno del pool predefinito.

Pool di risorse definiti dall'utente

Resource Governor fornisce istruzioni DDL per la creazione, la modifica e l'eliminazione dei pool di risorse. Per ulteriori informazioni, vedere DDL di Resource Governor e viste del sistema.

Gruppi del carico di lavoro

Un gruppo del carico di lavoro serve come contenitore per le richieste della sessione simili tra loro, secondo i criteri di classificazione applicati a ciascuna richiesta. Un gruppo del carico di lavoro consente l'aggregazione del monitoraggio dell'utilizzo delle risorse e l'applicazione di criteri uniformi a tutte le richieste nel gruppo. Un gruppo definisce i criteri per i propri membri.

Nota

È possibile spostare i gruppi del carico di lavoro definiti dall'utente da un pool di risorse all'altro.

In Resource Governor sono disponibili due gruppi del carico di lavoro, il gruppo interno e il gruppo predefinito. Un utente non può modificare un gruppo classificato come gruppo interno, ma può monitorarlo. Le richieste vengono classificate nel gruppo predefinito quando si verificano le condizioni seguenti:

  • Non è presente alcun criterio per classificare una richiesta.

  • È stato eseguito un tentativo di classificare la richiesta in un gruppo inesistente.

  • Si è verificato un errore di classificazione generale.

In Resource Governor sono inoltre disponibili istruzioni DDL per la creazione, la modifica e l'eliminazione dei gruppi del carico di lavoro. Per ulteriori informazioni, vedere DDL di Resource Governor e viste del sistema.

Classificazione

Resource Governor supporta la classificazione delle sessioni in ingresso. La classificazione è basata su un set di criteri definiti dall'utente contenuti in una funzione. I risultati della logica della funzione consentono a Resource Governor di classificare sessioni in gruppi del carico di lavoro esistenti.

Nota

Il gruppo del carico di lavoro interno è popolato con richieste per solo uso interno. Non è possibile modificare i criteri utilizzati per indirizzare tali richieste né è possibile classificare richieste nel gruppo del carico di lavoro interno.

È possibile scrivere una funzione scalare che contiene la logica utilizzata per assegnare sessioni in ingresso a un gruppo del carico di lavoro. Prima che sia possibile utilizzare tale funzione, è necessario completare le operazioni seguenti:

  • Creare e registrare la funzione utilizzando l'istruzione ALTER RESOURCE GOVERNOR. Per ulteriori informazioni, vedere ALTER RESOURCE GOVERNOR (Transact-SQL).

  • Aggiornare la configurazione di Resource Governor utilizzando l'istruzione ALTER RESOURCE GOVERNOR con il parametro RECONFIGURE.

Dopo avere creato funzione e applicato le modifiche di configurazione, la funzione di classificazione di Resource Governor utilizzerà il nome del gruppo del carico di lavoro restituito dalla funzione per inviare una nuova richiesta al gruppo del carico di lavoro appropriato.

Nota importanteImportante

Potrebbe verificarsi il timeout della sessione client se la funzione di classificazione non viene completata entro il timeout specificato per l'accesso. Il timeout di accesso è una proprietà client e, in quanto tale, il server non è a conoscenza di un timeout. Una funzione di classificazione con esecuzione prolungata può lasciare il server con connessioni orfane per periodi prolungati. È importante che vengano create funzioni di classificazione che terminano l'esecuzione prima del timeout della connessione.

La funzione definita dall'utente ha le seguenti caratteristiche e comportamenti:

  • La funzione definita dall'utente viene valutata per ogni nuova sessione, anche quando il pool di connessioni è abilitato.

  • La funzione definita dall'utente fornisce il contesto del gruppo del carico di lavoro per la sessione. Dopo che l'appartenenza a un gruppo è stata determinata, la sessione viene associata al gruppo del carico di lavoro per la durata della sessione.

  • Se la funzione definita dall'utente restituisce NULL, il valore predefinito o il nome di un gruppo non esistente, alla sessione viene fornito il contesto predefinito del gruppo del carico di lavoro. Inoltre, alla sessione viene fornito il contesto predefinito se si verifica un errore nella funzione per qualsiasi motivo.

  • La funzione deve essere definita con l'ambito del server (database master).

  • La designazione della funzione di classificazione definita dall'utente viene applicata solo dopo l'esecuzione di ALTER RESOURCE GOVERNOR RECONFIGURE.

  • È possibile definire come classificatore solo una funzione definita dall'utente alla volta.

  • La funzione di classificazione definita dall'utente non può essere eliminata o modificata a meno che non venga rimosso lo stato di classificazione.

  • In assenza di una funzione di classificazione definita dall'utente, tutte le sessioni vengono classificate nel gruppo predefinito.

  • Il gruppo del carico di lavoro restituito dalla funzione di classificazione è esterno all'ambito della restrizione relativa all'associazione allo schema. Non è possibile ad esempio eliminare una tabella, ma è possibile eliminare un gruppo del carico di lavoro.

Nota importanteImportante

Si consiglia di abilitare la connessione amministrativa dedicata nel server. Tale connessione non è soggetta alla classificazione di Resource Governor e può essere utilizzata per monitorare e risolvere i problemi relativi a una funzione di classificazione. Per ulteriori informazioni, vedere Utilizzo di una connessione amministrativa dedicata. Se per la risoluzione dei problemi non è disponibile alcuna connessione DAC, è possibile riavviare il sistema in modalità utente singolo. Sebbene tale modalità non sia soggetta alla classificazione, non consente di eseguire la diagnosi della classificazione di Resource Governor mentre quest'ultimo è in esecuzione.

Processo di classificazione

Nel contesto di Resource Governor il processo di accesso per una sessione è costituito dai passaggi seguenti:

  1. Autenticazione dell'account di accesso

  2. Esecuzione del trigger LOGON

  3. Classificazione

Quando la classificazione viene avviata, in Resource Governor viene eseguita la funzione di classificazione e il valore restituito dalla funzione viene utilizzato per inviare richieste al gruppo del carico di lavoro appropriato. Per ulteriori informazioni, vedere Considerazioni per la scrittura di una funzione di classificazione.

Nota

Informazioni sull'esecuzione della funzione di classificazione e sui trigger LOGON sono disponibili in sys.dm_exec_sessions e sys.dm_exec_requests.