Classificazione del carico di lavoro per il pool SQL dedicato in Azure Synapse Analytics

Questo articolo illustra il processo di classificazione del carico di lavoro per assegnare un gruppo di carico di lavoro e la priorità alle richieste in ingresso con pool SQL dedicati in Azure Synapse.

Classificazione

La classificazione della gestione del carico di lavoro consente di applicare i criteri del carico di lavoro alle richieste tramite l'assegnazione di classi di risorse e priorità.

Benché esistano molti modi per classificare i carichi di lavoro dei data warehouse, la classificazione più semplice e comune è il caricamento e l'esecuzione di query. I dati vengono caricati tramite istruzioni INSERT, UPDATE e DELETE. Le query sui dati vengono eseguite con istruzioni SELECT. Una soluzione di data warehousing avrà spesso un criterio del carico di lavoro per l'attività di caricamento, come l'assegnazione di una classe di risorse superiore con più risorse. Un criterio del carico di lavoro diverso può essere applicato alle query, ad esempio un'importanza inferiore rispetto alle attività di caricamento.

È anche possibile sottoclassificare i carichi di lavoro di caricamento e query. La sottoclassificazione offre un maggiore controllo sui carichi di lavoro. Ad esempio, i carichi di lavoro delle query possono essere costituiti da aggiornamenti del cubo, query del dashboard o query ad hoc. È possibile classificare ognuno di questi carichi di lavoro delle query con diverse classi di risorse o impostazioni di importanza. Anche il caricamento può trarre vantaggio dalla sottoclassificazione. Le trasformazioni di grandi dimensioni possono essere assegnate a classi di risorse maggiori. È possibile specificare una maggiore importanza per garantire che i dati sulle vendite chiave siano caricati prima dei dati meteorologici o di un feed di dati sui social media.

Non tutte le istruzioni vengono classificate dal momento che non richiedono risorse o importanza per influenzare l'esecuzione. Le istruzioni BEGIN, COMMIT e ROLLBACK TRANSACTION e i comandi DBCC non sono classificati.

Processo di classificazione

Al momento la classificazione per il pool SQL dedicato si ottiene assegnando gli utenti a un ruolo con una classe di risorse corrispondente assegnata tramite sp_addrolemember. La possibilità di caratterizzare le richieste oltre un account di accesso a una classe di risorse è limitata con questa funzionalità. È ora disponibile un metodo più completo per la classificazione con la sintassi CREATE WORKLOAD CLASSIFIER. Con questa sintassi, gli utenti del pool SQL dedicato possono assegnare la priorità e la quantità di risorse di sistema assegnate a una richiesta tramite il parametro workload_group.

Ponderazione della classificazione

Come parte del processo di classificazione, è stata eseguita la ponderazione per determinare quale gruppo di carico di lavoro è assegnato. La ponderazione è basata sui criteri seguenti:

Parametro di classificatore Peso
MEMBERNAME:USER 64
MEMBERNAME:ROLE 32
WLM_LABEL 16
WLM_CONTEXT 8
START_TIME/END_TIME 4

Il parametro membername è obbligatorio. Tuttavia, se il nome membro specificato è un utente del database anziché un ruolo del database, la ponderazione per l'utente è superiore e quindi viene scelto il classificatore.

Se un utente è membro di più ruoli con diverse classi di risorse assegnate o corrispondenti in più classificatori, all'utente verrà attribuita l'assegnazione della classe di risorse più elevata. Questo comportamento è coerente con il comportamento di assegnazione della classe di risorse esistente.

Nota

La classificazione dei comportamenti delle identità gestite differisce tra il pool SQL dedicato nelle aree di lavoro di Azure Synapse e il pool SQL dedicato autonomo (in precedenza SQL Data Warehouse). Mentre l'istanza gestita del pool SQL dedicato autonomo mantiene l'identità assegnata, per le aree di lavoro di Azure Synapse l'istanza gestita viene eseguita come dbo. Questa impostazione non può essere modificata. Il ruolo dbo per impostazione predefinita è classificato in smallrc. La creazione di un classificatore per il ruolo dbo consente di assegnare le richieste a un gruppo di carico di lavoro diverso da smallrc. Se dbo da solo è troppo generico per la classificazione e ha un impatto più ampio, prendere in considerazione l'uso di una classificazione basata su etichetta, sessione o tempo insieme alla classificazione del ruolo dbo.

Classificatori di sistema

La classificazione del carico di lavoro include classificatori del carico di lavoro di sistema. I classificatori di sistema eseguono il mapping delle appartenenze dei ruoli della classe di risorse esistenti alle allocazioni di risorse della classe di risorse con priorità normale. I classificatori di sistema non possono essere eliminati. Per visualizzare i classificatori di sistema, è possibile eseguire la query seguente:

SELECT * FROM sys.workload_management_workload_classifiers where classifier_id <= 12

Combinazione di assegnazioni di classi di risorse con classificatori

I classificatori di sistema creati per conto dell'utente forniscono un percorso semplice per eseguire la migrazione alla classificazione del carico di lavoro. L'uso dei mapping dei ruoli della classe di risorse con precedenza di classificazione può causare errori di classificazione quando si inizia a creare nuovi classificatori con importanza.

Prendi in considerazione lo scenario seguente:

  • Un data warehouse esistente ha un utente del database DBAUser assegnato al ruolo della classe di risorse largerc. L'assegnazione della classe di risorse è stata eseguita con sp_addrolemember.
  • Il data warehouse viene ora aggiornato con la gestione del carico di lavoro.
  • Per testare la nuova sintassi di classificazione, il ruolo del database DBARole (di cui DBAUser è membro), ha un classificatore creato per i quali esegue il mapping a mediumrc e priorità elevata.
  • Quando DBAUser accede ed esegue una query, la query verrà assegnata a largerc. Poiché un utente ha la precedenza sull'appartenenza a un ruolo.

Per semplificare la risoluzione dei problemi di classificazione errata, è consigliabile rimuovere i mapping dei ruoli della classe di risorse durante la creazione di classificatori del carico di lavoro. Il codice seguente restituisce le appartenenze ai ruoli della classe di risorse esistenti. Eseguire sp_droprolemember per ogni nome membro restituito dalla classe di risorse corrispondente.

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;

Passaggi successivi