AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 47237
Accepted
Lumpy
Lumpy
Asked: 2013-07-30 10:16:02 +0800 CST2013-07-30 10:16:02 +0800 CST 2013-07-30 10:16:02 +0800 CST

Precisa entender o erro de execução de consulta paralela

  • 772

Hoje experimentamos uma degradação no desempenho em nosso servidor sql de produção. Durante o tempo em que isso ocorreu, registramos vários "The query processor could not start the necessary thread resources for parallel query execution"erros. A leitura que fiz sugere que isso tem a ver com quantas CPUs usar ao executar uma consulta complexa. No entanto, quando verifiquei durante a interrupção, nosso arquivo CPU Utilization was only at 7%. Existe alguma outra coisa que isso poderia estar se referindo também que eu ainda não encontrei? Este é um provável culpado da degradação do desempenho ou estou perseguindo um arenque vermelho?

Meus valores sp_configure para isso são os seguintes:

name                                minimum maximum config_value run_value
cost threshold for parallelism      0       32767   5            5
sql-server sql-server-2008-r2
  • 2 2 respostas
  • 33427 Views

2 respostas

  • Voted
  1. Best Answer
    Kin Shah
    2013-07-30T12:00:42+08:002013-07-30T12:00:42+08:00

    Alguns meses atrás, enfrentei uma situação semelhante em que a configuração MAXDOP era padrão e uma consulta de fuga esgotou todos os threads de trabalho.

    Como Remus apontou, isso é chamado de inanição de thread de trabalho .

    Haverá um despejo de memória criado em seu servidor quando essa condição ocorrer.

    Se você estiver em 2008R2 + SP1 e superior, sys.dm_server_memory_dumpstambém fornecerá o local do arquivo de despejo.

    Agora voltando ao problema:

    Existe 1 thread de monitor de agendador por nó NUMA e, como você tem 2 nós NUMA, haverá 2 threads de monitor de agendador que são responsáveis ​​​​pela verificação de integridade de todos os agendadores a cada 60 segundos para esse nó NUMA específico, certificando-se de que o agendador está travado ou não.

    Cada vez que uma nova solicitação de trabalho é retirada da fila de trabalho do agendador, o contador de processos de trabalho é incrementado. Portanto, se o agendador tiver uma solicitação de trabalho enfileirada e não tiver processado uma das solicitações de trabalho em 60 segundos, o agendador será considerado travado.

    Devido a uma consulta de fuga ou paralelismo extensivo, surge uma condição de threads de trabalho começarem esgotados, pois todos os threads são ocupados por essa única consulta de fuga ou bloqueio prolongado excessivo e nenhum trabalho pode ser feito a menos que o processo ofensivo seja morto.

    Sua melhor aposta é primeiro ajustar sua configuração de Grau Máximo de Paralelismo . O padrão 0 significa que o SQL Server pode usar todas as CPUs disponíveis para processamento paralelo e esgotar todos os threads de trabalho.

    Há muitas razões que podem levar à exaustão de threads de trabalho:

    • Extensas cadeias de bloqueio longas fazendo com que o SQL Server fique sem threads de trabalho
    • Paralelismo extensivo também levando à exaustão de threads de trabalho
    • Extensa espera por qualquer tipo de "bloqueio" - spinlocks, travas. Um spinlock órfão é um exemplo.

    Consulte minha resposta aqui que mostrará como você pode calcular o valor MAXDOP para sua instância de servidor.

    Além disso, recomendo que você comece a coletar informações de estatísticas de espera sobre sua instância do servidor de banco de dados.

    • 26
  2. Remus Rusanu
    2013-07-30T10:40:06+08:002013-07-30T10:40:06+08:00

    Pode haver várias razões. O mais provável é que você estava sem trabalhadores. Veja max_worker_threads. A condição é chamada de 'travamento do trabalhador'. Os trabalhadores podem ser roubados por vários meios (nenhum dos quais resultaria em alta utilização da CPU, btw), como ter muitos pedidos bloqueados ou fazer coisas estúpidas no CLR (por exemplo, solicitações HTTP).

    O sintoma que você vê é a vítima do problema, não a causa. Não podemos recomendar uma solução sem conhecer a causa. Você precisa coletar contadores de desempenho, DMVs e verificar o ERRORLOG para obter mais informações.

    • 13

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Conceder acesso a todas as tabelas para um usuário

    • 5 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve