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 / 246591
Accepted
Paul White
Paul White
Asked: 2019-08-30 14:54:29 +0800 CST2019-08-30 14:54:29 +0800 CST 2019-08-30 14:54:29 +0800 CST

Planos forçados em secundários legíveis

  • 772

Se um plano for forçado no primário em um Grupo de Disponibilidade, ele será aplicado a consultas executadas em um secundário?

Estou procurando respostas que cubram as duas possibilidades de forçar o plano:

  • Guias de plano
  • Plano forçado do repositório de consultas

Eu li o seguinte que sugere que os planos forçados de QS não são transferidos, mas não consigo encontrar nada oficial na documentação ou nada sobre guias de planos.

  • Repositório de consultas e grupos de disponibilidade por Erin Stellato
  • Comportamento do plano forçado do armazenamento de dados de consulta no secundário legível AlwaysOn por Vikas Rana

Evidência conclusiva de forçamento seria a presença de Use Planou PlanGuideNamee PlanGuideDBpropriedades no plano de execução do secundário.

sql-server availability-groups
  • 1 1 respostas
  • 823 Views

1 respostas

  • Voted
  1. Best Answer
    Josh Darnell
    2019-08-30T16:29:35+08:002019-08-30T16:29:35+08:00

    A imposição do plano do Repositório de Consultas NÃO afeta as consultas no secundário

    Usar o Repositório de Consultas para forçar um plano no primário certamente parece forçar o plano no secundário.

    Tentei executar uma consulta em um servidor sem produção e, em seguida, liberar o repositório de consultas sp_query_store_flush_db(o que era necessário para sincronizar os dados com o secundário). Aqui está o secundário à esquerda (observe o aviso circulado sobre ser "somente leitura") e o primário à direita:

    captura de tela da interface do usuário do repositório de consultas

    Agora, clicarei em "Forçar Plano" à direita e atualizarei as duas visualizações:

    captura de tela da interface do usuário do repositório de consultas mostrando os dois planos forçados

    Portanto, o "forçar" pelo menos foi transferido para as tabelas do Repositório de Consultas subjacentes. Isso faz sentido, uma vez que os artigos citados no OP afirmam que a imposição de consulta deve permanecer em vigor após um failover:

    Pergunta: O QDS reterá as informações do plano FORCED quando o banco de dados fizer failover da réplica primária para a réplica secundária?

    Resposta: Sim, o QDS armazena as informações do Plano Forçado na tabela sys.query_store_plan, portanto, em caso de failover, você continuará vendo o mesmo comportamento no novo Primário.

    Mas o comportamento forçado realmente ocorre? Agora vou executar a mesma consulta em ambos os servidores. No primário, como esperado, o atributo "UsePlan" está lá no XML do plano:

    <QueryPlan DegreeOfParallelism="1" MemoryGrant="11096" CachedPlanSize="288" CompileTime="82"
               CompileCPU="78" CompileMemory="2104" UsePlan="true">
    

    E na interface do usuário:

    captura de tela do plano de execução no SSMS mostrando o atributo "plano de uso"

    No secundário (observe o nome do servidor diferente), o plano não foi forçado . Aqui está o mesmo snippet XML do plano:

    <QueryPlan DegreeOfParallelism="1" MemoryGrant="11096" CachedPlanSize="288" CompileTime="32" 
               CompileCPU="28" CompileMemory="1656">
    

    captura de tela do plano de execução no SSMS mostrando o atributo não "usar plano"

    Os guias de plano NÃO afetam as consultas no secundário

    Criei um guia de plano no primário usando este código (os nomes das tabelas foram alterados para proteger os inocentes):

    EXEC sp_create_plan_guide 
        @name = 'plan-guide-test',
        @stmt = N'SELECT TOP (1000) * 
    FROM dbo.TableName t 
    WHERE 
        NOT EXISTS 
        (
            SELECT NULL 
            FROM dbo.OtherTable o 
            WHERE t.Id = o.TableName
        );',
        @type = N'SQL',
        @module_or_batch = NULL,
        @hints = N'OPTION (MAXDOP 1)';
    

    O guia do plano foi, obviamente, eficaz no primário, conforme evidenciado pelo plano de execução:

    <StmtSimple StatementCompId="1" StatementEstRows="1000" ... StatementType="SELECT" 
                PlanGuideDB="..._UAT" PlanGuideName="plan-guide-test" ...>
    

    captura de tela do plano de execução no SSMS mostrando os atributos do guia de plano

    Eu confirmei neste ponto que o guia de plano foi replicado para o secundário.

    Executando a mesma consulta no secundário, o plano de execução está sem todos os sinais de ser forçado por um guia de plano:

    <StmtSimple StatementCompId="1" StatementEstRows="1000" ... StatementType="SELECT" 
                QueryHash="0xECF8A24F126EE77A" QueryPlanHash="0x0E93CF7FEAC1B6EA" 
                RetrievedFromCache="true" SecurityPolicyApplied="false">
    

    captura de tela do plano de execução em XML com atributos de guia de plano ausentes

    • 21

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