CREATE WORKLOAD GROUP (Transact-SQL)CREATE WORKLOAD GROUP (Transact-SQL)

APLICA-SE A: simSQL Server nãoBanco de Dados SQL do Azure nãoAzure Synapse Analytics (SQL DW) nãoParallel Data Warehouse APPLIES TO: yesSQL Server noAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Cria um grupo de carga de trabalho do Administrador de recursos e o associa a um pool de recursos do Administrador de recursos.Creates a Resource Governor workload group and associates the workload group with a Resource Governor resource pool. O Resource Governor não está disponível em todas as edições do MicrosoftMicrosoftSQL ServerSQL Server.Resource Governor is not available in every edition of MicrosoftMicrosoftSQL ServerSQL Server. Para obter uma lista de recursos com suporte nas edições do SQL ServerSQL Server, consulte Recursos com suporte nas edições do SQL Server 2016.For a list of features that are supported by the editions of SQL ServerSQL Server, see Features Supported by the Editions of SQL Server 2016.

Ícone de link do tópico Convenções da sintaxe Transact-SQL.Topic link icon Transact-SQL Syntax Conventions.

SintaxeSyntax

CREATE WORKLOAD GROUP group_name
[ WITH
    ( [ 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 ] )
 ]
[ USING {
    [ pool_name | "default" ]
    [ [ , ] EXTERNAL external_pool_name | "default" ] ]
    } ]
[ ; ]

ArgumentosArguments

group_name group_name
É o nome definido pelo usuário do grupo de carga de trabalho.Is the user-defined name for the workload group. group_name é alfanumérico, pode ter até 128 caracteres, precisa ser exclusivo em uma instância do SQL ServerSQL Server e precisa estar em conformidade com as regras para identificadores.group_name is alphanumeric, can be up to 128 characters, must be unique within an instance of SQL ServerSQL Server, and must comply with the rules for identifiers.

IMPORTANCE = { LOW | MEDIUM | HIGH }IMPORTANCE = { LOW | MEDIUM | HIGH }
Especifica a importância relativa de uma solicitação no grupo de carga de trabalho.Specifies the relative importance of a request in the workload group. A importância é uma das seguintes, com MEDIUM sendo o padrão:Importance is one of the following, with MEDIUM being the default:

  • LOWLOW
  • MEDIUM (padrão)MEDIUM (default)
  • HIGHHIGH

Observação

Internamente, cada configuração de importância é armazenada como um número usado para cálculos.Internally each importance setting is stored as a number that is used for calculations.

IMPORTANCE é local para o pool de recursos; grupos de cargas de trabalho de importâncias diferentes no mesmo pool de recursos afetam uns aos outros, mas não afetam grupos de cargas de trabalho em outro pool de recursos.IMPORTANCE is local to the resource pool; workload groups of different importance inside the same resource pool affect each other, but do not affect workload groups in another resource pool.

REQUEST_MAX_MEMORY_GRANT_PERCENT = value REQUEST_MAX_MEMORY_GRANT_PERCENT = value
Especifica o máximo de memória que uma única solicitação pode usar do pool.Specifies the maximum amount of memory that a single request can take from the pool. valor é um percentual relativo ao tamanho do pool de recursos especificado por MAX_MEMORY_PERCENT.value is a percentage relative to the resource pool size specified by MAX_MEMORY_PERCENT.

value é um inteiro até SQL Server 2017 (14.x)SQL Server 2017 (14.x) e um flutuante que começa com SQL Server 2019 (15.x)SQL Server 2019 (15.x).value is an integer up to SQL Server 2017 (14.x)SQL Server 2017 (14.x) and a float starting with SQL Server 2019 (15.x)SQL Server 2019 (15.x). O valor padrão é 25.Default value is 25. O intervalo permitido para value é de 1 a 100.The allowed range for value is from 1 through 100.

Observação

A quantidade especificada se refere apenas à memória de concessão de execução da consulta.The amount specified only refers to query execution grant memory.

Importante

A configuração de value como 0 impede a execução de consultas com as operações SORT e HASH JOIN em grupos de cargas de trabalho definidos pelo usuário.Setting value to 0 prevents queries with SORT and HASH JOIN operations in user-defined workload groups from running.

