Interromper o (s) serviço (s) do SQL Server antes de desfragmentar a unidade?

8

Os arquivos de dados do banco de dados de produção do SQL Server 2005 ficam em uma unidade física separada, que a ferramenta Desfragmentador de Disco do Microsoft Windows 2003 reporta como 99% fragmentada.

Planejamos uma tarefa para desfragmentar esta unidade às 3:00 da manhã de um sábado. O trabalho foi concluído após 40 minutos sem erros aparentes. No entanto, a unidade permanece fortemente fragmentada.

Deveríamos ter parado o (s) serviço (s) do SQL Server antes da desfragmentação?

CONTEXTO

Por solicitações de contexto: Temos uma instância do Microsoft SQL Server 2005 (9.00.5324.00) executando o Windows Server 2003 (SP2) de 32 bits no hardware Dell PowerEdge 2950, ​​por volta de 2007, com 4 GB de RAM. O PowerEdge 2950 possui quatro unidades de 68 GB configuradas como RAID-1 para criar dois discos virtuais de 68 GB: (1) C (inicialização e SO) & D (arquivo de paginação, diversos outros dados); e (2) E (dados SQL). Que eu saiba, a equipe de TI nunca desfragmentou nenhuma dessas unidades ... O Desfragmentador de disco relata a fragmentação de arquivos de 66% (C), 77% (D) e 99% (E). O Monitor de desempenho relata os seguintes resultados médios: "Arquivo de paginação:% de uso" = ~ 6,8% ; "SQL Server: Buffer Manager - Expectativa de vida da página" = 20 segundos ; e "PhysicalDisk: média de disco / gravação, unidade E" = entre 300 e 1,. Esperamos uma atualização de hardware e SQL Server muito necessária em alguns meses (ou seja, novo hardware, Windows Server 2012 de 64 bits, SQL Server 2012 de 64 bits, 12 GB de RAM), mas, devido à desempenho do usuário, deseja aliviar o problema o máximo possível. Assim, pensar que uma desfragmentação de arquivo pode ajudar a unidade E, a principal unidade de dados SQL.

Como um aparte, na semana passada, puxamos duas unidades com falha e reconstruímos a matriz ... não tenho certeza se isso importa. Contratamos outra equipe de TI para manter o servidor, para que não tenhamos acesso direto ao equipamento ... nossa organização paga apenas pelos serviços.

Podemos pagar o tempo de inatividade durante as janelas de manutenção programadas regularmente (semanalmente), bem como o tempo de inatividade fora da banda, conforme necessário, durante a noite.

iokevins
fonte
6
Você tem alguma medida para indicar que a fragmentação do disco físico está tendo um impacto significativo? Você pode pagar o tempo de inatividade?
Remus Rusanu 11/03/2013
2
@RemusRusanu - como saber se algum nível de fragmentação está tendo um efeito geral negativo no sistema sem realmente desfragmentá-lo? A inspeção do número de E / Ss divididas por meio do Monitor de Desempenho pode ajudar, embora seja difícil correlacioná-lo à atividade no SQL Server. A propósito, isso não é um confronto - estou muito curioso!
Max Vernon
4
@ MaxVernon: Por uma questão de teoria, acho que XPerf . Também é possível medir lado a lado criando um banco de dados não fragmentado no mesmo disco e executando uma carga de trabalho capturada. No entanto, por todos os motivos práticos, a probabilidade de problemas de desempenho predominantes estarem no aplicativo vs. devido à fragmentação é esmagadora.
Remus Rusanu
3
Minha experiência me diz 99 vezes em 100 (ou mais) que eu definitivamente concordo. É muito mais provável que os problemas de desempenho sejam resultado de alguma ORM em SELECT *todo o lugar ou de alguma outra prática incorreta.
Max Vernon
11
Antes de fazer outras alterações, e certamente antes de tentar uma desfragmentação, verifique se as matrizes foram completamente reconstruídas. E um conselho para o seu novo sistema - obtenha o máximo de RAM possível - você deseja o máximo de dados SQL acessados ​​regularmente na memória, já que a RAM é 1.000 vezes mais rápida que os discos mais rápidos.
Max Vernon

Respostas:

2

Pessoalmente, usei o Raxco PerfectDisk (não associado à empresa ou a qualquer um de seus funcionários) para fazer desfragmentações online de LUNs do SQL Server. Funciona perfeitamente, se diminuir a velocidade do servidor. Eu recomendaria fazê-lo durante períodos de atividade mais leve. Quando digo "funciona perfeitamente", estou me referindo a ele não corrompendo o volume ou os arquivos de dados SQL.

