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 / 314840
Accepted
GAURAV RATHOD
GAURAV RATHOD
Asked: 2022-07-26 21:32:37 +0800 CST2022-07-26 21:32:37 +0800 CST 2022-07-26 21:32:37 +0800 CST

O que afeta log_send_rate no AG normal ou distribuído, além dos recursos do SO?

  • 772

Estou observando um log_send_rate baixo em minha configuração de AG distribuído. Eu entendo que o AG usa o fluxo de log e, portanto, suponho que não deve ter nada a ver com dados, mas queria saber se isso tem algo a ver com os dados que ele está transmitindo também e não apenas com os recursos do sistema operacional (rede, E/S)?

Métricas básicas para consideração:

  • SQL Server 2019-CU16
  • RAM de origem 1,5 TB, 48 CPU <> RAM de destino 128 GB, 48 CPU - A diferença na memória desempenha algum papel aqui?
  • Ambos os servidores estão no mesmo DC, a latência do ping é <1ms. O servidor de destino é VM.
  • O teste ROBOCOPY mostra uma taxa de transferência de arquivos de ~100 MB/s
  • Quando atividades de geração de log de transações altas (como manutenção ou criação de índice) são enviadas para outra réplica - ele é transferido com uma taxa máxima de 20 MB/s (o que não é esperado). É quando o log_send_queue se acumula.
  • A taxa de REDO do outro lado é boa, nenhuma fila de REDO se acumulando lá.

No AG de origem, não vejo nada para o contador 'Bytes Enviados para Transporte/Sec', então não posso determinar se isso é um gargalo ou não.

Por favor, sugira se eu perdi alguma coisa que eu deveria ter incluído.

sql-server availability-groups
  • 3 3 respostas
  • 227 Views