Não é recomendável definir value com um valor maior que 70, pois o servidor poderá não conseguir separar memória livre suficiente se outras consultas simultâneas estiverem sendo executadas.It is not recommended to set value greater than 70 because the server may be unable to set aside enough free memory if other concurrent queries are running. Isso pode eventualmente levar ao erro 8645, tempo limite da consulta excedido.This may eventually lead to query time-out error 8645.

Observação

Se os requisitos de memória de consulta excederem o limite especificado por esse parâmetro, o servidor fará o seguinte:If the query memory requirements exceed the limit that is specified by this parameter, the server does the following:

  • Para grupos de cargas de trabalho definidos pelo usuário, o servidor tenta reduzir o grau de paralelismo da consulta, até que o requisito de memória caia abaixo do limite, ou até que o grau de paralelismo seja igual a 1.For user-defined workload groups, the server tries to reduce the query degree of parallelism until the memory requirement falls under the limit, or until the degree of parallelism equals 1. Se o requisito de memória de consulta ainda for maior que o limite, ocorrerá o erro 8657.If the query memory requirement is still greater than the limit, error 8657 occurs.

  • Para grupos de cargas de trabalho internos e padrão, o servidor permite que a consulta obtenha a memória necessária.For internal and default workload groups, the server permits the query to obtain the required memory.

Esteja ciente de que ambos os casos estarão sujeitos ao erro de tempo limite 8645 se a memória física do servidor for insuficiente.Be aware that both cases are subject to time-out error 8645 if the server has insufficient physical memory.

REQUEST_MAX_CPU_TIME_SEC = value REQUEST_MAX_CPU_TIME_SEC = value
Especifica o tempo máximo de CPU, em segundos, que uma solicitação pode usar.Specifies the maximum amount of CPU time, in seconds, that a request can use. value precisa ser 0 ou um inteiro positivo.value must be 0 or a positive integer. A configuração padrão de value é 0, o que significa ilimitado.The default setting for value is 0, which means unlimited.

Observação

Por padrão, o Resource Governor não impedirá a continuação de uma solicitação se o tempo máximo for excedido.By default, Resource Governor will not prevent a request from continuing if the maximum time is exceeded. Porém, um evento será gerado.However, an event will be generated. Para obter mais informações, consulte Classe de evento CPU Threshold Exceeded.For more information, see CPU Threshold Exceeded Event Class.

Importante

Começando com o SQL Server 2016 (13.x)SQL Server 2016 (13.x) SP2 e SQL Server 2017 (14.x)SQL Server 2017 (14.x) CU3 e usando o sinalizador de rastreamento 2422, o Resource Governor anulará uma solicitação quando o tempo máximo for excedido.Starting with SQL Server 2016 (13.x)SQL Server 2016 (13.x) SP2 and SQL Server 2017 (14.x)SQL Server 2017 (14.x) CU3, and using trace flag 2422, Resource Governor will abort a request when the maximum time is exceeded.

REQUEST_MEMORY_GRANT_TIMEOUT_SEC = value REQUEST_MEMORY_GRANT_TIMEOUT_SEC = value
Especifica o tempo máximo, em segundos, que uma consulta pode esperar pela disponibilização de uma concessão de memória (memória do buffer do trabalho).Specifies the maximum time, in seconds, that a query can wait for a memory grant (work buffer memory) to become available. value precisa ser 0 ou um inteiro positivo.value must be 0 or a positive integer. A configuração padrão de value, 0, usa um cálculo interno baseado no custo da consulta para determinar o tempo máximo.The default setting for value, 0, uses an internal calculation based on query cost to determine the maximum time.

Observação

Nem sempre uma consulta falha quando o tempo limite de concessão de memória é atingido.A query does not always fail when memory grant time-out is reached. A consulta falhará somente se houver muitas consultas simultâneas em execução.A query will only fail if there are too many concurrent queries running. Caso contrário, a consulta poderá obter apenas a concessão de memória mínima, resultando em uma queda no desempenho de consulta.Otherwise, the query may only get the minimum memory grant, resulting in reduced query performance.

