Quais são os três principais problemas de desempenho que você encontra com seus servidores SQL?

15

Sou estudante da Universidade Fontys em Eindhoven e atualmente estou realizando uma série de entrevistas para ajudar no desenvolvimento de uma ferramenta do SQL Server e gostaria de receber feedback dos especialistas da área.

Uma das minhas perguntas é:

Quais são os três principais problemas de desempenho encontrados nas instâncias do SQL Server e como você os identifica?

Particularmente, estou interessado nos scripts e nas ferramentas usadas para medir isso.

Jamil
fonte

Respostas:

22

Em cima da minha cabeça - os 3 principais problemas de consulta:

  • Conversões implícitas
  • Estratégias de indexação incorretas (muitas ou insuficientes ou do tipo errado)
  • Usando SELECT * em vez de nomear apenas os campos necessários

Há muito mais problemas de configuração no nível do servidor, problemas de esquema do banco de dados, problemas de hardware etc. Escrevi um script para analisar rapidamente os servidores que procuram esses tipos de problemas:

http://www.brentozar.com/blitz/

Brent Ozar
fonte
15
  • Projeto / consultas / indexação ruins
  • Não é permitido comprar o hardware correto
  • ORMs do Braindead (aka "SQL is dead")
gbn
fonte
14

Não é o top 3, mas pensei em mencionar coisas ainda não mencionadas:

  1. SQL colocado em máquinas virtuais sem detalhes / transparência fornecidos ao DBA. O servidor host alterará dinamicamente as configurações das máquinas convidadas, causando uma queda no desempenho e deixando o DBA sem pista. Recursos como hypertreading, formação de equipes de rede e balões de memória tornam os contadores de desempenho um alvo em movimento para monitorar.Tools: sysmon/perfmon, DMVs, maintaining a history of performance counters in tables.
  2. Da mesma forma, não há transparência / verificabilidade nas configurações da SAN fornecidas ao DBA. Eu tive LUNs com diferentes preferências de cache de leitura / gravação definidas, mas disse que eram todas iguais.Tools: IO DMVs, SQLIO.
  3. Arquitetura incorreta do banco de dados: como dimensionamento e posicionamento dos arquivos de dados e log e tempdb. Uso inadequado do paralelismo. Criando vários grupos de arquivos nos mesmos discos físicos.Tools: experience.

Outra ferramenta que estou verificando agora é o Projeto Lucy . Parece arrumado.

StanleyJohns
fonte
10
  • sem índices adequados
  • uso de nolock no código de produção por alguém para tentar resolver problemas de desempenho. Especialmente ruim se o código modificar dados em tabelas
  • aplicativo que seleciona mais dados do que o necessário em mais momentos do que o necessário. Ex ter um binário retornado sempre, mesmo que você queira apenas os dados de texto da mesma tabela.
Martin Sjöberg
fonte
2
+1 para a menção nolock. Todo desenvolvedor eu sei acho que é uma boa idéia para usá-lo porque "ele não bloquear a tabela em leituras"
tucaz
Você não odeia quando um cliente seu comprou esse sistema enorme para dinheiro e a primeira vez que você o vê, ele usa o nolock em todos os lugares? E então ...: - /
Martin Sjöberg
9

Consultas com escala incorreta (obtenha todos os pedidos por X anos para todos os clientes, etc., incluindo todas as linhas de pedido, incluindo dados somados e outros dados médios mal calculados)

Apenas consultando tudo de uma vez.

Tabelas que contêm campos varchar / texto 'descritivos' que precisam ser pesquisados ​​em todas as consultas.

CodingBarfield
fonte
7
  • Manutenção inadequada, ou seja, sem reorganizações de índice, estatísticas, sem backups de log
  • Índices ausentes
  • Consultas mal escritas
SqlACID
fonte
7
  • Design inadequado de banco de dados e aplicativos
  • uso inadequado das vantagens da plataforma (os desenvolvedores queriam ter um código de acesso ao banco de dados interligado à plataforma. sem SPs, sem funções etc.)
  • indexação ruim, é claro.
Alex_L
fonte
7
  • consultas ad-hoc sobre dados de produtos - sim, os desenvolvedores acreditam que é necessário e alguns podem até ter acesso :-)
  • mau design do aplicativo que usa o banco de dados - por exemplo: muitos dados adicionados e nunca removidos, mesmo que não sejam mais necessários (o que leva a problemas de desempenho porque os backups aumentam, as tarefas de manutenção demoram mais tempo etc.)
  • todos os arquivos de banco de dados na mesma invasão ou pior, na mesma unidade (por exemplo: dbs do sistema, tempdb, dbs do usuário todos juntos na mesma unidade / invasão)
Marian
fonte
3
  • Design de banco de dados ruim
  • Estratégia de indexação ruim (incluindo muitos índices, índices ausentes e falta de manutenção do índice)
  • Decisões ruins de arquitetura de hardware
MW_DBA
fonte
2

A indexação é fundamental para o desempenho, mas descobri que a maioria dos DBAs sabe disso e, portanto, tende a ser uma das primeiras coisas que são corrigidas por meio da otimização de consultas. As áreas que geralmente não são bem tratadas:

  1. Excesso de viagens de ida e volta ao banco de dados. Chattiness é um dos principais problemas de desempenho que vejo.
  2. Obtendo os limites corretos de transação. A transação de todos os INSERT / UPDATE / DELETE pode ser uma grande causa de desempenho.
  3. Falha na otimização do lado do hardware; particularmente, colocando o log do banco de dados em um volume diferente dos dados do banco de dados.

Se eu pudesse adicionar um quarto item à lista, seria uso excessivo e inadequado de gatilhos e / ou cursores. Parece não acontecer muito hoje em dia, mas quando acontece, é doloroso do ponto de vista de desempenho.

RickNZ
fonte