3 respostas

  • Voted
  1. Josh Darnell
    2022-07-27T05:43:11+08:002022-07-27T05:43:11+08:00

    Um ótimo recurso para investigar isso é a postagem de Sean Gallardy: Network Throughput Hysteria

    A primeira coisa seria certificar-se de que você está comparando coisas equivalentes. Da postagem:

    Quase nunca vejo alguém testar sua rede da maneira que o SQL Server a usa para tráfego AG, que é, como disse antes, um thread por réplica de banco de dados.

    Sean recomenda usar o ntttcp para medir a taxa de transferência de rede de um único thread e um único núcleo. Fazer isso lhe dará uma linha de base melhor para comparar os 20 MB/s.

    Se ainda houver uma lacuna muito grande que precise ser explicada, talvez seja necessário aprofundar exatamente onde no processo a latência está ocorrendo. Aqui está um excelente artigo sobre como fazer isso no suporte da Microsoft:

    Solucionando problemas de latência de movimentação de dados entre grupos de disponibilidade AlwaysOn de confirmação síncrona

    Como você pode ver no diagrama, há muitas etapas no processo de transmissão e proteção de blocos de log para um secundário. A desaceleração pode estar em qualquer lugar lá. Há um link para uma ferramenta gratuita no final dessa postagem do blog que analisará os rastreamentos de eventos estendidos para você FYI.


    Quanto aos dados que você forneceu:

    A diferença de memória no destino não é ideal do ponto de vista de failover (sua carga de trabalho pode ser executada efetivamente com 1/12 da RAM?), mas como você não está vendo uma fila REDO alta, ficaria surpreso se ela estivesse contribuindo para a fila de envio se acumula.

    É bom que as réplicas estejam no mesmo DC - isso torna menos provável que a latência geral da rede seja a culpada (você não está tentando replicar para a nuvem ou do outro lado do mundo).

    E, novamente, o teste ROBOCOPY pode não ser uma boa comparação.

    • 6
  2. sqL_handLe
    2022-07-27T10:17:03+08:002022-07-27T10:17:03+08:00

    Alguns fatores adicionais a serem considerados para a baixa taxa de envio de log do Grupo de Disponibilidade do SQL Server.

    Este artigo fornece uma boa descrição e etapas de solução de problemas para várias condições que podem resultar em controle de fluxo do Grupo de Disponibilidade e taxas de envio de log abaixo do esperado.

    Causas comuns e soluções de solução de problemas para a latência de sincronização de dados do SQL AG

    Se o Grupo de Disponibilidade for síncrono, a compactação antes do envio será desabilitada por padrão (economize um pouco de tempo e um pouco de CPU, use um pouco mais de largura de banda). Se o Grupo de Disponibilidade for assíncrono, a compactação antes do envio será habilitada por padrão (demore um pouco mais, use um pouco mais de CPU para reduzir as necessidades de largura de banda). Para uma determinada carga de trabalho, a compensação pode não funcionar favoravelmente. Os sinalizadores de rastreamento estão disponíveis para substituir o estado padrão de compactação antes do envio para grupos de disponibilidade síncronos e assíncronos.

    Sinalizações de rastreamento para compactação do grupo de disponibilidade

    Para SQL Server vms, sempre recomendo aumentar os buffers de recebimento TCP para os adaptadores de rede. Se esta for uma VM VMware, recomendo fortemente o adaptador de rede vmxnet3. Para cada adaptador vmxnet3 em uma VM, a diferença líquida no uso de vRAM dentro da vm é inferior a 18 mb quando os parâmetros "small rx buffers" e "rx ring #1 size" são aumentados dos valores padrão para os valores máximos. (Estes são os parâmetros a serem alterados se o parâmetro "Jumbo Packet" tiver o valor "Padrão 1500" ou algo próximo a 1500 como 1512. Se "Jumbo Packet" for 8000, deve-se encontrar parâmetros de recebimento TCP de pacote jumbo para modificar.) No caso de um Grupo de Disponibilidade, garantindo o recurso de recebimento TCP adequado no secundário, reduz a lentidão da transmissão devido à perda de pacotes ao longo do caminho.

    Grande perda de pacotes no sistema operacional convidado usando VMXNET3 no ESXi (2039495)

    Certifique-se de que o plano de energia seja de alto desempenho no lado de envio e recebimento do Grupo de Disponibilidade. Para o destino secundário da VM, pode ser necessário verificar no nível da VM e do host. Para processadores mais antigos, se menos da metade dos núcleos em um soquete estiverem ocupados, todos os núcleos no soquete poderão ficar mais lentos (em vez de ajustar a energia de núcleos individuais como em processadores posteriores). E quando os núcleos ficam mais lentos, outros componentes, como adaptadores de rede, também podem ficar mais lentos (até mesmo os tempos de acesso à memória podem ficar mais lentos com algumas implementações de planos de energia).

    Por fim, embora a taxa de envio de log seja menor que a desejada, para essa carga de trabalho ela pode estar no pico. Muitos sites evitam grandes recompilações de índice tanto quanto possível em Grupos de Disponibilidade devido ao estresse, concentrando-se em reorganizações de índice.

    • 4
  3. Best Answer
    GAURAV RATHOD
    2022-07-28T05:46:17+08:002022-07-28T05:46:17+08:00

    Muito obrigado @sqL_handLe e @Josh Darnell por seus comentários sobre isso.

    Mas a causa real nesse problema específico foi a incompatibilidade de tamanho do setor de bytes na origem (512) e no destino (4096).

    Ao verificar qual estágio do AG estava desacelerando o processo usando a aglatency-report-tool ( porque para AG distribuído não consigo gerar relatório de latência do SSMS ), percebi que estava no destino e não na origem!

    AGLatencyReportAntes

    Registro de erro verificado no destino e foi preenchido com erros desalinhados de E/S. ( Eu sei que deveria ter visto isso antes :P )

    " Houve 43983616 E/S de log desalinhados que exigiram retornar ao E/S síncrono. O E/S atual está no arquivo F:\Log\mydb_log.ldf. "

    De acordo com este artigo - isso pode significar

    O que esta mensagem significa?

    A lógica do mecanismo de armazenamento do SQL Server detecta o tamanho do setor do disco e alinhará os metadados dos arquivos de log de transações e os limites internos para corresponder ao tamanho do setor (512 ou 4096 bytes). A mensagem de erro 9012 é gerada quando o SQL Server detectou que as entradas de log foram gravadas assumindo um tamanho de setor diferente do tamanho do setor encontrado na instância atual do SQL Server. Isso pode acontecer em cenários como o abaixo:

    1. Log Shipping de um servidor de produção com um tamanho de setor de disco para um servidor de DR com um tamanho de setor maior

    2. AlwaysOn ou espelhamento de banco de dados de um servidor com um tamanho de setor de disco para um servidor DR com um tamanho de setor maior

    3. Ao adicionar um cartão SSD Nativo 4K para armazenar o log de transações em um servidor onde o log de transações foi criado disco SAN convencional com tamanho de setor de 512

    Para garantir a consistência, o SQL Server pode alternar da execução de E/S assíncrona para E/S síncrona. Isso pode ter um impacto adverso no desempenho se tecnologias como AlwaysOn síncrono ou Espelhamento forem usadas.

    Nesse cenário, é possível que as gravações de log em uma réplica AlwaysOn ou secundária do DBM sejam alternadas para E/S síncrona. Isso pode levar a atrasos de replicação maiores do que o esperado entre o primário e a(s) réplica(s)/secundária

    Então eu peguei alguma ajuda de artigos ( MS tech community & KB3009974 ) para chegar à conclusão de adicionar o TF 1800 ao parâmetro de inicialização na fonte, reiniciei os serviços SQL e log_send_rate apenas aumentou até 200 MB/s.

    AGLatencyReportDepois

    É claro que os pontos que você mencionou foram muito úteis para eu chegar à causa raiz desse problema e agradeço por isso!

    • 3

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