MAX_DOP = value MAX_DOP = value
Especifica o grau máximo de paralelismo (MAXDOP) para execução de consulta paralela.Specifies the maximum degree of parallelism (MAXDOP) for parallel query execution. value precisa ser 0 ou um inteiro positivo.value must be 0 or a positive integer. O intervalo permitido para value é de 0 a 64.The allowed range for value is from 0 through 64. A configuração padrão para value, 0, usa a configuração global.The default setting for value, 0, uses the global setting. MAX_DOP é tratado como segue:MAX_DOP is handled as follows:

Observação

O grupo de cargas de trabalho do MAX_DOP substitui a configuração de servidor para o grau máximo de paralelismo e a configuração no escopo do banco de dados do MAXDOP.Workload group MAX_DOP overrides the server configuration for max degree of parallelism and the MAXDOP database scoped configuration.

Dica

Para fazer isso no nível da consulta, use a dica de consulta do MAXDOP.To accomplish this at the query level, use the MAXDOP query hint. Definir o grau máximo de paralelismo como uma dica de consulta funciona, desde que não exceda o grupo de carga de trabalho do MAX_DOP.Setting the maximum degree of parallelism as a query hint is effective as long as it does not exceed the workload group MAX_DOP. Se o valor de dica de consulta do MAXDOP ultrapassar o valor configurado no Resource Governor, o Mecanismo de Banco de Dados do SQL ServerSQL Server Database Engine usará o valor MAX_DOP do Resource Governor.If the MAXDOP query hint value exceeds the value that is configured by using the Resource Governor, the Mecanismo de Banco de Dados do SQL ServerSQL Server Database Engine uses the Resource Governor MAX_DOP value. A dica de consulta do MAXDOP sempre substitui a configuração de servidor para o grau máximo de paralelismo.The MAXDOP query hint always overrides the server configuration for max degree of parallelism.

Para fazer isso no nível do banco de dados, use a configuração com escopo no banco de dados do MAXDOP.To accomplish this at the database level, use the MAXDOP database scoped configuration.

Para fazer isso no nível do servidor, use o MAXDOP (grau máximo de paralelismo) na opção de configuração do servidor.To accomplish this at the server level, use the max degree of parallelism (MAXDOP) server configuration option.

GROUP_MAX_REQUESTS = value GROUP_MAX_REQUESTS = value
Especifica o número máximo de solicitações simultâneas permitido para execução no grupo de carga de trabalho.Specifies the maximum number of simultaneous requests that are allowed to execute in the workload group. value precisa ser 0 ou um inteiro positivo.value must be a 0 or a positive integer. A configuração padrão de valor é 0 e permite solicitações ilimitadas.The default setting for value is 0, and allows unlimited requests. Quando as solicitações simultâneas máximas são alcançadas, um usuário nesse grupo pode fazer logon, mas é colocado em um estado de espera até que as solicitações simultâneas sejam ignoradas abaixo do valor especificado.When the maximum concurrent requests are reached, a user in that group can log in, but is placed in a wait state until concurrent requests are dropped below the value specified.

USING { pool_name | "default" }USING { pool_name | "default" }
Associa o grupo de carga de trabalho ao pool de recursos definido pelo usuário, identificado por pool_name.Associates the workload group with the user-defined resource pool identified by pool_name. Na realidade, isso coloca o grupo de carga de trabalho no pool de recursos.This in effect puts the workload group in the resource pool. Se pool_name não for fornecido ou se o argumento USING não for usado, o grupo de carga de trabalho será colocado no pool padrão predefinido do Resource Governor.If pool_name is not provided, or if the USING argument is not used, the workload group is put in the predefined Resource Governor default pool.

"default" é uma palavra reservada e, quando usada com USING, deve ficar entre aspas ("") ou colchetes ([])."default" is a reserved word and when used with USING, must be enclosed by quotation marks ("") or brackets ([]).

Observação

Grupos de cargas de trabalho e pools de recursos predefinidos usam nomes em letras minúsculas, como "default".Predefined workload groups and resource pools all use lower case names, such as "default". Isso deve ser levado em consideração nos servidores que usam ordenação com diferenciação de maiúsculas e minúsculas.This should be taken into account for servers that use case-sensitive collation. Os servidores com ordenação sem diferenciação de maiúsculas e minúsculas, como SQL_Latin1_General_CP1_CI_AS, tratarão "default" e "Default" da mesma maneira.Servers with case-insensitive collation, such as SQL_Latin1_General_CP1_CI_AS, will treat "default" and "Default" as the same.

