

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Governatore delle risorse di Microsoft SQL Server con RDS per SQL Server
<a name="Appendix.SQLServer.Options.ResourceGovernor"></a>

Resource governor è una funzionalità di SQL Server Enterprise Edition che ti offre un controllo preciso sulle risorse delle tue istanze. Consente di impostare limiti specifici sul modo in cui i carichi di lavoro utilizzano CPU, memoria e I/O risorse fisiche. Con Resource Governor, puoi:
+ Previeni la monopolizzazione delle risorse in ambienti multi-tenant gestendo il modo in cui carichi di lavoro diversi condividono le risorse delle istanze
+ Offri prestazioni prevedibili impostando limiti e priorità di risorse specifici per diversi utenti e applicazioni

È possibile abilitare Resource Governor su un'istanza DB RDS for SQL Server esistente o nuova.

Resource Governor utilizza tre concetti fondamentali:
+ **Pool di risorse**: un contenitore che gestisce le risorse fisiche dell'istanza (CPU, memoria e I/O). Ottieni due pool integrati (interni e predefiniti) e puoi creare pool personalizzati aggiuntivi.
+ **Gruppo di carichi di** lavoro: un contenitore per sessioni di database con caratteristiche simili. Ogni gruppo di carichi di lavoro appartiene a un pool di risorse. Ottieni due gruppi di carichi di lavoro integrati (interni e predefiniti) e puoi creare gruppi di carichi di lavoro aggiuntivi personalizzati.
+ **Classificazione**: il processo che determina quale gruppo di carichi di lavoro gestisce le sessioni in entrata in base al nome utente, al nome dell'applicazione, al nome del database o al nome host.

