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 / 97650
Accepted
usr
usr
Asked: 2015-04-13 06:11:33 +0800 CST2015-04-13 06:11:33 +0800 CST 2015-04-13 06:11:33 +0800 CST

O que exatamente o SQL Server 2014 pode executar no modo de lote?

  • 772

Quando um índice columnstore está sendo usado em uma consulta, o SQL Server pode usar o modo de lote. A documentação é escassa sobre o que pode ser executado em modo de lote e o que não pode. Observe o seguinte plano de consulta (motivador), onde um número surpreendente de coisas é executado em modo de lote (verde):

insira a descrição da imagem aqui

(Este é um plano estimado. Usei o plano real para verificar se o modo de execução real é realmente em lote.)

Observe que apenas o lado da construção de T1 usa um índice columnstore. Todas as entradas de teste (T2 e T3) são rowstores. Seus dados parecem fazer a transição para o modo de lote. Sempre pensei que o modo de lote está sendo usado para o fluxo de dados que é executado apenas no lado da sonda.

Parece que os dados podem fazer a transição para o modo de lote, mesmo que não sejam originários de um índice columnstore. Isso levanta a questão: por que o SQL Server também não usa o modo de lote para consultas somente de armazenamento de linha? Pode ser benéfico para alguns deles. O uso de um índice columnstore é um requisito formal necessário para fazer o SQL Server considerar o modo batch? Poderíamos talvez adicionar uma tabela fictícia de linha zero com um índice columnstore para induzir o modo de lote e obter ganhos de desempenho?

O que exatamente pode ser executado em modo de lote a partir do SQL Server 2014?

sql-server sql-server-2014
  • 1 1 respostas
  • 4732 Views

1 respostas

  • Voted
  1. Best Answer
    Paul White
    2015-04-28T07:41:30+08:002015-04-28T07:41:30+08:00

    O que exatamente pode ser executado em modo de lote a partir do SQL Server 2014?

    O SQL Server 2014 adiciona o seguinte à lista original de operadores de modo de lote:

    • Hash Outer join (incluindo full join)
    • Hash Semi Join
    • Hash Anti Semi Join
    • União de todos (somente concatenação)
    • Agregação de hash escalar (sem agrupar por)
    • A compilação da tabela de hash em lote foi removida

    Parece que os dados podem fazer a transição para o modo de lote, mesmo que não sejam originários de um índice columnstore.

    O SQL Server 2012 era muito limitado no uso de operadores de lote. Os planos do modo de lote tinham uma forma fixa, dependiam da heurística e não podiam reiniciar o modo de lote após a transição para o processamento do modo de linha.

    O SQL Server 2014 adiciona o modo de execução (lote ou linha) à estrutura de propriedade geral do otimizador de consulta, o que significa que ele pode considerar a transição para dentro e fora do modo de lote em qualquer ponto do plano. As transições são implementadas por adaptadores de modo de execução invisíveis no plano. Esses adaptadores têm um custo associado para limitar o número de transições introduzidas durante a otimização. Este novo modelo flexível é conhecido como Mixed Mode Execution.

    Os adaptadores de modo de execução podem ser vistos na saída do otimizador (embora infelizmente não em planos de execução visíveis ao usuário) com TF 8607 não documentado. Por exemplo, o seguinte foi capturado para uma consulta contando linhas em um armazenamento de linha:

    Adaptadores linha para lote para linha

    O uso de um índice columnstore é um requisito formal necessário para fazer o SQL Server considerar o modo batch?

    É hoje, sim. Uma possível razão para essa restrição é que ela restringe naturalmente o processamento em lote para Enterprise Edition.

    Poderíamos talvez adicionar uma tabela fictícia de linha zero com um índice columnstore para induzir o modo de lote?

    Sim, isso funciona. Também vi pessoas fazendo junção cruzada com um índice columnstore clusterizado de linha única exatamente por esse motivo. A sugestão que você fez nos comentários para juntar à esquerda a uma tabela columnstore fictícia em false é fantástica.

    -- Demo the technique (no performance advantage in this case)
    --
    -- Row mode everywhere
    SELECT COUNT_BIG(*) FROM dbo.FactOnlineSales AS FOS;
    GO
    -- Dummy columnstore table
    CREATE TABLE dbo.Dummy (c1 int NULL);
    CREATE CLUSTERED COLUMNSTORE INDEX c ON dbo.Dummy;
    GO
    -- Batch mode for the partial aggregate
    SELECT COUNT_BIG(*) 
    FROM dbo.FactOnlineSales AS FOS
    LEFT OUTER JOIN dbo.Dummy AS D ON 0 = 1;
    

    Planeje com junção externa esquerda fictícia:

    Modo de lote com tabela fictícia

    A documentação é escassa

    Verdadeiro.

    As melhores fontes oficiais de informações são Índices Columnstore descritos e Ajuste de desempenho do SQL Server Columnstore .

    SQL Server MVP Niko Neugebauer tem uma série fantástica sobre columnstore em geral aqui .

    Há alguns bons detalhes técnicos sobre as alterações de 2014 no documento da Microsoft Research, Enhancements to SQL Server Column Stores (pdf), embora esta não seja a documentação oficial do produto.

    • 32

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

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 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

    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
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • 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
    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