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 / 230953
Accepted
Randi Vertongen
Randi Vertongen
Asked: 2019-03-01 05:19:11 +0800 CST2019-03-01 05:19:11 +0800 CST 2019-03-01 05:19:11 +0800 CST

Por que esses trabalhos T-SQL de diferentes instâncias do SQL Server são executados na mesma instância (grupos de disponibilidade AlwaysOn)

  • 772

Recentemente, nosso painel de processos bloqueados tem relatado processos bloqueados na época em que fazemos nossa atualização estatística.

O motivo foi encontrado rapidamente: uma etapa de trabalho de estatísticas de atualização (T-SQL) que está iniciando na instância secundária e primária do SQL Server. O trabalho atualiza várias estatísticas no mesmo banco de dados, que faz parte de um Grupo de Disponibilidade AlwaysOn. Eu esperaria que isso falhasse na instância secundária.

Um resumo rápido do histórico de failover:

O Servidor A, que deve permanecer ativo devido ao licenciamento (será denominado Servidor Ativo), falhou inesperadamente no Servidor B (Servidor Passivo) no dia 20/02 às 21h.

Após o failover não planejado, fizemos outro failover manual (mas desta vez planejado) de volta ao Active Server em 21/02 às 12h.

Histórico de trabalho

Antes do primeiro failover, tudo estava bem, e o servidor ativo é o único que executa o trabalho.

insira a descrição da imagem aqui Um trabalho em execução. Vemos as atualizações de estatísticas sendo executadas no lado ativo. (que é réplica primária no momento)

Durante o curto período em que o servidor passivo foi a réplica primária, não tivemos nenhum monitoramento e o histórico do trabalho foi limpo.

Após o failover, de volta ao estado 'normal', após estar no primário no nó passivo por menos de 24 horas, a etapa de trabalho na instância passiva também foi iniciada e executada na instância ativa.

insira a descrição da imagem aqui (eu matei as sessões).

Agora, a parte interessante para mim é que ambos os trabalhos estão sendo executados no servidor ativo, parecendo que o trabalho está usando o ouvinte para acessar o banco de dados. Mas pode ser um motivo totalmente diferente.

Há uma tarefa de cópia do PowerShell sendo executada todas as noites às 01:00 (dbatools):

powershell.exe Copy-DbaAgentJob -ExcludeJob "CopyJobs,CopyLogins" -Source INDCSPSQLA01  -Destination  INDCSPSQLP01     -Force

Meu palpite agora é voltado para uma vez, a cópia do trabalho aconteceu a partir do nó secundário ativo --> nó passivo primário com -Force. Isso aconteceu em 21/02 01:00.

A questão

Por que a etapa de trabalho na instância passiva está sendo executada no banco de dados da instância ativa?

Lista de controle

Em ambas as instâncias, o destino do job é local:

insira a descrição da imagem aqui

EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'

O nome do servidor está correto

select name from sys.servers 
select @@SERVERNAME

ambos retornam o servidor passivo.

Os IDs de trabalho de ativo e passivo são diferentes:

--08C63F07-0853-41DA-BC88-8FDF44AE491F -- passive
--E8C88965-C581-4E06-B651-CC10637FCEEF -- active

Ambos os trabalhos usam o banco de dados em questão em sua etapa:

@database_name=N'DB1', 

--> Não deve ser acessível na instância passiva, resultando em falha. Sem secundários legíveis

insira a descrição da imagem aqui

O banco de dados não está acessível na instância passiva:

insira a descrição da imagem aqui

Versão de ambos os servidores: 14.0.3030.27

Exemplo de comando da etapa T-SQL Job

 @subsystem=N'TSQL', 
        @command=N'update statistics dbo.table with fullscan ...'

Nada está sendo executado na instância passiva quando o trabalho é iniciado.

EDITAR:

Reiniciar o agente no nó passivo 'corrige' isso, resultando em um novo erro na execução:

Não é possível conectar ao SQL Server 'INDCSPSQLP01'. A etapa falhou.

Como resultado, ele não atualiza mais as estatísticas na instância primária

Hostnames = Servidor passivo e ativo, trabalhos em execução visivelmente. insira a descrição da imagem aqui

Informações do aplicativo

SQLAgent - TSQL JobStep (Job 0x9D358B2EF6C53C4BAD6A61CA87D51BF5 : Step 1)   
SQLAgent - TSQL JobStep (Job 0x6589C8E881C5064EB651CC10637FCEEF : Step 1)   
sql-server availability-groups
  • 1 1 respostas
  • 446 Views

1 respostas

  • Voted
  1. Best Answer
    Tony Hinkle
    2019-03-01T06:06:10+08:002019-03-01T06:06:10+08:00

    Não tenho um diagnóstico de por que esse problema ocorreu, mas se você tiver trabalhos em execução em bancos de dados que estão em grupos de disponibilidade, é melhor incluir uma verificação na etapa 1 que usa a fn_hadr_is_primary_replicafunção para verificar se está sendo executado no primário ou secundário.

    IF (sys.fn_hadr_is_primary_replica('DB1') <> 1)
      BEGIN
        RAISERROR('%s is secondary', 11, 1, @@servername );
      END
    

    Configure esta etapa para encerrar o trabalho em caso de falha. Isso é melhor do que tentar executar algo que falha porque está atingindo um secundário.

    • 7

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