Per ulteriori dettagli sulla funzionalità del gestore delle risorse in SQL Server, vedere [Resource Governor](https://learn.microsoft.com/en-us/sql/relational-databases/resource-governor/resource-governor?view=sql-server-ver16) nella documentazione Microsoft.

**Contents**
+ [

## Versioni e regioni supportate
](#ResourceGovernor.SupportedVersions)
+ [

## Limitazioni e consigli
](#ResourceGovernor.Limitations)
+ [

# Abilitazione del regolatore di risorse di Microsoft SQL Server per l'istanza di RDS per SQL Server
](ResourceGovernor.Enabling.md)
  + [

## Creazione del gruppo di opzioni per `RESOURCE_GOVERNOR`
](ResourceGovernor.Enabling.md#ResourceGovernor.OptionGroup)
  + [

## Aggiunta dell'opzione `RESOURCE_GOVERNOR` al gruppo di opzioni
](ResourceGovernor.Enabling.md#ResourceGovernor.Add)
  + [

## Associazione del gruppo di opzioni all'istanza database
](ResourceGovernor.Enabling.md#ResourceGovernor.Apply)
+ [

# Utilizzo del regolatore di risorse di Microsoft SQL Server per l'istanza di RDS per SQL Server
](ResourceGovernor.Using.md)
  + [

## Gestisci il pool di risorse
](ResourceGovernor.Using.md#ResourceGovernor.ManageResourcePool)
    + [

### Crea un pool di risorse
](ResourceGovernor.Using.md#ResourceGovernor.CreateResourcePool)
    + [

### Modifica il pool di risorse
](ResourceGovernor.Using.md#ResourceGovernor.AlterResourcePool)
    + [

### Elimina il pool di risorse
](ResourceGovernor.Using.md#ResourceGovernor.DropResourcePool)
  + [

## Gestisci i gruppi di carichi di lavoro
](ResourceGovernor.Using.md#ResourceGovernor.ManageWorkloadGroups)
    + [

### Crea un gruppo di carichi di lavoro
](ResourceGovernor.Using.md#ResourceGovernor.CreateWorkloadGroup)
    + [

### Modifica il gruppo di carichi di lavoro
](ResourceGovernor.Using.md#ResourceGovernor.AlterWorkloadGroup)
    + [

### Eliminare il gruppo di carichi di lavoro
](ResourceGovernor.Using.md#ResourceGovernor.DropWorkloadGroup)
  + [

## Crea e registra una funzione di classificazione
](ResourceGovernor.Using.md#ResourceGovernor.ClassifierFunction)
  + [

## Funzione Drop Classifier
](ResourceGovernor.Using.md#ResourceGovernor.DropClassifier)
  + [

## Funzione di classificazione per annullare la registrazione
](ResourceGovernor.Using.md#ResourceGovernor.DeregisterClassifier)
  + [

## Reimposta le statistiche
](ResourceGovernor.Using.md#ResourceGovernor.ResetStats)
  + [

## modifiche alla configurazione del Resource Governor
](ResourceGovernor.Using.md#ResourceGovernor.ConfigChanges)
  + [

## Associare TempDB a un pool di risorse
](ResourceGovernor.Using.md#ResourceGovernor.BindTempDB)
  + [

## Scollegare TempDB da un pool di risorse
](ResourceGovernor.Using.md#ResourceGovernor.UnbindTempDB)
  + [

## Cleanup Resource Governor
](ResourceGovernor.Using.md#ResourceGovernor.Cleanup)
+ [

## Considerazioni sull’implementazione Multi-AZ
](#ResourceGovernor.Considerations)
+ [

## Considerazioni sulle repliche di lettura
](#ResourceGovernor.ReadReplica)
+ [

# Monitora il regolatore delle risorse di Microsoft SQL Server utilizzando le visualizzazioni di sistema per l'istanza di RDS per SQL Server
](ResourceGovernor.Monitoring.md)
  + [

## Statistiche di runtime del pool di risorse
](ResourceGovernor.Monitoring.md#ResourceGovernor.ResourcePoolStats)
+ [

# Disattivazione del regolatore di risorse di Microsoft SQL Server per l'istanza di RDS per SQL Server
](ResourceGovernor.Disabling.md)
+ [

# Procedure consigliate per la configurazione del gestore delle risorse su RDS per SQL Server
](ResourceGovernor.BestPractices.md)

## Versioni e regioni supportate
<a name="ResourceGovernor.SupportedVersions"></a>

Amazon RDS supporta Resource Governor per le seguenti versioni ed edizioni di SQL Server in tutte le aree in Regioni AWS cui è disponibile RDS per SQL Server:
+ Edizioni SQL Server 2022 Developer ed Enterprise
+ SQL Server 2019 Enterprise Edition
+ SQL Server 2017 Enterprise Edition
+ SQL Server 2016 Enterprise Edition

## Limitazioni e consigli
<a name="ResourceGovernor.Limitations"></a>

Le seguenti limitazioni e raccomandazioni si applicano al gestore delle risorse:
+ Restrizioni relative all'edizione e al servizio:
  + Disponibile solo in SQL Server Enterprise Edition.
  + La gestione delle risorse è limitata al motore di database di SQL Server. Il regolatore delle risorse per Analysis Services, Integration Services e Reporting Services non è supportato.
+ Restrizioni di configurazione:
  + È necessario utilizzare le stored procedure di Amazon RDS per tutte le configurazioni.
  + Le istruzioni DDL native e le configurazioni della GUI di SQL Server Management Studio non sono supportate.
+ Parametri del pool di risorse:
  + I nomi dei pool che iniziano con `rds_` non sono supportati.
  + Le modifiche interne e predefinite al pool di risorse non sono consentite.
  + Per i pool di risorse definiti dall'utente, i seguenti parametri del pool di risorse non sono supportati:
    + `MIN_MEMORY_PERCENT`
    + `MIN_CPU_PERCENT`
    + `MIN_IOPS_PER_VOLUME`
    + `AFFINITY`
+ Parametri del gruppo di carico di lavoro:
  + I nomi dei gruppi di carico di lavoro che iniziano con `rds_` non sono supportati.
  + La modifica del gruppo di carico di lavoro interno non è consentita.
  + Per il gruppo di carichi di lavoro predefinito:
    + È possibile modificare solo il `REQUEST_MAX_MEMORY_GRANT_PERCENT` parametro.
    + Per il gruppo di carichi di lavoro predefinito, `REQUEST_MAX_MEMORY_GRANT_PERCENT` deve essere compreso tra 1 e 70.
    + Tutti gli altri parametri sono bloccati e non possono essere modificati.
  + I gruppi di carichi di lavoro definiti dall'utente consentono la modifica di tutti i parametri.
+ Limitazioni della funzione di classificazione:
  + La funzione di classificazione indirizza le connessioni a gruppi di carichi di lavoro personalizzati in base a criteri specifici (nome utente, database, host o nome dell'applicazione).
  + Supporta fino a due gruppi di carichi di lavoro definiti dall'utente con le rispettive condizioni di routing.
  + Combina il criterio con `AND` le condizioni all'interno di ciascun gruppo.
  + Richiede almeno un criterio di routing per gruppo di carico di lavoro.
  + Sono supportati solo i metodi di classificazione sopra elencati.
  + Il nome della funzione deve iniziare con`rg_classifier_`.
  + Assegnazione predefinita al gruppo se nessuna condizione corrisponde.

# Abilitazione del regolatore di risorse di Microsoft SQL Server per l'istanza di RDS per SQL Server
<a name="ResourceGovernor.Enabling"></a>

Abilita il regolatore delle risorse aggiungendo l'`RESOURCE_GOVERNOR`opzione all'istanza DB di RDS per SQL Server. Utilizzare il seguente processo:

1. Creare un nuovo gruppo di opzioni oppure utilizzare un gruppo di opzioni esistente.

1. Aggiungere l'opzione `RESOURCE_GOVERNOR` al gruppo di opzioni.

1. Associare il gruppo di opzioni a questa istanza database.

**Nota**  
L'abilitazione del regolatore delle risorse tramite un gruppo di opzioni non richiede il riavvio.

## Creazione del gruppo di opzioni per `RESOURCE_GOVERNOR`
<a name="ResourceGovernor.OptionGroup"></a>

Per abilitare Resource Governor, crea un gruppo di opzioni o modifica un gruppo di opzioni che corrisponde all'edizione e alla versione di SQL Server dell'istanza DB che intendi utilizzare. Per completare questa procedura, utilizzare Console di gestione AWS o il AWS CLI.

### Console
<a name="ResourceGovernor.OptionGroup.Console"></a>

Utilizzare la procedura seguente per creare un gruppo di opzioni per SQL Server Enterprise Edition 2022.

**Per creare il gruppo di opzioni**

1. Accedi a Console di gestione AWS e apri la console Amazon RDS all'indirizzo [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. Nel pannello di navigazione scegliere **Option groups (Gruppi di opzioni)**.

1. Seleziona **Create group** (Crea gruppo).

1. Nella finestra **Create option group (Crea gruppo di opzioni)** eseguire queste operazioni:

   1. Per **Nome**, inserisci un nome per il gruppo di opzioni che sia unico all'interno del tuo AWS account, ad esempio**resource-governor-ee-2022**. Il nome può includere solo lettere, cifre e trattini.

   1. Per **Descrizione**, immettere una breve descrizione del gruppo di opzioni, ad esempio **RESOURCE\$1GOVERNOR option group for SQL Server EE 2022**. La descrizione viene usata per la visualizzazione.

   1. Per **Engine**, scegli **sqlserver-ee**.

   1. **Per la **versione Major Engine**, scegli 16.00.**

1. Scegli **Create** (Crea).

### CLI
<a name="ResourceGovernor.OptionGroup.CLI"></a>

La procedura seguente crea un gruppo di opzioni per SQL Server Enterprise Edition 2022.

**Per creare il gruppo di opzioni**
+ Eseguire uno dei seguenti comandi.  
**Example**  

  Per Linux, macOS o Unix:

  ```
  aws rds create-option-group \
      --option-group-name resource-governor-ee-2022 \
      --engine-name sqlserver-ee \
      --major-engine-version 16.00 \
      --option-group-description "RESOURCE_GOVERNOR option group for SQL Server EE 2022"
  ```

  Per Windows:

  ```
  aws rds create-option-group ^
      --option-group-name resource-governor-ee-2022 ^
      --engine-name sqlserver-ee ^
      --major-engine-version 16.00 ^
      --option-group-description "RESOURCE_GOVERNOR option group for SQL Server EE 2022"
  ```

## Aggiunta dell'opzione `RESOURCE_GOVERNOR` al gruppo di opzioni
<a name="ResourceGovernor.Add"></a>

Quindi, usa Console di gestione AWS o AWS CLI per aggiungere l'`RESOURCE_GOVERNOR`opzione al tuo gruppo di opzioni.

### Console
<a name="ResourceGovernor.Add.Console"></a>

**Per aggiungere l'opzione RESOURCE\$1GOVERNOR**

1. Accedi a Console di gestione AWS e apri la console Amazon RDS all'indirizzo [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. Nel pannello di navigazione scegliere **Option groups (Gruppi di opzioni)**.

1. Scegli il gruppo di opzioni che hai appena creato, **resource-governor-ee-2022** in questo esempio.

1. Scegliere **Add option (Aggiungi opzione)**.

1. **In **Dettagli dell'opzione**, scegliete **RESOURCE\$1GOVERNOR** come nome dell'opzione.**

1. In **Scheduling (Pianificazione)**, scegliere se aggiungere l'opzione immediatamente o alla finestra di manutenzione successiva.

1. Scegliere **Add option (Aggiungi opzione)**.

### CLI
<a name="ResourceGovernor.Add.CLI"></a>

**Per aggiungere l’opzione `RESOURCE_GOVERNOR`**
+ Aggiungere l'opzione `RESOURCE_GOVERNOR` al gruppo di opzioni.  
**Example**  

  Per Linux, macOS o Unix:

  ```
  aws rds add-option-to-option-group \
      --option-group-name resource-governor-ee-2022 \
      --options "OptionName=RESOURCE_GOVERNOR" \
      --apply-immediately
  ```

  Per Windows:

  ```
  aws rds add-option-to-option-group ^
      --option-group-name resource-governor-ee-2022 ^
      --options "OptionName=RESOURCE_GOVERNOR" ^
      --apply-immediately
  ```

## Associazione del gruppo di opzioni all'istanza database
<a name="ResourceGovernor.Apply"></a>

Per associare il gruppo di `RESOURCE_GOVERNOR` opzioni alla tua istanza DB, usa o il. Console di gestione AWS AWS CLI

### Console
<a name="ResourceGovernor.Apply.Console"></a>

Per completare l'attivazione del Resource Governor, associa il tuo gruppo di `RESOURCE_GOVERNOR` opzioni a un'istanza DB nuova o esistente:
+ Per una nuova istanza database, associarli all'avvio dell'istanza. Per ulteriori informazioni, consulta [Creazione di un'istanza database Amazon RDS](USER_CreateDBInstance.md).
+ Per un'istanza database esistente, associarli modificando l'istanza. Per ulteriori informazioni, consulta [Modifica di un'istanza database Amazon RDS](Overview.DBInstance.Modifying.md).

### CLI
<a name="ResourceGovernor.Apply.CLI"></a>

È possibile associare il gruppo di `RESOURCE_GOVERNOR` opzioni a un'istanza DB nuova o esistente.

**Per creare un'istanza con il gruppo di `RESOURCE_GOVERNOR` opzioni**
+ Specificare lo stesso tipo di motore database e la versione principale utilizzata durante la creazione del gruppo di opzioni.  
**Example**  

  Per Linux, macOS o Unix:

  ```
  aws rds create-db-instance \
      --db-instance-identifier mytestsqlserverresourcegovernorinstance \
      --db-instance-class db.m5.2xlarge \
      --engine sqlserver-ee \
      --engine-version 16.00 \
      --license-model license-included \
      --allocated-storage 100 \
      --master-username admin \
      --master-user-password password \
      --storage-type gp2 \
      --option-group-name resource-governor-ee-2022
  ```

  Per Windows:

  ```
  aws rds create-db-instance ^
      --db-instance-identifier mytestsqlserverresourcegovernorinstance ^
      --db-instance-class db.m5.2xlarge ^
      --engine sqlserver-ee ^
      --engine-version 16.00 ^
      --license-model license-included ^
      --allocated-storage 100 ^
      --master-username admin ^
      --master-user-password password ^
      --storage-type gp2 ^
      --option-group-name resource-governor-ee-2022
  ```

**Per modificare un'istanza e associare il gruppo di opzioni `RESOURCE_GOVERNOR`**
+ Eseguire uno dei seguenti comandi.  
**Example**  

  Per Linux, macOS o Unix:

  ```
  aws rds modify-db-instance \
      --db-instance-identifier mytestinstance \
      --option-group-name resource-governor-ee-2022 \
      --apply-immediately
  ```

  Per Windows:

  ```
  aws rds modify-db-instance ^
      --db-instance-identifier mytestinstance ^
      --option-group-name resource-governor-ee-2022 ^
      --apply-immediately
  ```

# Utilizzo del regolatore di risorse di Microsoft SQL Server per l'istanza di RDS per SQL Server
<a name="ResourceGovernor.Using"></a>

Dopo aver aggiunto l'opzione Resource Governor al gruppo di opzioni, Resource Governor non è ancora attivo a livello di motore di database. Per abilitare completamente il Resource Governor, è necessario utilizzare le stored procedure di RDS per SQL Server per abilitarlo e creare gli oggetti Resource Governor necessari. Per ulteriori informazioni, consulta [Connessione all’istanza database Microsoft SQL Server](USER_ConnectToMicrosoftSQLServerInstance.md).

Innanzitutto, connettiti al database di SQL Server, quindi richiama le stored procedure RDS for SQL Server appropriate per completare la configurazione. Per istruzioni sulla connessione al tuo database, consulta [Connessione all’istanza database Microsoft SQL Server](USER_ConnectToMicrosoftSQLServerInstance.md).

Per istruzioni su come chiamare ciascuna stored procedure, consulta i seguenti argomenti:

**Topics**
+ [

## Gestisci il pool di risorse
](#ResourceGovernor.ManageResourcePool)
+ [

## Gestisci i gruppi di carichi di lavoro
](#ResourceGovernor.ManageWorkloadGroups)
+ [

## Crea e registra una funzione di classificazione
](#ResourceGovernor.ClassifierFunction)
+ [

## Funzione Drop Classifier
](#ResourceGovernor.DropClassifier)
+ [

## Funzione di classificazione per annullare la registrazione
](#ResourceGovernor.DeregisterClassifier)
+ [

## Reimposta le statistiche
](#ResourceGovernor.ResetStats)
+ [

## modifiche alla configurazione del Resource Governor
](#ResourceGovernor.ConfigChanges)
+ [

## Associare TempDB a un pool di risorse
](#ResourceGovernor.BindTempDB)
+ [

## Scollegare TempDB da un pool di risorse
](#ResourceGovernor.UnbindTempDB)
+ [

## Cleanup Resource Governor
](#ResourceGovernor.Cleanup)

## Gestisci il pool di risorse
<a name="ResourceGovernor.ManageResourcePool"></a>

### Crea un pool di risorse
<a name="ResourceGovernor.CreateResourcePool"></a>

Una volta abilitato il regolatore delle risorse nel gruppo di opzioni, è possibile creare pool di risorse personalizzati utilizzando`rds_create_resource_pool`. Questi pool consentono di allocare percentuali specifiche di CPU, memoria e IOPS a diversi carichi di lavoro.

**Utilizzo**

```
USE [msdb]
EXEC dbo.rds_create_resource_pool    
    @pool_name=value,
    @MAX_CPU_PERCENT=value,
    @CAP_CPU_PERCENT=value,
    @MAX_MEMORY_PERCENT=value,
    @MAX_IOPS_PER_VOLUME=value
```

I parametri seguenti sono obbligatori:
+ `@group_name`- È il nome di un gruppo di carichi di lavoro definito dall'utente esistente.
+ `@pool_name`- È il nome definito dall'utente per il pool di risorse. *pool\$1name*è alfanumerico, può contenere fino a 128 caratteri, deve essere univoco all'interno di un'istanza di Database Engine e deve rispettare le regole per gli identificatori del database.

I parametri seguenti sono facoltativi:
+ `@MAX_CPU_PERCENT`- Speciifica la larghezza di banda media massima della CPU ricevuta da tutte le richieste nel pool di risorse in caso di conflitto tra CPU. *value*è un numero intero con un'impostazione predefinita di 100. L'intervallo consentito per *value* è compreso tra 1 e 100.
+ `@CAP_CPU_PERCENT`- Speciifica un limite massimo per la larghezza di banda della CPU ricevuta da tutte le richieste nel pool di risorse. Limita il livello massimo di larghezza di banda della CPU in modo che sia uguale al valore specificato. *value*è un numero intero con un'impostazione predefinita di 100. L'intervallo consentito per *value* è compreso tra 1 e 100.
+ `@MAX_MEMORY_PERCENT`- Speciifica la quantità massima di memoria dell'area di lavoro per le interrogazioni che possono essere utilizzate dalle richieste in questo pool di risorse. *value*è un numero intero con un'impostazione predefinita di 100. L'intervallo consentito per *value* è compreso tra 1 e 100.
+ `@MAX_IOPS_PER_VOLUME`- Speciifica il numero massimo di I/O operazioni al secondo (IOPS) per volume del disco per consentire l'utilizzo del pool di risorse. L'intervallo consentito per *value* è compreso tra 0 e 2^31-1 (2.147.483.647). Specificare 0 per rimuovere un limite IOPS per il pool. Il valore predefinito è 0.

**Esempi**

Esempio di creazione di un pool di risorse con tutti i valori predefiniti:

```
--This creates resource pool 'SalesPool' with all default values
USE [msdb]
EXEC rds_create_resource_pool @pool_name = 'SalesPool';
     
--Apply changes
USE [msdb]
EXEC msdb.dbo.rds_alter_resource_governor_configuration;
     
--Validate configuration
select * from sys.resource_governor_resource_pools
```

Esempio di creazione di un pool di risorse con diversi parametri specificati:

```
--creates resource pool
USE [msdb]
EXEC dbo.rds_create_resource_pool    
@pool_name='analytics',
@MAX_CPU_PERCENT = 30,
@CAP_CPU_PERCENT = 40,
@MAX_MEMORY_PERCENT = 20;
            
--Apply changes
EXEC msdb.dbo.rds_alter_resource_governor_configuration;
    
--Validate configuration
select * from sys.resource_governor_resource_pools
```

### Modifica il pool di risorse
<a name="ResourceGovernor.AlterResourcePool"></a>

**Utilizzo**

```
USE [msdb]
EXEC dbo.rds_alter_resource_pool    
    @pool_name=value,
    @MAX_CPU_PERCENT=value,
    @CAP_CPU_PERCENT=value,
    @MAX_MEMORY_PERCENT=value,
    @MAX_IOPS_PER_VOLUME=value;
```

I parametri seguenti sono obbligatori:
+ `@pool_name`- È il nome di un pool di risorse definito dall'utente esistente. La modifica del pool di risorse predefinito non è consentita in Amazon RDS SQL Server.

È necessario specificare almeno uno dei parametri opzionali:
+ `@MAX_CPU_PERCENT`- Speciifica la larghezza di banda media massima della CPU ricevuta da tutte le richieste nel pool di risorse in caso di conflitto tra CPU. *value*è un numero intero con un'impostazione predefinita di 100. L'intervallo consentito per *value* è compreso tra 1 e 100.
+ `@CAP_CPU_PERCENT`- Speciifica un limite massimo per la larghezza di banda della CPU ricevuta da tutte le richieste nel pool di risorse. Limita il livello massimo di larghezza di banda della CPU in modo che sia uguale al valore specificato. *value*è un numero intero con un'impostazione predefinita di 100. L'intervallo consentito per *value* è compreso tra 1 e 100.
+ `@MAX_MEMORY_PERCENT`- Speciifica la quantità massima di memoria dell'area di lavoro per le interrogazioni che possono essere utilizzate dalle richieste in questo pool di risorse. *value*è un numero intero con un'impostazione predefinita di 100. L'intervallo consentito per *value* è compreso tra 1 e 100.
+ `@MAX_IOPS_PER_VOLUME`- Speciifica il numero massimo di I/O operazioni al secondo (IOPS) per volume del disco per consentire l'utilizzo del pool di risorse. L'intervallo consentito per *value* è compreso tra 0 e 2^31-1 (2.147.483.647). Specificare 0 per rimuovere un limite IOPS per il pool. Il valore predefinito è 0.

**Esempi**

```
--This alters resource pool
USE [msdb]
EXEC dbo.rds_alter_resource_pool    
    @pool_name='analytics',
    @MAX_CPU_PERCENT = 10,
    @CAP_CPU_PERCENT = 20,
    @MAX_MEMORY_PERCENT = 50;

--Apply changes
EXEC msdb.dbo.rds_alter_resource_governor_configuration;

--Validate configuration.
select * from sys.resource_governor_resource_pools
```

### Elimina il pool di risorse
<a name="ResourceGovernor.DropResourcePool"></a>

**Utilizzo**

```
USE [msdb]
EXEC dbo.rds_drop_resource_pool    
@pool_name=value;
```

Il parametro seguente è obbligatorio:
+ `@pool_name`- È il nome di un pool di risorse definito dall'utente esistente.

**Nota**  
L'eliminazione del pool di risorse interno o predefinito non è consentita in SQL Server.

**Esempi**

```
--This drops resource pool
USE [msdb]
EXEC dbo.rds_drop_resource_pool    
@pool_name='analytics'

--Apply changes
EXEC msdb.dbo.rds_alter_resource_governor_configuration;

--Validate configuration
select * from sys.resource_governor_resource_pools
```

## Gestisci i gruppi di carichi di lavoro
<a name="ResourceGovernor.ManageWorkloadGroups"></a>

I gruppi di carichi di lavoro, creati e gestiti con `rds_create_workload_group` e`rds_alter_workload_group`, consentono di impostare livelli di importanza, assegnazioni di memoria e altri parametri per gruppi di query.

### Crea un gruppo di carichi di lavoro
<a name="ResourceGovernor.CreateWorkloadGroup"></a>

**Utilizzo**

```
USE [msdb]
EXEC dbo.rds_create_workload_group 
@group_name = value, 
@IMPORTANCE ={ LOW | MEDIUM | HIGH }, 
@REQUEST_MAX_MEMORY_GRANT_PERCENT =value, 
@REQUEST_MAX_CPU_TIME_SEC = value , 
@REQUEST_MEMORY_GRANT_TIMEOUT_SEC = value, 
@MAX_DOP = value, 
@GROUP_MAX_REQUESTS = value, 
@pool_name = value
```

I parametri seguenti sono obbligatori:
+ `@pool_name`- È il nome di un pool di risorse esistente definito dall'utente.
+ `@group_name`- È il nome di un gruppo di carichi di lavoro definito dall'utente esistente.

I parametri seguenti sono facoltativi:
+ `@IMPORTANCE`- Speciifica l'importanza relativa di una richiesta nel gruppo di carichi di lavoro. Il valore predefinito è `MEDIUM`.
+ `@REQUEST_MAX_MEMORY_GRANT_PERCENT`- Speciifica la quantità massima di memoria dell'area di lavoro per le interrogazioni che una singola richiesta può occupare dal pool. *value*è una percentuale della dimensione del pool di risorse definita da. `MAX_MEMORY_PERCENT` Il valore predefinito è 25.
+ `@REQUEST_MAX_CPU_TIME_SEC`- Speciifica la quantità massima di tempo di CPU, in secondi, che una richiesta batch può utilizzare. *value*deve essere 0 o un numero intero positivo. L'impostazione predefinita per *value* è 0, che significa illimitato.
+ `@REQUEST_MEMORY_GRANT_TIMEOUT_SEC`- Speciifica il tempo massimo, in secondi, durante il quale una query può attendere che una concessione di memoria dalla memoria dell'area di lavoro delle interrogazioni diventi disponibile. *value*deve essere 0 o un numero intero positivo. L'impostazione predefinita di *value* 0 utilizza un calcolo interno basato sul costo della query per determinare il tempo massimo.
+ `@MAX_DOP`- Speciifica il grado massimo di parallelismo () `MAXDOP` per l'esecuzione di query parallele. L'intervallo consentito per *value* è compreso tra 0 e 64. L'impostazione predefinita per*value*, 0, utilizza l'impostazione globale.
+ `@GROUP_MAX_REQUESTS`= Speciifica il numero massimo di richieste simultanee che possono essere eseguite nel gruppo di carichi di lavoro. *value*deve essere 0 o un numero intero positivo. L'impostazione predefinita per *value* è 0 e consente un numero illimitato di richieste.
+ `@pool_name`= Associa il gruppo di carichi di lavoro al pool di risorse definito dall'utente identificato da *pool\$1name* o al `default` pool di risorse. Se *pool\$1name* non viene fornito, il gruppo di carichi di lavoro è associato al pool integrato. `default`

**Esempi**

```
--This creates workload group named 'analytics'
USE msdb;
EXEC dbo.rds_create_workload_group 
    @group_name = 'analytics',
    @IMPORTANCE = 'HIGH',
    @REQUEST_MAX_MEMORY_GRANT_PERCENT = 25, 
    @REQUEST_MAX_CPU_TIME_SEC = 0, 
    @REQUEST_MEMORY_GRANT_TIMEOUT_SEC = 0, 
    @MAX_DOP = 0, 
    @GROUP_MAX_REQUESTS = 0, 
    @pool_name = 'analytics';

--Apply changes
EXEC msdb.dbo.rds_alter_resource_governor_configuration;
  
--Validate configuration
select * from sys.resource_governor_workload_groups
```

### Modifica il gruppo di carichi di lavoro
<a name="ResourceGovernor.AlterWorkloadGroup"></a>

**Utilizzo**

```
EXEC msdb.dbo.rds_alter_workload_group
    @group_name = value,
    @IMPORTANCE = 'LOW|MEDIUM|HIGH',
    @REQUEST_MAX_MEMORY_GRANT_PERCENT = value,
    @REQUEST_MAX_CPU_TIME_SEC = value,
    @REQUEST_MEMORY_GRANT_TIMEOUT_SEC = value,
    @MAX_DOP = value,
    @GROUP_MAX_REQUESTS = value,
    @pool_name = value
```

I parametri seguenti sono obbligatori:
+ `@group_name`- È il nome del gruppo di carichi di lavoro predefinito o esistente definito dall'utente.

**Nota**  
È supportata solo la modifica `REQUEST_MAX_MEMORY_GRANT_PERCENT` dei parametri nel gruppo di carico di lavoro predefinito. Per il gruppo di carichi di lavoro predefinito, `REQUEST_MAX_MEMORY_GRANT_PERCENT` deve essere compreso tra 1 e 70. Nessun altro parametro può essere modificato nel gruppo di carico di lavoro predefinito. Tutti i parametri possono essere modificati nel gruppo di carico di lavoro definito dall'utente.

I parametri seguenti sono facoltativi:
+ `@IMPORTANCE`- Speciifica l'importanza relativa di una richiesta nel gruppo di carichi di lavoro. Il valore predefinito è MEDIUM.
+ `@REQUEST_MAX_MEMORY_GRANT_PERCENT`- Speciifica la quantità massima di memoria dell'area di lavoro per le interrogazioni che una singola richiesta può occupare dal pool. *value*è una percentuale della dimensione del pool di risorse definita da. `MAX_MEMORY_PERCENT` Il valore predefinito è 25. Su Amazon RDS, `REQUEST_MAX_MEMORY_GRANT_PERCENT` deve essere compreso tra 1 e 70.
+ `@REQUEST_MAX_CPU_TIME_SEC`- Speciifica la quantità massima di tempo di CPU, in secondi, che una richiesta batch può utilizzare. *value*deve essere 0 o un numero intero positivo. L'impostazione predefinita per *value* è 0, che significa illimitato.
+ `@REQUEST_MEMORY_GRANT_TIMEOUT_SEC`- Speciifica il tempo massimo, in secondi, durante il quale una query può attendere che una concessione di memoria dalla memoria dell'area di lavoro delle interrogazioni diventi disponibile. *value*deve essere 0 o un numero intero positivo. L'impostazione predefinita di *value* 0 utilizza un calcolo interno basato sul costo della query per determinare il tempo massimo.
+ `@MAX_DOP`- Speciifica il grado massimo di parallelismo (MAXDOP) per l'esecuzione di query parallele. L'intervallo consentito per *value* è compreso tra 0 e 64. L'impostazione predefinita per*value*, 0, utilizza l'impostazione globale.
+ `@GROUP_MAX_REQUESTS`- Speciifica il numero massimo di richieste simultanee che è possibile eseguire nel gruppo di carichi di lavoro. *value*deve essere 0 o un numero intero positivo. L'impostazione predefinita per *value* è 0 e consente un numero illimitato di richieste.
+ `@pool_name`- Associa il gruppo di carichi di lavoro al pool di risorse definito dall'utente identificato da. *pool\$1name*

**Esempi**

Esempio di modifica del gruppo di carico di lavoro predefinito REQUEST\$1MAX\$1MEMORY\$1GRANT\$1PERCENT:

```
--Modify default workload group (set memory grant cap to 10%)
USE msdb
EXEC dbo.rds_alter_workload_group    
    @group_name = 'default',
    @REQUEST_MAX_MEMORY_GRANT_PERCENT=10;
    
--Apply changes
EXEC msdb.dbo.rds_alter_resource_governor_configuration;

--Validate configuration
SELECT * FROM sys.resource_governor_workload_groups WHERE name='default';
```

Esempio di modifica di un gruppo di carichi di lavoro non predefinito:

```
EXEC msdb.dbo.rds_alter_workload_group    
    @group_name = 'analytics',
    @IMPORTANCE = 'HIGH',
    @REQUEST_MAX_MEMORY_GRANT_PERCENT = 30,
    @REQUEST_MAX_CPU_TIME_SEC = 3600,
    @REQUEST_MEMORY_GRANT_TIMEOUT_SEC = 60,
    @MAX_DOP = 4,
    @GROUP_MAX_REQUESTS = 100;

--Apply changes
EXEC msdb.dbo.rds_alter_resource_governor_configuration;
```

Esempio di spostamento di un gruppo di carichi di lavoro non predefinito in un altro pool di risorse:

```
EXEC msdb.dbo.rds_alter_workload_group    
@group_name = 'analytics',
@pool_name='abc'

--Apply changes
EXEC msdb.dbo.rds_alter_resource_governor_configuration;

--Validate configuration
select * from sys.resource_governor_workload_groups
```

### Eliminare il gruppo di carichi di lavoro
<a name="ResourceGovernor.DropWorkloadGroup"></a>

**Utilizzo**

```
EXEC msdb.dbo.rds_drop_workload_group    
@group_name = value
```

I parametri seguenti sono obbligatori:
+ `@group_name`- È il nome di un gruppo di carichi di lavoro definito dall'utente esistente.

**Esempi**

```
--Drops a Workload Group:
EXEC msdb.dbo.rds_drop_workload_group    
@group_name = 'analytics';

--Apply changes
EXEC msdb.dbo.rds_alter_resource_governor_configuration;

--Validate configuration
select * from sys.resource_governor_workload_groups
```

## Crea e registra una funzione di classificazione
<a name="ResourceGovernor.ClassifierFunction"></a>

Questa procedura crea una funzione di classificazione delle risorse nel database master che indirizza le connessioni a gruppi di carichi di lavoro personalizzati in base a criteri specifici (nome utente, database, host o nome dell'applicazione). Se il regolatore delle risorse è abilitato e nella configurazione del governatore delle risorse è specificata una funzione di classificazione, l'output della funzione determina il gruppo di carico di lavoro utilizzato per le nuove sessioni. In assenza di una funzione di classificazione, tutte le sessioni vengono classificate nel gruppo. `default`

**Funzionalità:**
+ Supporta fino a due gruppi di carichi di lavoro con le rispettive condizioni di routing.
+ Combina il criterio con le `AND` condizioni all'interno di ciascun gruppo.
+ Richiede almeno un criterio di routing per gruppo di carico di lavoro.
+ Il nome della funzione deve iniziare con. `rg_classifier_`
+ Assegnazione predefinita al gruppo se nessuna condizione corrisponde.

La funzione di classificazione presenta le caratteristiche e i comportamenti seguenti:
+ La funzione è definita nell'ambito del server (nel database principale).
+ La funzione è definita con l'associazione allo schema.
+ La funzione viene valutata per ogni nuova sessione, anche quando il pool di connessioni è abilitato.
+ La funzione restituisce il contesto del gruppo di carichi di lavoro per la sessione. La sessione viene assegnata al gruppo di carichi di lavoro restituito dal classificatore per tutta la durata della sessione.
+ Se la funzione restituisce NULL, default o il nome di un gruppo di carichi di lavoro inesistente, alla sessione viene assegnato il contesto del gruppo di carichi di lavoro predefinito. Alla sessione viene inoltre assegnato il contesto predefinito se la funzione fallisce per qualsiasi motivo.
+ È possibile creare più funzioni di classificazione. Tuttavia, SQL Server consente la registrazione di una sola funzione di classificazione alla volta.
+ La funzione di classificazione non può essere eliminata a meno che il relativo stato di classificatore non venga rimosso utilizzando la procedura di cancellazione della registrazione (`EXEC dbo.msdb.rds_alter_resource_governor_configuration @deregister_function = 1;`) che imposta il nome della funzione su NULL o un'altra funzione di classificazione non venga registrata utilizzando () `EXEC dbo.msdb.rds_alter_resource_governor_configuration @classifier_function = <function_name>;`
+ In assenza di una funzione di classificazione, tutte le sessioni vengono classificate nel gruppo predefinito.
+ Non è possibile modificare una funzione di classificazione mentre è referenziata nella configurazione del Resource Governor. Tuttavia, è possibile modificare la configurazione per utilizzare una funzione di classificazione diversa. Se desideri apportare modifiche al classificatore, valuta la possibilità di creare un paio di funzioni di classificazione. Ad esempio, è possibile creare `rg_classifier_a` e. `rg_classifier_b`

**Utilizzo**

```
EXEC msdb.dbo.rds_create_classifier_function 
@function_name = value,
@workload_group1 = value, 
@user_name1 = value,
@db_name1 = value,
@host_name1 = value, 
@app_name1 = value, 
@workload_group2 = value,
@user_name2 = value,
@db_name2 = value,
@host_name2 = value,
@app_name2 = value
```

I parametri seguenti sono obbligatori:
+ `@function_name`- Nome della funzione di classificazione. Deve iniziare con `rg_classifier_`
+ `@workload_group1`- Nome del primo gruppo di carichi di lavoro

I parametri seguenti sono facoltativi:

(Almeno uno di questi criteri deve essere specificato per il gruppo 1)
+ `@user_name1`- Nome di accesso per il gruppo 1
+ `@db_name1`- Nome del database per il gruppo 1
+ `@host_name1`- Nome host per il gruppo 1
+ `@app_name1`- Nome dell'applicazione per il gruppo 1

(Se viene specificato il gruppo 2, deve essere fornito almeno un criterio)
+ `@workload_group2`- Nome del secondo gruppo di carico di lavoro
+ `@user_name2`- Nome di accesso per il gruppo 2
+ `@db_name2`- Nome del database per il gruppo 2
+ `@host_name2`- Nome host per il gruppo 2
+ `@app_name2`- Nome dell'applicazione per il gruppo 2

**Nota**  
Gli account di sistema, i database, le applicazioni e l'host sono limitati.

**Esempi**

Esempio di base con un gruppo di carichi di lavoro:

```
/*Create a classifier to route all requests from 'PowerBI' app to workload group 
'reporting_group'*/

EXEC msdb.dbo.rds_create_classifier_function
@function_name = 'rg_classifier_a',
@workload_group1 = 'reporting_group',
@app_name1 = 'PowerBI';

--Register the classifier
EXEC msdb.dbo.rds_alter_resource_governor_configuration
@classifier_function = 'rg_classifier_a';

-- Apply changes
EXEC msdb.dbo.rds_alter_resource_governor_configuration

/*Query sys.resource_governor_configuration to validate that resource governor is enabled and is using the classifier function we created and registered*/

use master
go
SELECT OBJECT_SCHEMA_NAME(classifier_function_id) AS classifier_schema_name,
       OBJECT_NAME(classifier_function_id) AS classifier_object_name,
       is_enabled
FROM sys.resource_governor_configuration;
```

## Funzione Drop Classifier
<a name="ResourceGovernor.DropClassifier"></a>

**Utilizzo**

```
USE [msdb]
EXEC dbo.rds_drop_classifier_function
@function_name = value;
```

Il parametro seguente è obbligatorio:
+ `@function_name`- È il nome di una funzione di classificazione definita dall'utente esistente

**Esempio**

```
EXEC msdb.dbo.rds_drop_classifier_function
@function_name = 'rg_classifier_b';
```

## Funzione di classificazione per annullare la registrazione
<a name="ResourceGovernor.DeregisterClassifier"></a>

Utilizzare questa procedura per annullare la registrazione della funzione di classificazione. Dopo l'annullamento della registrazione della funzione, le nuove sessioni vengono assegnate automaticamente al gruppo di carichi di lavoro predefinito.

**Utilizzo**

```
USE [msdb]
EXEC dbo.rds_alter_resource_governor_configuration    
@deregister_function = 1;
```

Per l'annullamento della registrazione è richiesto il seguente parametro:
+ `@deregister_function`deve essere 1

**Esempio**

```
EXEC msdb.dbo.rds_alter_resource_governor_configuration 
    @deregister_function = 1;
GO

-- Apply changes
EXEC msdb.dbo.rds_alter_resource_governor_configuration;
```

## Reimposta le statistiche
<a name="ResourceGovernor.ResetStats"></a>

Le statistiche del Resource Governor sono cumulative dall'ultimo riavvio del server. Se hai bisogno di raccogliere statistiche a partire da un determinato orario, puoi reimpostarle utilizzando la seguente procedura memorizzata di Amazon RDS.

**Utilizzo**

```
USE [msdb]
EXEC dbo.rds_alter_resource_governor_configuration  
@reset_statistics = 1;
```

Per ripristinare le statistiche è necessario il seguente parametro:
+ `@reset_statistics`deve essere 1

## modifiche alla configurazione del Resource Governor
<a name="ResourceGovernor.ConfigChanges"></a>

Quando il governatore delle risorse non è abilitato, `rds_alter_resource_governor_configuration` abilita il governatore delle risorse. L'abilitazione del governatore delle risorse produce i seguenti risultati:
+ L'eventuale funzione di classificazione viene eseguita per nuove sessioni, assegnandole a gruppi di carichi di lavoro.
+ I limiti di risorse specificati nella configurazione del Resource Governor vengono rispettati e applicati.
+ I limiti di risorse specificati nella configurazione del Resource Governor vengono rispettati e applicati.
+ Le richieste esistenti prima dell'attivazione del Resource Governor potrebbero essere influenzate da eventuali modifiche alla configurazione apportate quando il Resource Governor è abilitato.
+ Le richieste esistenti, prima di abilitare Resource Governor, potrebbero essere influenzate da eventuali modifiche alla configurazione apportate quando il Resource Governor è abilitato.
+ Su RDS per SQL Server, `EXEC msdb.dbo.rds_alter_resource_governor_configuration` deve essere eseguito affinché tutte le modifiche alla configurazione del Resource Governor abbiano effetto. 

**Utilizzo**

```
USE [msdb]
EXEC dbo.rds_alter_resource_governor_configuration
```

## Associare TempDB a un pool di risorse
<a name="ResourceGovernor.BindTempDB"></a>

Puoi associare i metadati ottimizzati per la memoria tempdb a un pool di risorse specifico utilizzando `rds_bind_tempdb_metadata_to_resource_pool` Amazon RDS SQL Server versione 2019 e successive.

**Nota**  
La funzionalità di metadati tempdb ottimizzata per la memoria deve essere abilitata prima di associare i metadati tempdb al pool di risorse. Per abilitare questa funzionalità su Amazon RDS si tratta di un parametro `tempdb metadata memory-optimized` statico.

Abilita il parametro statico su Amazon RDS ed esegui un riavvio senza failover affinché il parametro abbia effetto:

```
aws rds modify-db-parameter-group \
    --db-parameter-group-name test-sqlserver-ee-2022 \
    --parameters "ParameterName='tempdb metadata memory-optimized',ParameterValue=True,ApplyMethod=pending-reboot"
```

**Utilizzo**

```
USE [msdb]
EXEC dbo.rds_bind_tempdb_metadata_to_resource_pool  
@pool_name=value;
```

Il parametro seguente è obbligatorio:
+ `@pool_name`- È il nome di un pool di risorse esistente definito dall'utente.

**Nota**  
Questa modifica richiede anche il riavvio del servizio sql senza failover per avere effetto, anche se la funzionalità di metadati TempDB ottimizzata per la memoria è già abilitata.

## Scollegare TempDB da un pool di risorse
<a name="ResourceGovernor.UnbindTempDB"></a>

Scollega i metadati ottimizzati per la memoria tempdb da un pool di risorse.

**Nota**  
Questa modifica richiede anche il riavvio del servizio sql senza failover per avere effetto

**Utilizzo**

```
USE [msdb]
EXEC dbo.rds_unbind_tempdb_metadata_from_resource_pool
```

## Cleanup Resource Governor
<a name="ResourceGovernor.Cleanup"></a>

Questa procedura consente di pulire tutti gli oggetti associati dopo aver rimosso l'opzione Resource Governor dal gruppo di opzioni. Ciò disabilita il regolatore delle risorse, ripristina le impostazioni predefinite del gruppo di carico di lavoro predefinito, rimuove i gruppi di carichi di lavoro personalizzati, i pool di risorse e le funzioni di classificazione.

**Caratteristiche principali**
+ Riporta il gruppo di carichi di lavoro predefinito alle impostazioni predefinite
+ Disattiva il regolatore delle risorse
+ Rimuove i gruppi di carichi di lavoro personalizzati
+ Rimuove i pool di risorse personalizzati
+ Elimina le funzioni del classificatore
+ Rimuove l'associazione del pool di risorse tempdb se abilitata

**Importante**  
Questa pulizia può avere esito negativo se ci sono sessioni attive nel gruppo di carico di lavoro. Attendi il termine delle sessioni attive o interrompi le sessioni attive in base alle tue esigenze aziendali. Si consiglia di eseguirlo durante la finestra di manutenzione.   
Questa pulizia può avere esito negativo se un pool di risorse è stato associato a tempdb e il riavvio senza failover non è ancora stato effettuato. Se in precedenza hai associato un pool di risorse a tempdb o hai scollegato un pool di risorse da tempdb, esegui un riavvio senza failover per rendere effettiva la modifica. Si consiglia di eseguirlo durante la finestra di manutenzione.

**Utilizzo**

```
USE [msdb]
EXEC dbo.rds_cleanup_resource_governor
```

## Considerazioni sull’implementazione Multi-AZ
<a name="ResourceGovernor.Considerations"></a>

RDS per SQL Server replica il Resource Governor su un'istanza secondaria in una distribuzione Multi-AZ. È possibile verificare quando la modifica e quando il nuovo Resource Governor è stato sincronizzato per l'ultima volta con l'istanza secondaria.

Utilizza la seguente query per verificare `last_sync_time` la replica:

```
SELECT * from msdb.dbo.rds_fn_server_object_last_sync_time();
```

Nei risultati della query, se l'ora di sincronizzazione è passata dall'ora di aggiornamento del Resource Governor o dall'ora di creazione, il Resource Governor si sincronizza con quella secondaria.

Per eseguire un failover manuale del DB per confermare la replica del Resource Governor, attendi prima `last_sync_time` l'aggiornamento. Quindi, procedi con il failover Multi-AZ.

## Considerazioni sulle repliche di lettura
<a name="ResourceGovernor.ReadReplica"></a>
+ Per le repliche di SQL Server nella stessa regione dell'istanza DB di origine, utilizza lo stesso gruppo di opzioni dell'origine. Le modifiche al gruppo di opzioni si propagano immediatamente alle repliche, indipendentemente dalle relative finestre di manutenzione.
+ Quando si crea una replica di SQL Server interregionale, RDS crea un gruppo di opzioni dedicato a tale replica.
+ Non puoi rimuovere una replica tra regioni SQL Server dal suo gruppo di opzioni dedicato. Nessun'altra istanza database può usare il gruppo di opzioni dedicato per una replica tra regioni SQL Server.
+ L'opzione Resource Governor è costituita da opzioni non replicate. È possibile aggiungere o rimuovere le opzioni non replicate da un gruppo di opzioni dedicato.
+ Quando promuovi una replica di lettura tra regioni SQL Server, tale replica si comporta come qualsiasi altra istanza database SQL Server, compresa la gestione delle opzioni.

**Nota**  
Quando si utilizza Resource governor su una replica di lettura, è necessario assicurarsi manualmente che Resource Governor sia stato configurato sulla replica di lettura utilizzando le stored procedure di Amazon RDS dopo l'aggiunta dell'opzione al gruppo di opzioni. Le configurazioni di Resource Governor non si replicano automaticamente nella replica di lettura. Inoltre, il carico di lavoro sulla replica di lettura è in genere diverso rispetto all'istanza principale. Pertanto, si consiglia di applicare la configurazione delle risorse alla replica in base al carico di lavoro e al tipo di istanza. Puoi eseguire queste procedure memorizzate di Amazon RDS sulla replica di lettura in modo indipendente per configurare il regolatore delle risorse sulla replica di lettura.

# Monitora il regolatore delle risorse di Microsoft SQL Server utilizzando le visualizzazioni di sistema per l'istanza di RDS per SQL Server
<a name="ResourceGovernor.Monitoring"></a>

Le statistiche di Resource Governor sono cumulative dall'ultimo riavvio del server. Se hai bisogno di raccogliere statistiche a partire da un determinato orario, puoi reimpostarle utilizzando la seguente procedura memorizzata di Amazon RDS:

```
EXEC msdb.dbo.rds_alter_resource_governor_configuration  
@reset_statistics = 1;
```

## Statistiche di runtime del pool di risorse
<a name="ResourceGovernor.ResourcePoolStats"></a>

Per ogni pool di risorse, Resource Governor tiene traccia dell'utilizzo della CPU e della memoria, out-of-memory degli eventi, delle concessioni di memoria, degli I/O e di altre statistiche. [Per ulteriori informazioni, vedere sys.dm\$1resource\$1governor\$1resource\$1pools.](https://learn.microsoft.com/en-us/sql/relational-databases/system-dynamic-management-views/sys-dm-resource-governor-resource-pools-transact-sql?view=sql-server-ver17)

La seguente query restituisce un sottoinsieme di statistiche disponibili per tutti i pool di risorse:

```
SELECT rp.pool_id,
       rp.name AS resource_pool_name,
       wg.workload_group_count,
       rp.statistics_start_time,
       rp.total_cpu_usage_ms,
       rp.target_memory_kb,
       rp.used_memory_kb,
       rp.out_of_memory_count,
       rp.active_memgrant_count,
       rp.total_memgrant_count,
       rp.total_memgrant_timeout_count,
       rp.read_io_completed_total,
       rp.write_io_completed_total,
       rp.read_bytes_total,
       rp.write_bytes_total,
       rp.read_io_stall_total_ms,
       rp.write_io_stall_total_ms
FROM sys.dm_resource_governor_resource_pools AS rp
OUTER APPLY (
            SELECT COUNT(1) AS workload_group_count
            FROM sys.dm_resource_governor_workload_groups AS wg
            WHERE wg.pool_id = rp.pool_id
            ) AS wg;
```

# Disattivazione del regolatore di risorse di Microsoft SQL Server per l'istanza di RDS per SQL Server
<a name="ResourceGovernor.Disabling"></a>

Quando si disabilita il regolatore delle risorse su RDS per SQL Server, il servizio interrompe la gestione delle risorse del carico di lavoro. Prima di disabilitare Resource Governor, esamina in che modo ciò influisce sulle connessioni e sulle configurazioni del database.

La disabilitazione del Resource Governor produce i seguenti risultati:
+ La funzione di classificazione non viene eseguita all'apertura di una nuova connessione.
+ Le nuove connessioni vengono classificate automaticamente nel gruppo di carichi di lavoro predefinito.
+ Tutte le impostazioni esistenti del gruppo di carichi di lavoro e del pool di risorse vengono ripristinate ai valori predefiniti.
+ Quando vengono raggiunti i limiti, non viene attivato alcun evento.
+ È possibile apportare modifiche alla configurazione del Resource Governor, ma le modifiche non hanno effetto finché non viene abilitato il Resource Governor.

Per disabilitare il regolatore delle risorse, rimuovi l'`RESOURCE_GOVERNOR`opzione dal relativo gruppo di opzioni.

## Console
<a name="ResourceGovernor.Disabling.Console"></a>

La procedura seguente rimuove l'opzione `RESOURCE_GOVERNOR`.

**Per rimuovere l'opzione RESOURCE\$1GOVERNOR dal relativo gruppo di opzioni**

1. Accedi a Console di gestione AWS e apri la console Amazon RDS all'indirizzo [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. Nel pannello di navigazione scegliere **Option groups (Gruppi di opzioni)**.

1. Scegliere il gruppo di opzioni con l'opzione `RESOURCE_GOVERNOR` (`resource-governor-ee-2022` negli esempi precedenti).

1. Scegliere **Delete option (Elimina opzione)**.

1. **In **Opzioni di eliminazione**, scegli **RESOURCE\$1GOVERNOR** tra le Opzioni da eliminare.**

1. In **Apply immediately** (Applica immediatamente), scegli **Yes** (Sì) per eliminare immediatamente l'opzione oppure **No** per eliminarla nella finestra di manutenzione successiva.

1. Scegli **Elimina**.

## CLI
<a name="ResourceGovernor.Disabling.CLI"></a>

La procedura seguente rimuove l'opzione `RESOURCE_GOVERNOR`.

**Per rimuovere l'opzione RESOURCE\$1GOVERNOR dal relativo gruppo di opzioni**
+ Eseguire uno dei seguenti comandi.  
**Example**  

  Per Linux, macOS o Unix:

  ```
  aws rds remove-option-from-option-group \
      --option-group-name resource-governor-ee-2022 \
      --options RESOURCE_GOVERNOR \
      --apply-immediately
  ```

  Per Windows:

  ```
  aws rds remove-option-from-option-group ^
      --option-group-name resource-governor-ee-2022 ^
      --options RESOURCE_GOVERNOR ^
      --apply-immediately
  ```

# Procedure consigliate per la configurazione del gestore delle risorse su RDS per SQL Server
<a name="ResourceGovernor.BestPractices"></a>

Per controllare il consumo di risorse, RDS per SQL Server supporta il regolatore di risorse di Microsoft SQL Server. Le seguenti best practice consentono di evitare problemi di configurazione comuni e ottimizzare le prestazioni del database.

1. La configurazione del Resource Governor è archiviata nel `master` database. Si consiglia di salvare sempre una copia degli script di configurazione del Resource Governor separatamente.

1. La funzione di classificazione prolunga il tempo di elaborazione dell'accesso, pertanto si consiglia di evitare una logica complessa nel classificatore. Una funzione eccessivamente complessa può causare ritardi di accesso o timeout di connessione, comprese le sessioni di automazione di Amazon RDS. Ciò può influire sulla capacità dell'automazione di Amazon RDS di monitorare lo stato dell'istanza. Pertanto, è sempre consigliabile testare la funzione di classificazione in un ambiente di preproduzione prima di implementarla negli ambienti di produzione.

1. Evita di impostare valori elevati (superiori `REQUEST_MAX_MEMORY_GRANT_PERCENT` a 70) per i gruppi di carichi di lavoro, poiché ciò può impedire all'istanza del database di allocare memoria sufficiente per altre query simultanee, con possibili errori di timeout di concessione della memoria (Errore 8645). Al contrario, l'impostazione di questo valore troppo basso (inferiore a 1) o su 0 potrebbe impedire la corretta esecuzione delle query che richiedono spazio di lavoro di memoria (come quelle che implicano operazioni di ordinamento o hash) in gruppi di carichi di lavoro definiti dall'utente. RDS applica questi limiti limitando i valori tra 1 e 70 nei gruppi di carichi di lavoro predefiniti.

1. Per associare tempdb al pool di risorse, dopo aver associato i metadati tempdb ottimizzati per la memoria a un pool, il pool potrebbe raggiungere l'impostazione massima e qualsiasi query utilizzata potrebbe non riuscire con errori. `tempdb` out-of-memory In determinate circostanze, SQL Server potrebbe interrompersi se si verifica un errore. out-of-memory Per ridurre la possibilità che ciò accada, imposta il pool `MAX_MEMORY_PERCENT` di memoria su un valore elevato.