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 / 230121
Accepted
Geezer
Geezer
Asked: 2019-02-20 02:11:48 +0800 CST2019-02-20 02:11:48 +0800 CST 2019-02-20 02:11:48 +0800 CST

O modo em lote se aplica apenas a funções Agg no índice ColumnStore

  • 772

Banco de Dados SQL do Azure - Standard Edition (camada de serviço S3)

Por que o modo de lote só entra em vigor ao usar funções agregadas?

DROP TABLE IF EXISTS dbo.TransCS

CREATE TABLE dbo.TransCS (
     Col1 INT 
    ,Col2 AS Col1*2
)
CREATE CLUSTERED COLUMNSTORE INDEX CS_TransCS on dbo.TransCS;

WITH
    L0   AS(SELECT 1 AS c UNION ALL SELECT 1),
    L1   AS(SELECT 1 AS c FROM L0 AS A CROSS JOIN L0 AS B),
    L2   AS(SELECT 1 AS c FROM L1 AS A CROSS JOIN L1 AS B),
    L3   AS(SELECT 1 AS c FROM L2 AS A CROSS JOIN L2 AS B),
    L4   AS(SELECT 1 AS c FROM L3 AS A CROSS JOIN L3 AS B),
    L5   AS(SELECT 1 AS c FROM L4 AS A CROSS JOIN L4 AS B),
    Nums AS(SELECT ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) 
    AS n FROM L5)
INSERT INTO dbo.TransCS (Col1)
SELECT TOP (1000000) n FROM Nums ORDER BY n; 

Inserir 1 milhão de linhas

Processamento de linha

SELECT * FROM dbo.TransCS

Plano de execução

Processamento em lote

SELECT Col1, Col2, SUM(Col2)OVER ()
FROM dbo.TransCS

Plano de execução

Existe uma maneira de utilizar os benefícios de desempenho sem usar as funções Agg? A documentação sobre isso é escassa.

sql-server performance
  • 1 1 respostas
  • 109 Views

1 respostas

  • Voted
  1. Best Answer
    Josh Darnell
    2019-02-21T05:38:46+08:002019-02-21T05:38:46+08:00

    Fundo

    Em julho de 2017, Niko blogou sobre uma mudança no SQL Server 2017

    ...no SQL Server 2017 existe uma otimização interna para o Query Optimizer, que aplicará a otimização FULL aos planos de execução com os Columnstore Indexes, evitando a armadilha de executá-los no Row Execution Mode

    Antes disso, você obteria execução em modo de linha para "planos triviais", mesmo quando houvesse objetos columnstore envolvidos.

    O plano de execução que você compartilhou mostra que a primeira consulta tem esse problema, que você pode confirmar no XML:

    StatementOptmLevel="TRIVIAL" 
    

    Gambiarra

    Uma maneira de contornar isso, obter a otimização COMPLETA e, assim, obter uma verificação no modo de lote, é adicionar uma subconsulta que não afetará seus resultados, assim:

    SELECT * FROM dbo.TransCS WHERE (SELECT 1) = 1;
    

    A segunda consulta já obtém otimização completa por causa da função agregada.

    Por que isso está acontecendo?

    As únicas coisas que vêm à mente sobre por que isso pode acontecer são:

    • seu banco de dados tem um nível de compatibilidade de 130 ou inferior (isso parece improvável porque posso ver no plano de execução que o estimador de cardinalidade 140 está sendo usado)
    • esta é uma alteração/regressão no Banco de Dados SQL do Azure especificamente
      • A "compilação" indicada no plano de execução é 15.0.1100.504, que se parece com um número de compilação do SQL Server 2019 (o que faz sentido, pois é o Azure). Não tenho uma instância de 2019 para testar, mas a mudança de comportamento também pode estar lá

    Você pode relatar isso à Microsoft em site de comentários .

    • 3

relate perguntas

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

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

  • Onde posso encontrar o log lento do mysql?

  • Como posso otimizar um mysqldump de um banco de dados grande?

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