EXTERNAL external_pool_name | "padrão"EXTERNAL external_pool_name | "default"
Aplica-se ao: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) até SQL ServerSQL Server).Applies to: SQL ServerSQL Server ( SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL ServerSQL Server).

O grupo de carga de trabalho pode especificar um pool de recursos externo.Workload group can specify an external resource pool. Você pode definir um grupo de carga de trabalho e associá-lo a dois pools:You can define a workload group and associate with 2 pools:

RemarksRemarks

Quando REQUEST_MEMORY_GRANT_PERCENT é usado, a criação de índice tem permissão para usar mais memória do workspace do que a concedida inicialmente, para melhorar o desempenho.When REQUEST_MEMORY_GRANT_PERCENT is used, index creation is allowed to use more workspace memory than what is initially granted for improved performance. Esse tratamento especial tem o suporte do Administrador de Recursos no SQL ServerSQL Server.This special handling is supported by Resource Governor in SQL ServerSQL Server. Porém, a concessão inicial e qualquer concessão de memória adicional estão limitadas pelas configurações de pool de recursos e de grupo de carga de trabalho.However, the initial grant and any additional memory grant are limited by resource pool and workload group settings.

O limite de MAX_DOP é definido por tarefa.The MAX_DOP limit is set per task. Não é um limite por solicitação ou por consulta.It is not a per request or per query limit. Isso significa que, durante uma execução de consulta paralela, uma solicitação única pode gerar várias tarefas que são atribuídas a um agendador.This means that during a parallel query execution, a single request can spawn multiple tasks which are assigned to a scheduler. Para saber mais, confira o Guia de arquitetura de threads e tarefas.For more information, see the Thread and Task Architecture Guide.

Quando MAX_DOP for usado e uma consulta for marcada como serial em tempo de compilação, ela não poderá ser revertida a paralela em tempo de execução, independentemente do grupo de carga de trabalho ou da definição de configuração do servidor.When MAX_DOP is used and a query is marked as serial at compile time, it cannot be changed back to parallel at run time regardless of the workload group or server configuration setting. Depois de configurar o MAX_DOP, ele só poderá ser reduzido devido à pressão de memória.After MAX_DOP is configured, it can only be lowered due to memory pressure. A reconfiguração do grupo de carga de trabalho não é visível durante a espera na fila de concessão de memória.Workload group reconfiguration is not visible while waiting in the grant memory queue.

Criação de índice em uma tabela particionadaIndex Creation on a Partitioned Table

A memória consumida pela criação de índice na tabela particionada não alinhada é proporcional ao número de partições envolvidas.The memory consumed by index creation on non-aligned partitioned table is proportional to the number of partitions involved. Se a memória total necessária exceder o limite por consulta REQUEST_MAX_MEMORY_GRANT_PERCENT imposto pela configuração de grupo de cargas de trabalho do Resource Governor, poderá ocorrer uma falha na criação do índice.If the total required memory exceeds the per-query limit REQUEST_MAX_MEMORY_GRANT_PERCENT imposed by the Resource Governor workload group setting, this index creation may fail to execute. Como o grupo de carga de trabalho "padrão" permite que uma consulta exceda o limite por consulta com o mínimo de memória necessária, o usuário talvez possa executar a mesma criação de índice no grupo de carga de trabalho "padrão" caso o pool de recursos "padrão" tenha memória total suficiente configurada para executar tal consulta.Because the "default" workload group allows a query to exceed the per-query limit with the minimum required memory, the user may be able to run the same index creation in "default" workload group, if the "default" resource pool has enough total memory configured to run such query.

PermissõesPermissions

Requer a permissão CONTROL SERVER.Requires CONTROL SERVER permission.

ExemploExample

Crie um grupo de carga de trabalho chamado newReports, que usa as configurações padrão do Resource Governor e está no pool padrão desse Resource Governor.Create a workload group named newReports which uses the Resource Governor default settings, and is in the Resource Governor default pool. O exemplo especifica o pool default, mas isso não é necessário.The example specifies the default pool, but this is not required.

CREATE WORKLOAD GROUP newReports
    USING "default" ;
GO

Consulte TambémSee Also