O desfragmentador interno faz um trabalho muito ruim se determinadas estruturas estiverem fragmentadas na unidade. O PerfectDisk mostra detalhes sobre todos os itens fragmentados, incluindo tabelas de alocação NTFS, diretórios, fluxos de arquivos alternativos, etc. etc.

O PerfectDisk desfragmenta bancos de dados SQL? http://support.raxco.com/KB/a106/does-perfectdisk-defragment-sql-databases.aspx

Consulte esta cópia de arquivo da Technet News Magazine sobre SQL Server e fragmentação: http://web.archive.org/web/20100803204458/http://www.microsoft.com/technet/abouttn/flash/tips/tips_083104.mspx

Max Vernon
fonte
2
Mas o comentário de Remus tem muito mais mérito do que apenas apontar para algum produto. Não acredito que já tenha desfragmentado um disco do Windows com o SQL e nunca tenha visto uma forte indicação de que eu precisava. O Windows pode dizer que uma unidade está fragmentada, mas o importante é se o SQL Server está enfrentando problemas por causa disso. Em muitos casos, suspeito que isso realmente não importa e não há necessidade de executar desfragmentações no nível do sistema de arquivos. Você diz que "funciona perfeitamente", mas você realmente observou melhorias mensuráveis? Você pode fornecer detalhes?
Aaron Bertrand
11
Concordo, Aaron, na maioria dos casos, a fragmentação física em um SQL Server de outra forma projetada adequadamente terá um efeito muito mínimo. Mesmo como neste caso em que o usuário está relatando 99% de fragmentação. No entanto, se o usuário tiver seus bancos de dados SQL no mesmo LUN que o O / S e estiver em um único disco ou uma matriz RAID com um pequeno número de eixos, a fragmentação realmente excessiva poderá ter um impacto.
Max Vernon
11
Por "realmente excessivo", quero dizer como milhares e milhares de fragmentos. Pense centenas de milhares. Eu já vi isso. Não que eu esteja orgulhoso ou algo assim!
Max Vernon
Como Brent Ozar disse, se você estiver executando seus bancos de dados SQL em uma SAN em que os dados são compartilhados em uma matriz RAID gigante, executar uma desfragmentação física (e de fato uma desfragmentação lógica do SQL) provavelmente não terá nenhum efeito positivo mensurável no geral desempenho do sistema.
Max Vernon
Estou marcando isso como a melhor resposta atual, pois parece "Sim" se usarmos a ferramenta certa. Obrigado!
22613 iokevins
7

Seu problema não é a fragmentação do disco. Seu problema é a verificação de RAM e da tabela de aplicativos:

4 GB de RAM ... 68 GB ... Expectativa de vida da página 20 segundos

Você precisa de muito mais memória RAM. Como no seu novo servidor, deve ter muito, muito, muito mais que 12 GB. Comece com 64 GB, custa basicamente dez centavos . E sim, corrija seu aplicativo para usar índices. 20 segundos é uma indicação muito clara de varreduras de tabela que descartam o buffer pool. Você precisa corrigir o aplicativo, adicionar os índices necessários e corrigir suas consultas . Para o seu caso, desfragmentar as unidades é tanto um arenque vermelho quanto um arenque vermelho.

Ah, e mova o log para separar eixos físicos dos dados . Sozinho.

Remus Rusanu
fonte
Obrigado Remus; se eu apenas governasse o mundo ... Contratamos um fornecedor de terceiros para o aplicativo, portanto, não sob nosso controle direto, infelizmente. Agradeço sua compreensão, obrigado.
22613 iokevins
11
Mais RAM e SSDs podem facilitar seu caminho com um orçamento bastante reduzido. Mas o aplicativo precisa de uma correção.
Remus Rusanu 12/03
Como acompanhamento, após desfragmentar a unidade, o desempenho melhorou apenas marginalmente. Remus parece correto em seu diagnóstico de um problema de RAM.
21413 iokevins
@RemusRusanu importa tentar otimizar com arquivos colocados em diferentes discos em servidores virtuais (vmware)? Esta é uma questão geral de virtualização de ignorância ...
diegohb
-4

Brad McGehee descreve bem aqui:

http://www.bradmcgehee.com/2011/06/do-you-ever-physically-defragment-your-sql-server-mdf-ldf-files/

... se você deixar o serviço SQL Server em execução durante a desfragmentação, os arquivos do banco de dados serão abertos e, portanto, não serão desfragmentados.

DBA_ANDY
fonte
2
Absolutamente incorreto. Pelo menos nas versões recentes do Windows. Como no Windows Server 2003+ ou Windows XP +
Max Vernon
11
Todas as ferramentas de desfragmentação do Windows usam as APIs do sistema para desfragmentar arquivos e o fazem em um nível de cluster abaixo das APIs de acesso a arquivos. É assim que as pastas podem ser desfragmentadas com o volume online.
Max Vernon