Diagnosticar e solucionar problemas de alta CPU em Banco de Dados SQL do Azure
Aplica-se a: Banco de Dados SQL do Azure
O Banco de Dados SQL do Azure fornece ferramentas integradas para identificar as causas do alto uso da CPU e otimizar o desempenho da carga de trabalho. Use essas ferramentas para solucionar problemas de alto uso da CPU durante a ocorrência ou depois do incidente. Você também pode habilitar o ajuste automático para reduzir proativamente o uso da CPU ao longo do tempo no seu banco de dados. Este artigo ensina a diagnosticar e solucionar problemas de alto uso da CPU com ferramentas integradas do Banco de Dados SQL do Azure e explica quando adicionar recursos de CPU.
Compreender a contagem de vCore
Ao diagnosticar um incidente de alto uso da CPU, é importante entender o número de vCores (núcleos virtuais) disponíveis para o banco de dados. Um vCore é equivalente a uma CPU lógica. O número de vCores ajuda a entender os recursos de CPU disponíveis para o banco de dados.
Identificar a contagem de vCore no portal do Azure
Você pode identificar rapidamente a contagem de vCore de um banco de dados no portal do Azure se estiver usando uma camada de serviço baseada em vCore com a camada de computação provisionada. Nesse caso, o tipo de preço listado do banco de dados na página Visão geral vai incluir a contagem de vCore. Por exemplo, o tipo de preço de um banco de dados pode ser "Uso Geral: série Standard (Gen5), 16 vCores".
Para bancos de dados na camada de computação sem servidor, a contagem de vCore sempre será equivalente à configuração de vCore máxima. A contagem de VCore será mostrada no tipo de preço listado do banco de dados na página Visão geral. Por exemplo, o tipo de preço de um banco de dados pode ser "Uso Geral: sem servidor, série Standard (Gen5), 16 vCores".
Se você estiver usando um banco de dados no modelo de compra baseado em DTU, precisará usar Transact-SQL para consultar a contagem de vCores do banco de dados.
Identificar a contagem de vCore com o Transact-SQL
Você pode identificar a contagem de vCore atual dos bancos de dados com o Transact-SQL. É possível executar o Transact-SQL em Banco de Dados SQL do Azure com o SQL Server Management Studio (SSMS), o Azure Data Studio ou o Editor de consultas do portal do Azure.
Conecte o banco de dados e execute a seguinte consulta:
SELECT
COUNT(*) as vCores
FROM sys.dm_os_schedulers
WHERE status = N'VISIBLE ONLINE';
GO
Identificar as causas do alto uso da CPU
Você pode medir e analisar o uso da CPU no portal do Azure, usando as ferramentas interativas do Repositório de Consultas no SSMS e as consultas do Transact-SQL no SSMS e no Azure Data Studio.
O portal do Azure e o Repositório de Consultas mostram estatísticas de execução, como métricas de CPU, para consultas concluídas. Se você está enfrentando um incidente de alto uso da CPU que pode ser causado por uma ou mais consultas de longa duração em andamento, identifique as consultas em execução no momento com o Transact-SQL.
As causas comuns de alto uso incomum ou novo uso da CPU são:
- Novas consultas na carga de trabalho que usam uma grande quantidade de CPU.
- Aumento na frequência das consultas em execução regular.
- Regressão do plano de consulta, incluindo regressão devido a problemas de PSP (plano sensível a parâmetros), resultando em uma ou mais consultas que consomem mais CPU.
- Aumento significativo na compilação ou recompilação de planos de consulta.
- Bancos de dados em que as consultas usam paralelismo excessivo.
Para entender o que está causando o incidente de alto uso da CPU, identifique quando o alto uso da CPU está ocorrendo no banco de dados e as principais consultas que estão usando a CPU no momento.
Examine:
- As novas consultas que estão consumindo grande parte da CPU aparecem na carga de trabalho ou você está vendo um aumento na frequência de consultas em execução regular? Use um dos seguintes métodos para investigar. Procure as consultas com histórico limitado (novas consultas) e a frequência de execução de consultas com histórico mais longo.
- Algumas consultas na carga de trabalho estão usando mais CPU por execução do que no passado? Se sim, o plano de execução de consulta mudou? Essas consultas podem ter problemas de PSP (plano sensível a parâmetros). Use uma das técnicas a seguir para investigar. Procure as consultas que têm vários planos de execução de consulta com variação significativa no uso da CPU:
- Há evidências de que uma grande quantidade de compilação ou recompilação esteja ocorrendo? Consulte as consultas compiladas com mais frequência pelo hash de consulta e revise a frequência com que elas são compiladas.
- As consultas estão usando paralelismo excessivo? Consulte a configuração com escopo do banco de dados MAXDOP e revise a contagem de vCore. O paralelismo excessivo geralmente ocorre em bancos de dados onde MAXDOP é definido como
0
com uma contagem de vCore superior a oito.
Observação
O Banco de Dados SQL do Azure requer recursos de computação para implementar funcionalidades de serviço principais, como alta disponibilidade e recuperação de desastre, backup e restauração de banco de dados, monitoramento, Repositório de Consultas, ajuste automático etc. O uso desses recursos de computação pode ser particularmente perceptível em bancos de dados com contagem de vCore baixa ou bancos de dados em pools elásticos densos. Saiba mais em Gerenciamento de recursos no Banco de dados SQL do Azure.
Revisar as métricas de uso da CPU e as principais consultas relacionadas no portal do Azure
Use o portal do Azure para rastrear várias métricas de CPU, como a porcentagem de CPU disponível usada pelo banco de dados ao longo do tempo. O portal do Azure combina métricas de CPU com informações do Repositório de Consultas do banco de dados, o que permite identificar quais consultas consumiram a CPU no banco de dados em um determinado momento.
Siga estas etapas para encontrar métricas de porcentagem da CPU.
- Navegue até o banco de dados no portal do Azure.
- Em Desempenho Inteligente no menu esquerdo, escolha Análise de Desempenho de Consultas.
O modo de exibição padrão da Análise de Desempenho de Consultas mostra 24 horas de dados. O uso da CPU é mostrado como uma porcentagem do total de CPU disponível usada no banco de dados.
As cinco principais consultas em execução nesse período são exibidas em barras verticais acima do gráfico de uso da CPU. Selecione uma faixa de tempo no gráfico ou use o menu Personalizar para ver períodos de tempo específicos. Você também pode aumentar o número de consultas exibidas.
Selecione cada ID de consulta que exibe a CPU alta para abrir os detalhes da consulta. Os detalhes incluem texto de consulta com o histórico de desempenho da consulta. Analise se a CPU aumentou recentemente para a consulta.
Anote a ID da consulta para investigar ainda mais o plano de consulta usando o Repositório de Consultas na seção a seguir.
Revisar os planos de consulta das principais consultas identificadas no portal do Azure
Siga estas etapas para usar uma ID de consulta nas ferramentas interativas do Repositório de Consultas do SSMS e examinar o plano de execução da consulta ao longo do tempo.
- Abra o SSMS.
- Conecte o Banco de Dados SQL do Azure no Pesquisador de Objetos.
- Expanda o nó do banco de dados no Pesquisador de Objetos.
- Expanda a pasta Repositório de Consultas.
- Abra o painel Consultas Rastreadas.
- Insira a ID da consulta na caixa Rastreamento de consulta na parte superior esquerda da tela e pressione Enter.
- Se necessário, selecione Configurar para ajustar o intervalo de tempo de acordo com a hora em que o alto uso da CPU estava ocorrendo.
A página mostra os planos de execução e as métricas relacionadas à consulta nas últimas 24 horas.
Identificar consultas em execução no momento com o Transact-SQL
O Transact-SQL permite identificar consultas em execução no momento com o tempo de CPU que elas usaram até agora. Você também pode usar o Transact-SQL para consultar o uso recente da CPU em seu banco de dados, as principais consultas por CPU e as consultas compiladas com mais frequência.
É possível consultar as métricas de CPU com o SQL Server Management Studio (SSMS), o Azure Data Studio ou o Editor de consultas do portal do Azure. Quando você usar o SSMS ou o Azure Data Studio, abra uma nova janela de consulta e conecte-a ao banco de dados (não ao banco de dados master
).
Encontre as consultas em execução com planos de uso e execução da CPU executando a seguinte consulta. O tempo da CPU é retornado em milissegundos.
SELECT
req.session_id,
req.status,
req.start_time,
req.cpu_time AS 'cpu_time_ms',
req.logical_reads,
req.dop,
s.login_name,
s.host_name,
s.program_name,
object_name(st.objectid,st.dbid) 'ObjectName',
REPLACE (REPLACE (SUBSTRING (st.text,(req.statement_start_offset/2) + 1,
((CASE req.statement_end_offset WHEN -1 THEN DATALENGTH(st.text)
ELSE req.statement_end_offset END - req.statement_start_offset)/2) + 1),
CHAR(10), ' '), CHAR(13), ' ') AS statement_text,
qp.query_plan,
qsx.query_plan as query_plan_with_in_flight_statistics
FROM sys.dm_exec_requests as req
JOIN sys.dm_exec_sessions as s on req.session_id=s.session_id
CROSS APPLY sys.dm_exec_sql_text(req.sql_handle) as st
OUTER APPLY sys.dm_exec_query_plan(req.plan_handle) as qp
OUTER APPLY sys.dm_exec_query_statistics_xml(req.session_id) as qsx
ORDER BY req.cpu_time desc;
GO
Essa consulta retorna duas cópias do plano de execução. A coluna query_plan
contém o plano de execução de sys.dm_exec_query_plan. Essa versão do plano de consulta contém apenas estimativas de contagem de linhas e não contém estatísticas de execução.
Se a coluna query_plan_with_in_flight_statistics
retornar um plano de execução, este plano fornecerá mais informações. A coluna query_plan_with_in_flight_statistics
retorna dados de sys.dm_exec_query_statistics_xml, que inclui estatísticas de execução "em andamento", como o número real de linhas retornadas até agora por uma consulta em execução no momento.
Analisar métricas de uso da CPU na última hora
A consulta a seguir de sys.dm_db_resource_stats
retorna o uso médio da CPU em intervalos de 15 segundos durante a última hora, praticamente.
SELECT
end_time,
avg_cpu_percent,
avg_instance_cpu_percent
FROM sys.dm_db_resource_stats
ORDER BY end_time DESC;
GO
É importante não se concentrar apenas na coluna avg_cpu_percent
. A coluna avg_instance_cpu_percent
inclui a CPU usada pelo usuário e pelas cargas de trabalho internas. Quando avg_instance_cpu_percent
está perto de 100%, os recursos da CPU são saturados. Nesse caso, solucione os problemas de alto uso de CPU se a taxa de transferência do aplicativo for insuficiente ou a latência de consulta for alta.
Saiba mais em Gerenciamento de recursos no Banco de dados SQL do Azure.
Revise os exemplos em sys.dm_db_resource_stats para obter mais consultas.
Consultar as 15 principais consultas recentes por uso da CPU
O Repositório de Consultas rastreia estatísticas de execução, inclusive o uso da CPU, para consultas. A consulta a seguir retorna as 15 principais consultas executadas nas últimas 2 horas, classificadas pelo uso da CPU. O tempo da CPU é retornado em milissegundos.
WITH AggregatedCPU AS
(SELECT
q.query_hash,
SUM(count_executions * avg_cpu_time / 1000.0) AS total_cpu_ms,
SUM(count_executions * avg_cpu_time / 1000.0)/ SUM(count_executions) AS avg_cpu_ms,
MAX(rs.max_cpu_time / 1000.00) AS max_cpu_ms,
MAX(max_logical_io_reads) max_logical_reads,
COUNT(DISTINCT p.plan_id) AS number_of_distinct_plans,
COUNT(DISTINCT p.query_id) AS number_of_distinct_query_ids,
SUM(CASE WHEN rs.execution_type_desc='Aborted' THEN count_executions ELSE 0 END) AS aborted_execution_count,
SUM(CASE WHEN rs.execution_type_desc='Regular' THEN count_executions ELSE 0 END) AS regular_execution_count,
SUM(CASE WHEN rs.execution_type_desc='Exception' THEN count_executions ELSE 0 END) AS exception_execution_count,
SUM(count_executions) AS total_executions,
MIN(qt.query_sql_text) AS sampled_query_text
FROM sys.query_store_query_text AS qt
JOIN sys.query_store_query AS q ON qt.query_text_id=q.query_text_id
JOIN sys.query_store_plan AS p ON q.query_id=p.query_id
JOIN sys.query_store_runtime_stats AS rs ON rs.plan_id=p.plan_id
JOIN sys.query_store_runtime_stats_interval AS rsi ON rsi.runtime_stats_interval_id=rs.runtime_stats_interval_id
WHERE
rs.execution_type_desc IN ('Regular', 'Aborted', 'Exception') AND
rsi.start_time>=DATEADD(HOUR, -2, GETUTCDATE())
GROUP BY q.query_hash),
OrderedCPU AS
(SELECT *,
ROW_NUMBER() OVER (ORDER BY total_cpu_ms DESC, query_hash ASC) AS RN
FROM AggregatedCPU)
SELECT *
FROM OrderedCPU AS OD
WHERE OD.RN<=15
ORDER BY total_cpu_ms DESC;
GO
Essa consulta se agrupa pelo valor de hash da consulta. Se você encontrar um valor alto na coluna number_of_distinct_query_ids
, investigue se uma consulta executada com frequência não está corretamente parametrizada. As consultas não parametrizadas podem ser compiladas em cada execução, o que consome CPU significativa e afeta o desempenho do Repositório de Consultas.
Para saber mais sobre uma consulta individual, anote o hash da consulta e use-o para identificar o uso da CPU e o plano de consulta de um determinado hash de consulta.
Consultar as consultas compiladas com mais frequência por hash de consulta
A compilação de um plano de consulta é um processo intensivo da CPU. O Banco de Dados SQL do Azure armazena planos em cache na memória para reutilização. Algumas consultas podem ser compiladas com frequência quando não são parametrizadas ou se as dicas RECOMPILE forçam a recompilação.
O Repositório de Consultas rastreia o número de vezes que as consultas são compiladas. Execute a seguinte consulta para identificar as 20 principais consultas no Repositório de Consultas por contagem de compilação, junto com o número médio de compilações por minuto:
SELECT TOP (20)
query_hash,
MIN(initial_compile_start_time) as initial_compile_start_time,
MAX(last_compile_start_time) as last_compile_start_time,
CASE WHEN DATEDIFF(mi,MIN(initial_compile_start_time), MAX(last_compile_start_time)) > 0
THEN 1.* SUM(count_compiles) / DATEDIFF(mi,MIN(initial_compile_start_time),
MAX(last_compile_start_time))
ELSE 0
END as avg_compiles_minute,
SUM(count_compiles) as count_compiles
FROM sys.query_store_query AS q
GROUP BY query_hash
ORDER BY count_compiles DESC;
GO
Para saber mais sobre uma consulta individual, anote o hash da consulta e use-o para identificar o uso da CPU e o plano de consulta de um determinado hash de consulta.
Identificar o uso da CPU e o plano de consulta de um determinado hash de consulta
Execute a seguinte consulta para encontrar a ID de consulta individual, o texto de consulta e os planos de execução de consulta de um determinado query_hash
. O tempo da CPU é retornado em milissegundos.
Substitua o valor da variável @query_hash
por um query_hash
válido da carga de trabalho.
declare @query_hash binary(8);
SET @query_hash = 0x6557BE7936AA2E91;
with query_ids as (
SELECT
q.query_hash,
q.query_id,
p.query_plan_hash,
SUM(qrs.count_executions) * AVG(qrs.avg_cpu_time)/1000. as total_cpu_time_ms,
SUM(qrs.count_executions) AS sum_executions,
AVG(qrs.avg_cpu_time)/1000. AS avg_cpu_time_ms
FROM sys.query_store_query q
JOIN sys.query_store_plan p on q.query_id=p.query_id
JOIN sys.query_store_runtime_stats qrs on p.plan_id = qrs.plan_id
WHERE q.query_hash = @query_hash
GROUP BY q.query_id, q.query_hash, p.query_plan_hash)
SELECT qid.*,
qt.query_sql_text,
p.count_compiles,
TRY_CAST(p.query_plan as XML) as query_plan
FROM query_ids as qid
JOIN sys.query_store_query AS q ON qid.query_id=q.query_id
JOIN sys.query_store_query_text AS qt on q.query_text_id = qt.query_text_id
JOIN sys.query_store_plan AS p ON qid.query_id=p.query_id and qid.query_plan_hash=p.query_plan_hash
ORDER BY total_cpu_time_ms DESC;
GO
Essa consulta retorna uma linha de cada variação de um plano de execução do query_hash
em todo o histórico do Repositório de Consultas. Os resultados são classificados pelo tempo total da CPU.
Usar ferramentas interativas do Repositório de Consultas para rastrear o histórico do uso da CPU
Se você preferir usar ferramentas gráficas, siga estas etapas e use as ferramentas interativas do Repositório de Consultas no SSMS.
- Abra o SSMS e conecte-se ao banco de dados no Pesquisador de Objetos.
- Expanda o nó do banco de dados no Pesquisador de Objetos
- Expanda a pasta Repositório de Consultas.
- Abra o painel Consumo de Recurso Geral.
O tempo total da CPU do banco de dados no último mês em milissegundos é mostrado na parte inferior esquerda do painel. No modo de exibição padrão, o tempo da CPU é agregado por dia.
Selecione Configurar no canto superior direito do painel para selecionar outro período. Também é possível alterar a unidade de agregação. Por exemplo, você pode optar por ver os dados em um intervalo de datas específico e agregar os dados por hora.
Usar ferramentas interativas do Repositório de Consultas para identificar as principais consultas por tempo de CPU
Selecione uma barra no gráfico para analisar as consultas em execução em um período específico. O painel Principais Consultas de Consumo de Recursos é aberto. Ou abra Principais Consultas de Consumo de Recursos no nó do Repositório de Consultas em seu banco de dados no Pesquisador de Objetos diretamente.
No modo de exibição padrão, o painel Principais Consultas de Consumo de Recursos mostra consultas por Duração (ms). Às vezes, a duração pode ser menor do que o tempo da CPU: as consultas que usam o paralelismo podem usar muito mais tempo de CPU do que a duração geral. A duração também pode ser maior do que o tempo da CPU se os tempos de espera são significativos. Para ver consultas por tempo de CPU, selecione o menu suspenso Métrica na parte superior esquerda do painel e escolha Tempo da CPU (ms).
Cada barra no quadrante superior esquerdo representa uma consulta. Selecione uma barra para ver os detalhes dessa consulta. O quadrante superior direito da tela mostra o numero de planos de execução no Repositório de Consultas referente a essa consulta e os mapeia de acordo com o momento em que foram executados e com a quantidade usada da métrica selecionada. Selecione cada ID do Plano para controlar qual plano de execução de consulta é exibido na metade inferior da tela.
Observação
Para saber como interpretar as exibições do Repositório de Consultas e as formas que aparecem na exibição Principais Consumidores de Recursos, consulte Melhores práticas com o Repositório de Consultas
Reduzir o uso da CPU
Parte da sua abordagem de solução de problemas inclui saber mais sobre as consultas identificadas na seção anterior. Para reduzir o uso da CPU, você pode ajustar índices, modificar os padrões dos seus aplicativos e ajustar consultas e configurações relacionadas à CPU no banco de dados.
- Se você descobriu que há novas consultas consumindo muito a CPU na carga de trabalho, confirme se os índices dessas consultas foram otimizados. Você pode ajustar os índices manualmente ou reduzir o uso da CPU com ajuste automático de índice. Avalie se a configuração do grau máximo de paralelismo está correta para a carga de trabalho aumentada.
- Se você descobriu que a contagem geral de execuções de consultas é maior do que costumava ser, ajuste os índices das consultas que consomem mais CPU e faça o ajuste automático do índice. Avalie se a configuração do grau máximo de paralelismo está correta para a carga de trabalho aumentada.
- Se você encontrou consultas na carga de trabalho com problemas de PSP (plano sensível a parâmetros), faça a correção automática do plano (forçar plano). Você também pode forçar manualmente um plano no Repositório de Consultas ou ajustar o Transact-SQL para que a consulta resulte em um plano de consulta consistentemente de alto desempenho.
- Se você encontrou evidências de que uma grande quantidade de compilação ou recompilação está ocorrendo, ajuste as consultas para que elas sejam corretamente parametrizadas ou não exijam dicas de recompilamento.
- Se você descobriu que as consultas estão usando paralelismo excessivo, ajuste o grau máximo de paralelismo.
Considere as seguintes estratégias nesta seção.
Reduzir o uso da CPU com ajuste automático de índice
O ajuste de índice efetivo reduz o uso da CPU para muitas consultas. Índices otimizados reduzem as leituras lógicas e físicas de uma consulta. Geralmente, isso diminui o trabalho da consulta.
O Banco de Dados SQL do Azure oferece o gerenciamento automático de índices para cargas de trabalho em réplicas primárias. O gerenciamento automático de índice usa o aprendizado de máquina para monitorar a carga de trabalho e otimizar índices não clusterizados baseados em disco de armazenamento de rowstore no banco de dados.
Revise as recomendações de desempenho, como as recomendações de índice, no portal do Azure. Você pode aplicar essas recomendações manualmente ou habilitar a opção de ajuste automático CREATE INDEX para criar e verificar o desempenho de novos índices em seu banco de dados.
Reduzir o uso da CPU com a correção de plano automática (forçar plano)
Outra causa comum de incidentes de alto uso da CPU é a regressão de escolha do plano de execução. O Banco de Dados SQL do Azure oferece a opção de ajuste automático de forçar plano para identificar regressões em planos de execução de consultas em cargas de trabalho em réplicas primárias. Quando esse recurso de ajuste automático está habilitado, o Banco de Dados SQL do Azure testa se forçar um plano de execução de consulta resulta em um desempenho aprimorado confiável nas consultas com regressão do plano de execução.
Se o banco de dados foi criado depois de março de 2020, a opção de ajuste automático de forçar plano foi habilitada automaticamente. Se o banco de dados foi criado antes dessa data, talvez você queira habilitar a opção de ajuste automático de forçar plano.
Ajustar índices manualmente
Use os métodos descritos em Identificar as causas do alto uso da CPU e descubra planos de consulta para as suas consultas que consomem mais CPU. Esses planos de execução ajudarão você a identificar e adicionar índices não clusterizados para acelerar suas consultas.
Cada índice não clusterizado baseado em disco de armazenamento no banco de dados exige espaço de armazenamento e deve ser mantido pelo mecanismo do SQL. Quando possível, modifique os índices em vez de adicionar novos índices e garanta que os novos índices reduzam o uso da CPU. Para ver uma visão geral dos índices não clusterizados, confira Diretrizes de criação de índice não clusterizado.
Para algumas cargas de trabalho, os índices columnstore podem ser a melhor opção para reduzir a CPU de consultas de leitura frequentes. Confira Índices columnstore: diretrizes para ver recomendações de alto nível sobre cenários em que os índices de armazenamento de colunas podem ser adequados.
Ajustar as configurações de banco de dados, aplicativo e consultas
Ao examinar suas principais consultas, você pode encontrar antipadrões de aplicativo, como texto complexo, cargas de trabalho que se beneficiariam de fragmentação e design de acesso a banco de dados inferior. Para cargas de trabalho com muita leitura, use réplicas somente leitura para descarregar cargas de trabalho de consulta somente leitura e armazenamento em cache de camada de aplicativo como estratégias de longo prazo para dimensionar dados de leitura frequentes.
Você também pode optar por ajustar manualmente a CPU superior usando consultas identificadas na carga de trabalho. As opções de ajuste manual incluem a reescrita de instruções Transact-SQL, forçar planos no Repositório de Consultas e aplicar dicas de consulta.
Se você identificar casos em que as consultas às vezes usam um plano de execução que não seja ideal para o desempenho, revise as soluções em consultas com problemas de PSP (plano sensível a parâmetros)
Se você identificar consultas não parametrizadas com um alto número de planos, parametrize essas consultas, declarando totalmente os tipos de dados do parâmetro, incluindo comprimento e precisão. Para isso, modifique as consultas, criando um guia de plano para forçar a parametrização de uma consulta específica, ou habilite a parametrização forçada no nível do banco de dados.
Se você identificar consultas com altas taxas de compilação, identifique o que causa a compilação frequente. A causa mais comum de compilação frequente são as dicas RECOMPILE. Sempre que possível, identifique quando a dica RECOMPILE
foi adicionada e qual problema ela foi destinada a resolver. Investigue se uma solução alternativa de ajuste de desempenho pode ser implementada para fornecer um desempenho consistente para consultas em execução com frequência sem uma dica RECOMPILE
.
Reduzir o uso da CPU ajustando o grau máximo de paralelismo
A configuração do MAXDOP (grau máximo de paralelismo) controla o paralelismo dentro da consulta no mecanismo do banco de dados. Valores mais altos de MAXDOP geralmente resultam em mais threads paralelos por consulta e execução de consulta mais rápida.
Em alguns casos, um grande número de consultas paralelas em execução ao mesmo tempo pode provocar a lentidão da carga de trabalho e aumentar o uso da CPU. O paralelismo excessivo ocorre com mais frequência em bancos de dados com um grande número de vCores, em que o MAXDOP é definido como um número alto ou como zero. Quando o MAXDOP está definido como 0, o mecanismo de banco de dados define o número de agendadores a serem usados por threads paralelos para o número total de núcleos lógicos ou 64, o que for menor.
Você pode identificar a configuração do grau máximo de paralelismo do seu banco de dados com o Transact-SQL. Conecte o banco de dados com o SSMS ou o Azure Data Studio e execute a seguinte consulta:
SELECT
name,
value,
value_for_secondary,
is_value_default
FROM sys.database_scoped_configurations
WHERE name=N'MAXDOP';
GO
Experimente fazer pequenas alterações na configuração MAXDOP no nível do banco de dados ou modifique as consultas problemáticas individuais para que usem um MAXDOP não padrão usando uma dica de consulta. Para obter mais informações, confira os exemplos em configurar o grau máximo de paralelismo.
Quando adicionar recursos de CPU
Você pode descobrir que as consultas e índices da carga de trabalho estão ajustadas corretamente ou que o ajuste de desempenho requer alterações que não podem ser feitas no curto prazo devido a processos internos ou a outros motivos. Adicionar mais recursos de CPU pode ser benéfico para esses bancos de dados. Você pode dimensionar os recursos de banco de dados com tempo de inatividade mínimo.
Você pode adicionar mais recursos de CPU ao Banco de Dados SQL do Azure configurando a contagem de vCores ou a configuração de hardware dos bancos de dados usando o modelo de compra de vCore.
No modelo de compra baseado em DTU, você pode elevar a camada de serviço e aumentar o número de DTUs (unidades de transação do banco de dados). A DTU representa uma medida misturada de CPU, memória, leituras e gravações. Um benefício do modelo de compra vCore é que ele permite um controle mais granular sobre o hardware em uso e o número de vCores. Você pode migrar o Banco de Dados SQL do Azure do modelo baseado em DTU para o modelo baseado em vCore para mudar de modelo de compra.
Conteúdo relacionado
Saiba mais sobre o monitoramento e o ajuste de desempenho do Banco de Dados SQL do Azure nos seguintes artigos:
- Monitoramento do desempenho do Banco de Dados SQL do Azure e da Instância Gerenciada de SQL usando a exibição de gerenciamento dinâmico
- Guia de arquitetura e design de índices do SQL Server
- Habilite o ajuste automático para monitorar consultas e melhorar o desempenho da carga de trabalho
- Guia de arquitetura de processamento de consultas
- Melhores prática com o Repositório de Consultas
- Tipos detectáveis de gargalos de desempenho de consulta no Banco de Dados SQL do Azure
- Analisar e evitar deadlocks no Banco de Dados SQL do Azure