SQL Server Bug – Connect Item

Olá pessoal,

Recentemente estava realizando algumas verificações para  criação de índices e em um dos meus testes me deparei com um problema aonde o índice que possuí a opção ALLOW_PAGE_LOCKS desabilitada, um index reorganize não é possível de ser feito. Até então tudo bem, pois temos a documentação nesse link que nos mostra exatamente esse detalhe. Porem, existe um problema que para mim é um bug no momento em que o comando “ALTER INDEX ALL ON SomeTable REORGANIZE” é executado. Em um cenário normal o SQL Server deveria nesses casos realizar uma pre-verificação desses requerimentos para se rodar um REORGANIZE em todos os índices, mas o que acontece é que o SQL Server inicia o comando e quando ele chegar no índice com o ALLOW_PAGE_LOCKS = OFF é que acontece acontece o erro e a operação é abortada. Vale lembrar também que todos os outros índices após o erro acontecer não são reorganizados.

Em uma operação de reorganize em um indice grande, esse problema pode se tornar bastante grande. Portanto, peço por gentileza para que votem no Connect Item abaixo.

Allow_Page_locks is OFF for a single index and error in “ALTER INDEX ALL” where a quick verification isn’t done

Hi Everybody,

Recently doing some digging in index tuning and optimization I came across a very interesting details that to me it seems a bug. When you try to run an Index Reorganize in a index with the option ALLOW_PAGE_LOCKS = OFF the reorganize fails. That’s totally acceptable, since it’s very well documented here. However, when you run the following command “ALTER INDEX ALL on  SomeTable REORGANIZE” SQL Server will execute the reorganize until it comes to the index with that option disabled, so, you will waste so much time in a big table and the operation in will be cancelled. The Index transaction for itself it isn’t rolled back, but the index after this one isn’t reorganized. So, I’ve created the following Connect Item and ask you guys to vote it.

Allow_Page_locks is OFF for a single index and error in “ALTER INDEX ALL” where a quick verification isn’t done

Thanks,
Marcos Freccia

Sobre Marcos Freccia

MVP em SQL Server (Data Plataform) , especialista em SQL Server, e atualmente trabalhando com Microsoft Azure!

Publicado em junho 25, 2013, em Connect, SQL Server, SQL Server 2012, VirtualPass e marcado como , , . Adicione o link aos favoritos. 2 Comentários.

  1. Sim, seria melhor se essa validação fosse feita, mas a falta dela eu não considero um “bug”.

    Lembrando que a boa pratica de alteração de ambientes diz que precisamos documentar e entender o impacto das alterações, nesse caso o ALLOW PAGE LOCK foi alterado em relação ao valor padrão e por isso deve ser considerado nas demais atividades.

    Usar a opção ALL para qualquer tipo de comando, e em especial para ALTER INDEX, também não é o ideal, principalmente para tabelas com grande volume de dados.

    Mas como disse no inicio, a idéia é válida…além dos votos a favor não esqueçam de criarem um cenário e usarem a opção “User(s) can reproduce this bug”

    • Com certeza, mundo perfeito seria aquele onde todos fazem documentação, onde tudo passa por uma auditoria e toda empresa tem um DBA capacitado para o trabalho. Se a opção existe é porque alguém pode utiliza-la, e claro que quando falamos de grandes bancos/tabelas/índices existem opções muito melhores que essa.

      Eu particularmente, vejo algumas situações onde o ALLOW_PAGE_LOCKS poderia ser desabilitado.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: