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 / 273768
Accepted
JohnG
JohnG
Asked: 2020-08-15 09:04:48 +0800 CST2020-08-15 09:04:48 +0800 CST 2020-08-15 09:04:48 +0800 CST

Manutenção online do SQL Server - Publicidade falsa?

  • 772

Estou sendo desafiado, pois temos clientes que estão vendo diferentes tipos de erros ao executar o que deveria ser manutenção online. erros como tempos limite, verificação interrompida devido à movimentação de dados e muito mais.

Alguns de nossos clientes compraram o SQL Server Enterprise Edition para obter o recurso online de índice de reconstrução.

Para replicar os problemas, tenho testado em um grande banco de dados o dbcc checkdb, reorganização e reconstrução de índices e atualização de estatísticas enquanto bombardeio o servidor com transações em um banco de dados que tem quase 1TB.

Meu primeiro teste foi com o checkdb com maxdop=1 enquanto o sqlServer estava processando 124000 pequenas transações... Recebi um timeout da minha aplicação que tem um timeout definido para 5 minutos. Pesquise sobre como o check db funciona, é que ele cria um snapshot, usa tempdb intensivamente e nolocks são criados para criar o snapshot... Então, como uma das minhas pequenas transações pode ser bloqueada se não bloquear tabelas?

Meu segundo teste foi reorganizar todos os índices (que também deveria estar online) enquanto processava 124.000 transações, dessa vez consegui um impasse...

Meu terceiro teste foi atualizar todas as estatísticas com maxdop=1 enquanto executava 124.000 transações. O erro recebido neste caso é: Não foi possível continuar a varredura sem bloqueio devido à movimentação de dados

meu quarto teste para reconstruir todos os índices online durante a execução de 124.000 transações será executado em breve e atualizarei meu post com os resultados.

O maxdop=1 que usei onde pode ser usado foi para eliminar a contenção de recursos.

Eu li vários artigos, incluindo a explicação de Paul Randal sobre online vs offline da reconstrução de índices e entendo a diferença ... .

Qualquer entrada seria muito apreciada.

O que estou perdendo

sql-server maintenance
  • 1 1 respostas
  • 75 Views

1 respostas

  • Voted
  1. Best Answer
    LowlyDBA - John M
    2020-08-15T09:33:54+08:002020-08-15T09:33:54+08:00

    Muitas perguntas aqui. Tenho a sensação de que as respostas não vão fazer você feliz, no entanto.

    DBCC CheckDB

    Para replicar os problemas, tenho testado em um grande banco de dados o dbcc checkdb, reorganização e reconstrução de índices e atualização de estatísticas enquanto bombardeio o servidor com transações em um banco de dados que tem quase 1TB.

    Não sei se confundi DBCC CHECKDBcom "manutenção online", mas certamente não é uma atividade offline por natureza. Dito isto, ainda pode consumir muitos recursos, o que pode se manifestar como um aplicativo "não funcionando", embora o banco de dados ainda esteja tecnicamente online e disponível.

    Recebi um tempo limite do meu aplicativo que tem um tempo limite definido para 5 minutos... Então, como uma das minhas pequenas transações pode ser bloqueada se não bloquear tabelas?

    Isso não indica nenhum bloqueio, especialmente porque DBCC CHECKDBnão causa bloqueio , a menos que você especifique. Você deve dar uma olhada no monitoramento das consultas para ver qual pode ser a causa do tempo limite - pode ser muitas coisas honestamente.

    Builds de índice on-line

    Meu segundo teste foi reorganizar todos os índices (que também deveria estar online) enquanto processava 124.000 transações, dessa vez consegui um impasse...

    O impasse foi com a instrução de reorganização do índice ou outra instrução de aplicativo? Não consigo me lembrar de uma reorganização que tenha causado esse problema para mim, mas os impasses são um fato da vida e o aplicativo deve ser capaz de tentar novamente quando os encontrar. A operação online não garante de forma alguma que você não terá impasses.

    A maioria das pessoas agenda a manutenção do índice durante a noite/fins de semana para ajudar a evitar problemas relacionados ao bloqueio, bloqueio e contenção de recursos. Testar em uma carga de trabalho normal do horário comercial certamente causará problemas como você está vendo.

    Atualizar estatísticas

    Meu terceiro teste foi atualizar todas as estatísticas com maxdop=1 enquanto executava 124.000 transações. O erro recebido neste caso é: Não foi possível continuar a varredura sem bloqueio devido à movimentação de dados

    Este é você (ou melhor, o aplicativo): não use NOLOCKe você não receberá NOLOCKerros relacionados. Novamente, não tenho certeza se eu recomendaria atualizar todas as estatísticas em um sistema ocupado durante alto volume, então isso parece um teste destinado a ter problemas também.

    Definições técnicas

    Eu li vários artigos, incluindo a explicação de Paul Randal sobre online vs offline da reconstrução de índices e entendo a diferença ... .

    Se você leu isso, sabe que on-line não significa que nenhum bloqueio seja feito. A definição da palavra é altamente contextual. Você pode apontar quem precisar para a documentação sobre reconstruções online :

    Embora não seja comum, a operação de índice online pode causar um impasse ao interagir com as atualizações do banco de dados devido às atividades do usuário ou do aplicativo. Nesses casos raros, o Mecanismo de Banco de Dados do SQL Server selecionará a atividade do usuário ou do aplicativo como vítima de deadlock.

    Conclusão

    Tudo isso para dizer que, independentemente das operações de manutenção poderem ser "online", a maioria das pessoas não as testa durante cargas de trabalho completas nem espera que funcionem bem durante o volume transacional normal.

    Na maioria das vezes, você realmente não precisará reconstruir/reorganizar todos os índices ou atualizar todas as estatísticas ao mesmo tempo, mesmo durante as janelas de manutenção. Se você tiver um VLDB, divida-o DBCC CHECKDBem janelas diferentes (como Paul cobriu tão bem).

    Eu me concentraria mais em como/quando essas coisas realmente funcionarão. Use algo como a solução de manutenção da Ola para não fazer o SQL Server trabalhar mais do que o necessário.

    E faça com que seu cliente reduza suas expectativas!

    Veja também

    • Por que a criação de índice online bloqueia o acesso à tabela por um período de minutos?
    • Como reproduzir "Não foi possível continuar a verificação com nolock devido à movimentação de dados"
    • Maus hábitos: colocar NOLOCK em todos os lugares
    • CHECKDB de todos os ângulos: opções de verificação de consistência para um VLDB
    • 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