Dez dicas para otimizar o desempenho do SQL Server

Propaganda
Dez dicas para otimizar o
desempenho do SQL Server
Escrito por Patrick O’Keefe e Richard Douglas
Resumo
Introdução
A otimização de desempenho no SQL Server pode ser um
desafio. Uma vasta gama de informações está disponível sobre
a forma de abordar os problemas de desempenho em geral. No
entanto, não há muita informação detalhada sobre problemas
específicos e ainda menos informações sobre como aplicar esse
conhecimento específico ao seu próprio ambiente.
Considere suas metas de ajuste.
Todos nós queremos obter o valor máximo de nossas
implementações do SQL Server. Aumentar a eficiência de seus
servidores de banco de dados libera recursos do sistema para
outras tarefas, tais como relatórios de negócios ou consultas ad
hoc. Para obter o máximo do investimento em hardware de sua
organização, você precisa garantir que a carga de trabalho do
SQL ou aplicação executada nos servidores do banco de dados
esteja em execução da forma mais rápida e eficiente possível.
Este artigo oferece 10 dicas para otimizar o desempenho do
SQL Server, com SQL Server 2008 e 2012 em mente. Não há
listas definitivas das dicas mais importantes, mas você não
errará começando por aqui.
Como um DBA, você, sem dúvida, tem seu próprio ponto
de vista, assim como suas próprias dicas, truques e scripts
favoritos de otimização. Por que não se juntar à discussão sobre
SQLServerPedia?
Mas o seu ajuste depende de suas metas. Você pode estar se
perguntando: "Será que estou obtendo a melhor eficiência da
minha implantação do SQL Server?". Mas alguém pode estar
se perguntando: "Minha aplicação se ajustará à escala?". Aqui
estão as principais formas de ajustar um sistema:
• Ajustar para atender às metas do contrato de nível de serviço (SLA)
ou dos indicadores chave de desempenho (KPI)
• Ajustar para aumentar a eficiência, liberando assim os recursos
para outras finalidades
• Ajustar para garantir a escalabilidade, ajudando assim a manter
SLAs ou KPIs no futuro
Trabalhe para
aumentar a
escalabilidade e
a eficiência de
todos os servidores
de banco de
dados, mesmo se
os requisitos de
negócios estiverem
sendo cumpridos.
Lembre-se de que o ajuste é um processo
contínuo, não uma correção única.
A otimização de desempenho é um
processo contínuo. Por exemplo, ao
ajustar para metas de SLA, será possível ter
"concluído". No entanto, se você estiver
ajustando para aumentar a eficiência ou
garantir a escalabilidade, seu trabalho
nunca será realmente concluído; esse tipo
de ajuste deve ser continuado até que o
desempenho esteja "bom o suficiente".
No futuro, quando o desempenho da
aplicação não for mais bom o suficiente,
o ciclo de ajuste deverá ser executado
novamente.
Dica nº 10. A metodologia de criação
de linha de base e referência de
desempenho ajuda você a detectar
os problemas.
Visão geral do processo de criação
de linha de base e referência de
desempenho A Figura 1 ilustra as
etapas no processo de criação de linha
de base. As seções a seguir explicarão
as principais etapas no processo.
"Boa o suficiente" geralmente tem a ver
com os imperativos de negócios, como
SLAs ou requisitos de taxa de transferência
do sistema. Além desses requisitos, você
deve estar motivado para aumentar a
escalabilidade e a eficiência de todos os
servidores do banco de dados, mesmo
que os requisitos de negócios estejam
sendo cumpridos.
Sobre este documento
A otimização do desempenho no SQL
Server é um desafio. Há uma variedade
de informações generalizadas sobre
vários pontos de dados, por exemplo,
contadores de desempenho e objetos de
gerenciamento dinâmico (DMOs), mas há
muito pouca informação sobre o que fazer
com esses dados e como interpretá-los.
Este artigo descreve 10 dicas importantes
que serão úteis nas trincheiras, permitindo
que você transforme alguns desses dados
em informações acionáveis.
Figura 1. O
processo de criação de
linha de base
2
Antes de começar a fazer alterações, crie
um registro do desempenho atual do
sistema. Ao ajustar e otimizar, a maioria
de nós ficará tentada a ir diretamente
para os ajustes. Alguma vez você já pegou
seu carro no mecânico e pensou que ele
estava funcionando pior do que antes?
Você quer reclamar, mas simplesmente
não tem certeza. Você também pode se
perguntar se a causa do problema que
acha existir agora é algo que o mecânico
fez ou algo que aconteceu depois.
Infelizmente, o desempenho do banco de
dados pode sofrer os mesmos problemas.
Depois de ler este artigo, você estará
cheio de ideias e vai querer implementar
sua estratégia de criação de linha de
base e referência de desempenho
imediatamente. A primeira etapa que
você precisa realizar não é a mais
emocionante, mas certamente é uma das
mais importantes: é hora de estabelecer
como seu ambiente atende aos critérios
que você pretende mudar.
Determine suas metas.
Antes de fazer qualquer coisa em seu
sistema, decida o que você deseja
alcançar. Há aspectos de seu SLA que
precisam ser tratados com respeito ao
desempenho, consumo de recursos ou
capacidade? Você está resolvendo um
problema atual em produção? Houve
queixas com relação ao tempo do
recurso? Estabeleça algumas metas claras.
A maioria de nós tem muitos bancos
de dados e instâncias para cuidar. Para
aumentar o valor de nossos esforços,
precisamos pensar com cuidado no que
é exigido de um determinado sistema de
modo que tenha um bom desempenho
e atenda às expectativas dos usuários.
Se você exagerar na análise e no ajuste,
poderá descobrir que uma quantidade
desproporcional de tempo é gasta
em sistemas de baixa prioridade, em
detrimento dos principais sistemas de
produção. Seja claro sobre exatamente o
que deseja alcançar com seus esforços
de medição e ajuste. Priorize-os e,
idealmente, obtenha adesão e contratos
de um patrocinador de negócios.
3
Estabeleça a norma.
Depois de determinar o que deseja
alcançar, então você precisa decidir
como vai medir o sucesso. Quais são
os contadores de sistema operacional,
contadores do SQL Server, medidas
de recursos e outros pontos de dados
que proporcionarão o discernimento
necessário?
Depois de ter essa lista, você precisará
estabelecer sua linha de base, ou o
desempenho típico de seu sistema,
conforme os critérios escolhidos. Você
precisa coletar dados suficientes durante
um período de tempo suficientemente
longo para dar uma amostra
representativa do desempenho típico
do sistema. Assim que tiver os dados,
você pode calcular a média dos valores
durante o período para estabelecer sua
primeira linha de base. Depois de fazer
modificações no sistema, você terá
uma nova referência de desempenho e
a comparará com a original para poder
medir objetivamente o efeito de suas
alterações.
Não monitore apenas os valores
médios; acompanhe também o desvio
da norma. No entanto, é importante ter
cuidado com as médias. No mínimo,
calcule o desvio padrão de cada
contador para ter uma indicação da
variação ao longo do tempo. Considere
um alpinista que soube que o diâmetro
médio da corda é de 1 cm. O alpinista
salta com confiança para o lado.
Ele balança várias centenas de metros
sobre as rochas afiadas e sorri, satisfeito.
Em seguida, ele descobre que a seção
mais grossa da corda é de 2 cm e a mais
fina é de 0,1 cm. Ops!
Se você não estiver familiarizado com
o desvio padrão, consulte um livro de
estatísticas para iniciantes. Você não
precisa saber tudo, mas ajuda saber o
básico.
A mensagem principal aqui não é apenas
acompanhar as médias, mas também
acompanhar o desvio da norma (meio).
Decida o que essa norma deve ser (isso
é frequentemente encontrado no SLA).
A referência de
desempenho ajuda
a identificar um
comportamento
anormal, porque
você tem uma boa
indicação do que é
um comportamento
normal.
Sua missão não é obter o máximo
desempenho possível, e sim conseguir
o melhor ajuste possível para suas
metas de desempenho e, em seguida,
limitar o desvio dessas metas o máximo
possível. Tudo mais representa tempo e
esforço desperdiçados e também pode
apontar para uma subutilização dos
recursos de infraestrutura.
Sua missão não é
obter o máximo
desempenho
possível; é conseguir
o melhor ajuste
possível para
suas metas de
desempenho e, em
seguida, limitar o
desvio dessas metas
o máximo possível.
Qual é o volume de dados necessário
para uma linha de base? A quantidade
de dados necessários para estabelecer
uma linha de base depende de como
a carga varia ao longo do tempo.
Converse com os administradores
de sistema, usuários finais e
administradores de aplicações. Eles
geralmente têm uma boa noção de
quais são os padrões de uso. Você deve
reunir dados suficientes para cobrir
períodos fora de pico, médios e de pico.
É importante medir a quantidade que
varia de carga e com que frequência.
Os sistemas com padrões previsíveis
exigirão menos dados. Quanto maior a
variação, menor o intervalo de medição
e maior o tempo que você precisará
para medir e desenvolver uma linha de
base confiável. Para ir um pouco mais
além em nossa analogia do alpinista,
quanto maior o comprimento de corda
que você examinar, melhor a chance
de detectar as variações. A criticidade
do sistema e o impacto do seu fracasso
também afetarão a quantidade de
análise a que ele deve ser submetido e a
confiabilidade que a amostra deve ter.
Armazenamento dos dados
Quanto mais parâmetros você
monitorar e quanto menor a frequência,
maior o conjunto de dados que você
vai coletar. Pode parecer óbvio, mas
você precisa considerar a capacidade
que será necessária para armazenar
seus dados de medição. Quando
você tiver alguns dados, será bastante
simples extrapolar a medida em que
este repositório vai crescer ao longo do
tempo. Se você monitorar durante um
período prolongado, considere agregar
dados históricos em intervalos para
evitar que o repositório aumente muito.
Por motivos de desempenho, seu
repositório de medição não deve residir
4
no mesmo lugar que o banco de dados
sendo monitorado.
Limite o número de alterações feitas ao
mesmo tempo.
Tente limitar o número de alterações
feitas entre cada referência de
desempenho. Construa suas
modificações para testar uma hipótese
específica. Isso permitirá que você inclua
ou exclua de forma meticulosa cada
candidato a melhoria. Ao aprimorar uma
solução, você entenderá exatamente
por que está vendo a mudança no
comportamento, e isso muitas vezes
revela uma série de opções adicionais de
possível melhoria.
Análise dos dados
Depois de fazer alterações em seu
sistema, você vai querer determinar
se elas tiveram o efeito desejado. Para
conseguir isso, repita as medidas tomadas
para a linha de base original por meio
de uma escala de tempo similarmente
representativa. Você pode então
comparar as duas linhas de base para:
• Determinar se suas alterações causaram
o efeito desejado — Quando você ajustar
uma configuração, otimizar um índice
ou uma mudança no código SQL, a linha
de base permitirá dizer se essa mudança
teve o efeito desejado. Se você receber
uma reclamação sobre um desempenho
mais lento, poderá dizer com certeza se
a instrução é precisa sob a perspectiva do
banco de dados.
O erro mais frequente que a maioria dos
DBAs juniores comete é tirar conclusões
precipitadas. Muitas vezes, você verá alguém
pular de alegria ao observar um aumento
imediato no desempenho depois de fazer
uma ou mais alterações. Eles implantam na
produção e se apressam em enviar e-mails
informando que o problema foi resolvido. Mas
as comemorações poderão ter curta duração
quando os mesmos problemas ressurgem
algum tempo depois ou algum efeito colateral
desconhecido provocar outro problema.
Muitas vezes, isso pode resultar em um estado
que é menos desejável do que o original.
Quando achar ter encontrado a resposta para
um problema, teste-a e faça uma referência de
desempenho dos resultados na linha de base.
Esta é a única maneira confiável de saber com
certeza que você progrediu.
• Determinar se uma alteração apresentou
algum efeito colateral inesperado —
Uma linha de base também permite ver
objetivamente se uma mudança afetou um
contador ou medida que você não esperava
ser afetado.
• Antecipar os problemas antes que eles
aconteçam — Ao usar uma linha de base, você
pode estabelecer normas de desempenho
precisas em condições de carga típicas. Isto
lhe permitirá prever se e quando você terá
problemas no futuro, com base em como
o consumo de recursos está tendendo hoje
ou nas cargas de trabalho projetadas para
cenários futuros. Por exemplo, você executa
o planejamento de capacidade: ao extrapolar
o consumo normal de recursos atuais por
usuário conectado, será possível prever quando
seus sistemas terão gargalos de conexão do
usuário.
• Solucionar problemas de forma mais eficaz —
Já passou vários dias e noites combatendo
um problema de desempenho com seu banco
de dados só para descobrir que na verdade
não tinha nada a ver com o banco de dados
em si? Estabelecer uma linha de base torna
muito mais fácil eliminar a instância de banco
de dados e apontar o culpado. Por exemplo,
suponha que o consumo de memória, de
repente, disparou. Você percebe o número
de conexões aumentando drasticamente e
bem acima de sua linha de base. Uma ligação
rápida para o administrador da aplicação
confirma que um novo módulo foi implantado
na loja virtual. Não demora muito para
provar que o novo desenvolvedor júnior está
escrevendo um código que não libera as
conexões de banco de dados como deveria.
Aposto que você pode imaginar muitas outras
situações como esta.
Excluir as coisas que NÃO são responsáveis ​​
por um problema pode poupar uma grande
quantidade de tempo eliminando a confusão
e proporcionando um foco sobre exatamente
o que está causando o problema. Existem
muitos exemplos em que podemos comparar
contadores do sistema aos contadores do
SQL Server para incluir ou excluir rapidamente
o banco de dados de um problema. Depois
que os suspeitos de costume forem
descartados, você poderá começar a busca
por desvios significativos na linha de base,
coletar indicadores relacionados e analisar a
causa raiz.
Repita o processo de criação de linha de
base quantas vezes forem necessárias.
O bom ajuste é um processo iterativo
e científico. As dicas apresentadas
neste documento fornecem um bom
ponto de partida, mas elas são apenas
isso: um ponto de partida. O ajuste de
desempenho é altamente personalizado
e regido pelo design, composição e uso
de cada sistema individual.
A metodologia de criação de linha de
base e referência de desempenho é o
elemento central do bom e confiável
ajuste de desempenho. Ela fornece o
mapa, uma referência e os pontos de
interesse necessários para descobrirmos
onde precisamos ir e como chegar
lá, para nos ajudar a garantir que não
nos perderemos no caminho. Uma
abordagem estruturada nos permite criar
um desempenho confiável e consistente
em todo nosso portfólio do banco de
dados.
Dica nº 9. Os contadores de
desempenho fornecem informações
rápidas e úteis sobre as operações
atualmente em execução.
Motivos para monitorar os contadores
de desempenho
Uma pergunta muito comum relacionada
à otimização de desempenho do
SQL Server é: "Quais contadores
eu devo monitorar?" Em termos de
gerenciamento do SQL Server, há dois
grandes motivos para monitorar os
contadores de desempenho:
• Aumento da eficiência operacional
• Prevenção de gargalos
Embora se sobreponham, esses dois
motivos permitem que você escolha
facilmente uma série de pontos de dados
para monitorar.
Monitorar contadores de desempenho
para aumentar a eficiência operacional
O monitoramento operacional verifica
o uso geral de recursos. Ele ajuda a
responder a perguntas, tais como:
• O servidor está prestes a ficar sem
recursos, como CPU, espaço em disco ou
memória?
• Os arquivos de dados podem aumentar?
• Os arquivos de dados de tamanho fixo têm
espaço livre para dados?
5
A quantidade de
dados necessários
para estabelecer
uma linha de base
depende de como a
carga varia ao longo
do tempo.
Você também pode usar os dados para
fins de tendência. Um bom exemplo seria
coletar os tamanhos de todos os arquivos
de dados para direcionar suas taxas de
crescimento e prever futuras necessidades
de recursos.
Limite o número
de alterações
feitas entre cada
referência de
desempenho, para
que possa avaliar
meticulosamente
os efeitos de cada
mudança.
Medidor
Permite a você
Processor\%Processor Time
Monitorar o consumo da CPU no servidor
LogicalDisk\Free MB
Monitorar o espaço livre no(s) disco(s)
MSSQL$Instance:Databases\DataFile(s) Size (KB)
Direcionar o crescimento ao longo do tempo
Memory\Pages/sec
Verificar a paginação, que é uma boa indicação de
que os recursos de memória podem ser curtos
Memory\Available MBytes
Ver a quantidade de memória física disponível para
uso do sistema
Monitorar os contadores de desempenho
para evitar gargalos
O monitoramento de gargalos se
concentra mais em questões relacionadas
ao desempenho. Os dados coletados
ajudam a responder a perguntas, tais
como:
• Os principais subsistemas do SQL
Server, como o cache de buffer e
cache de planos estão íntegros?
• Existe contenção no banco de dados?
Para responder a essas perguntas,
analise os seguintes contadores:
• Existe um gargalo da CPU?
• Existe um gargalo de E/S?
Medidor
Permite a você
Processor\%Processor Time
Monitorar o consumo da CPU permite que você
verifique se há um gargalo no servidor (indicado pelo
alto uso sustentado).
Alta porcentagem de espera de sinal
Disco físico\média Tamanho da fila do disco
6
Para responder às três perguntas feitas
acima, você deve analisar os seguintes
contadores:
Espera de sinal é o tempo que um trabalhador gasta
aguardando o tempo da CPU após ter acabado de
esperar algo mais (como um bloqueio, uma trava ou
outro sinal de espera).
O tempo gasto esperando a CPU é indicativo
de um gargalo da CPU.
A espera de sinal pode ser encontrada executando
DBCC SQLPERF(waitstats) no SQL Server 2000
ou consultando sys.dm_os_wait_stats no
SQL Server 2005.
Verifique se há gargalos de disco: se o valor for
superior a 2, então será provável que exista um
gargalo de disco.
MSSQL$Instance:Buffer Manager\Page Life
Expectativa
Expectativa de vida da página é o número de
segundos que uma página permanece no cache do
buffer. Um número baixo indica que as páginas estão
sendo despejadas sem gastar muito tempo no cache,
o que reduz a eficácia do cache.
MSSQL$Instance:Plan Cache\Cache Hit Ratio
Uma baixa taxa de acertos do cache de planos
significa que os planos não estão sendo reutilizados.
MSSQL$Instance:General Statistics\Processes
Blocos
Blocos longos indicam contenção de recursos.
Dica nº 8. Alterar as configurações
do servidor pode proporcionar um
ambiente mais estável.
Alterar as configurações dentro de um
produto para torná-lo mais estável
pode parecer contraintuitivo, mas,
neste caso, realmente funciona. Como
um DBA, seu trabalho será garantir
um nível consistente de desempenho
para seus usuários quando eles
solicitam dados de suas aplicações.
Sem alterar as configurações descritas
no restante deste documento, você
pode experimentar cenários que
podem degradar o desempenho
de seus usuários, sem aviso prévio.
Essas opções podem ser facilmente
encontradas em sys. configurations,
que lista as configurações no nível do
servidor, disponíveis juntamente com
informações adicionais. O atributo
Is_Dynamic em sys.configurations
mostra se a instância do SQL Server
precisará ser reiniciada após uma
alteração da configuração. Para
fazer a alteração, você chamaria
o procedimento sp_configure
armazenado com os parâmetros
relevantes.
As configurações de memória Mín. e
Máx. podem garantir um determinado
nível de desempenho.
Suponhamos que temos um cluster
Ativo/Ativo (ou um único host com
várias instâncias). Podemos fazer
algumas alterações de configuração
que podem garantir que vamos cumprir
nossos SLAs, no caso de um failover,
em que ambas as instâncias residem na
mesma caixa física.
Neste cenário, fazemos alterações na
configuração de memória Mín. e Máx.
para garantir que o host físico tenha
memória suficiente para lidar com
cada instância sem precisar tentar
constantemente cortar de forma
agressiva o conjunto de trabalho do
outro. Uma alteração semelhante na
configuração pode ser feita para utilizar
alguns processadores, a fim de garantir
um determinado nível de desempenho.
É importante observar que configurar
7
a memória máxima não é apenas
adequado para instâncias em um
cluster, mas também aquelas instâncias
que compartilham recursos com
qualquer outra aplicação. Se o uso de
memória do SQL Server for muito alto,
o sistema operacional poderá cortar
agressivamente a quantidade de memória
que pode utilizar, a fim de permitir que
ele próprio ou outra sala de aplicações
funcione.
• SQL Server 2008 — No SQL Server 2008
R2 e anterior, a configuração de memória
Mín. e Máx. restringe apenas a quantidade
de memória que o pool de buffers usa (mais
especificamente, apenas alocações de
página única de 8 KB). Isso significa que se
você executasse processos fora do pool de
buffers (como procedimentos armazenados
estendidos, CLR ou outros componentes,
como Integration Services, Reporting
Services ou Analysis Services), você
precisaria reduzir ainda mais esse valor.
• SQL Server 2012 — O SQL Server 2012
muda um pouco as coisas quando há um
gerenciador de memória central. Este
gerenciador de memória agora incorpora
alocações de várias páginas, como grandes
páginas de dados e planos em cache que
são maiores do que 8 KB. Este espaço de
memória agora também inclui algumas
funcionalidades de CLR.
Duas opções de servidor podem ajudar o
desempenho indiretamente.
Não há opções que auxiliam diretamente
o desempenho, mas há duas opções que
podem ajudar de forma indireta.
• Padrão de compactação de back-up —
Esta opção define que os backups sejam
compactados por padrão. Embora isto
possa produzir ciclos extras de CPU
durante a compactação, em geral, menos
ciclos de CPU são usados ​​em comparação
a um back-up não compactado, pois
menos dados são gravados no disco.
Dependendo da sua arquitetura de E/S, a
configuração dessa opção também pode
reduzir a contenção de E/S.
• A segunda opção pode ou não ser
divulgada em uma dica futura no cache de
planos. Você vai ter que esperar e ver se
chegou à nossa lista de top 10.
Sage aconselha
sobre como
solucionar
problemas em
apenas três
palavras: "Eliminar
ou incriminar".
Dica nº 7. Encontre consultas de
invasores no cache do plano.
Depois de identificar um gargalo,
você precisará encontrar a carga de
trabalho que está causando o gargalo.
Isso é muito mais fácil de fazer desde a
introdução de objetos de gerenciamento
dinâmico (DMOs) no SQL Server 2005.
Usuários do SQL Server 2000 e anterior
terão de se contentar com o uso do
Profiler ou rastreamento (mais sobre isso
na Dica nº 6).
Monitorar os
contadores de
desempenho pode
ajudar a aumentar
a eficiência
operacional e evitar
gargalos.
Diagnosticar um gargalo de
CPU No SQL Server, se você
identificou um gargalo de CPU, a
primeira coisa que deverá fazer é
obter os principais consumidores
de CPU no servidor. Esta é uma
consulta muito simples em sys.
dm_exec_query_stats:
SELECT TOP 50
qs.total_worker_time / execution_count AS avg_worker_time,
substring (st.text, (qs.statement_start_offset / 2) + 1,
( ( CASE qs.statement_end_offset WHEN -1
THEN datalength (st.text)
ELSE qs.statement_end_offset END
- qs.statement_start_offset)/ 2)+ 1)
AS statement_text,
*
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text (qs.sql_handle) AS st
ORDER BY
avg_worker_time DESC
A parte realmente útil dessa consulta é
sua habilidade de usar aplicação cruzada
e sys.dm_exec_sql_text para obter a
instrução SQL para analisá-la.
Diagnosticar um gargalo de E/S A
história é semelhante para um gargalo
de E/S:
SELECT TOP 50
(total_logical_reads + total_logical_writes) AS total_logical_io,
(total_logical_reads / execution_count) AS avg_logical_reads,
(total_logical_writes / execution_count) AS avg_logical_writes,
(total_physical_reads / execution_count) AS avg_phys_reads,
substring (st.text,
(qs.statement_start_offset / 2) + 1,
((CASE qs.statement_end_offset WHEN -1
THEN datalength (st.text)
ELSE qs.statement_end_offset END
- qs.statement_start_offset)/ 2)+ 1)
AS statement_text,
*
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text (qs.sql_handle) AS st
ORDER BY total_logical_io DESC
8
Dica nº 6. O SQL Profiler é seu amigo.
Entender o SQL Server Profiler e os
eventos estendidos
O SQL Server Profiler é uma ferramenta
nativa fornecida com o SQL Server.
Ele permite que você crie um arquivo
de rastreamento para capturar eventos
que ocorrem no SQL Server. Esses
rastreamentos podem ser inestimáveis
na prestação de informações sobre
sua carga de trabalho e consultas com
baixo desempenho. Este white paper
não discutirá os detalhes sobre como
usar a ferramenta do Profiler. Para obter
informações sobre como usar o SQL
Server Profiler, confira o tutorial em
vídeo no SQLServerPedia.
Embora seja verdade que o SQL Server
Profiler foi marcado como preterido no
SQL Server 2012 em favor de eventos
estendidos, deve-se observar que isso
é apenas para o mecanismo do banco
de dados e não para o SQL Server
Analysis Services. O Profiler ainda pode
fornecer grandes informações sobre
o funcionamento de aplicações em
tempo real para muitos ambientes do
SQL Server.
O uso de eventos estendidos está fora
do escopo deste white paper. Para obter
uma descrição detalhada dos eventos
estendidos, consulte o white paper
"Como usar os eventos estendidos
e notificações do SQL Server para
solucionar problemas de desempenho
de forma proativa" (em inglês). Basta
dizer que os eventos estendidos foram
introduzidos no SQL Server 2008 e
atualizados no SQL Server 2012 para
incluir mais eventos e uma interface de
usuário muito aguardada.
Observe que a execução do Profiler
requer a permissão ALTER TRACE.
Como usar o SQL Profiler
Veja como construir o processo
de coleta de dados no Monitor de
desempenho (Perfmon) e correlacionar
a informação sobre o uso de recursos
com dados nos eventos que estão sendo
disparados dentro do SQL Server:
1. Abra o Perfmon.
2.Se você não tiver um coletor de dados
definido já configurado, crie um
agora usando a opção avançada e os
contadores da Dica 9 como um guia.
Não inicie o coletor de dados definido
ainda.
3.
Abra o Profiler.
4.Crie um novo rastreamento especificando
os detalhes sobre a instância, os eventos
e as colunas que você deseja monitorar,
bem como o destino.
5.
Inicie o rastreamento.
6.Retorne para o Perfmon para iniciar o
coletor de dados definido.
7.Deixe ambas as sessões executando
até que os dados necessários sejam
capturados.
8.Pare o rastreamento do Profiler. Salve o
rastreamento e, em seguida, feche-o.
9.Volte para o Perfmon e pare a coleta de
dados definida.
10.Abra o arquivo de rastreamento salvo
recentemente no Profiler.
11.Clique em File (Arquivo) e, em seguida,
Import Performance Data (Importar
dados de desempenho).
12.Navegue até o arquivo de dados
da Coleta de dados e selecione os
contadores de desempenho de interesse.
Agora, você será capaz de ver os
contadores de desempenho em
conjunto com o arquivo de rastreamento
do Profiler (consulte a Figura 2), o que
permitirá uma resolução de gargalos
muito mais rápida.
Dica extra: as etapas acima usam
a interface do cliente. Para poupar
recursos, um rastreamento no lado do
servidor seria mais eficiente. Consulte
os livros on-line para obter informações
sobre como iniciar e parar rastreamentos
no lado do servidor.
9
O monitoramento
operacional
verifica o uso geral
de recursos. O
monitoramento
de gargalos se
concentra mais
em questões
relacionadas ao
desempenho.
O atributo Is_
Dynamic em Sys.
Configurations
mostra se a
instância do SQL
Server precisará
ser reiniciada após
uma alteração da
configuração.
Figura 2. Uma visão correlacionada de contadores de desempenho em conjunto com o
arquivo de rastreamento do Profiler
Dica nº 5. Configure SANs para
desempenho do SQL Server.
As redes de área de armazenamento (SANs)
são fantásticas. Elas oferecem a capacidade
de provisionar e gerenciar o armazenamento
de uma forma simples. SANs podem ser
configurados para um desempenho rápido
a partir de uma perspectiva do SQL Server,
mas muitas vezes não são. As organizações
geralmente implementam SANs para
consolidação de armazenamento e facilidade
de gerenciamento, não para desempenho.
Para piorar a situação, geralmente você não
tem controle direto sobre a forma como
o provisionamento é feito em uma SAN.
Assim, você frequentemente verá que a SAN
foi configurada para um volume lógico em
que você deve colocar todos os arquivos de
dados.
Melhores práticas para configurar SANs para
desempenho de E/S
Ter todos os arquivos em um único volume
geralmente não é uma boa ideia se você
quiser o melhor desempenho de E/S. Como
melhores práticas, você vai querer:
• Colocar os arquivos de registro em seu
próprio volume, separados dos arquivos
de dados. Os arquivos de registro são
quase exclusivamente gravados como
sequência e não leitura (as exceções incluem
Espelhamento de banco de dados e Grupos
de disponibilidade Always On). Você deve
sempre configurar para rápido desempenho de
gravação.
•
Colocar tempdb em seu próprio volume.
Tempdb é usado para uma série de propósitos
pelo SQL Server internamente, então, tê-lo em
10
seu próprio subsistema de E/S é útil. Para ajustar
ainda mais o desempenho, primeiro você
precisa de algumas estatísticas.
• Considere a criação de vários arquivos de
dados e grupos de arquivos em VLDBs para
se beneficiar de operações de E/S paralelas.
• Coloque os backups em suas próprias
unidades para fins de redundância, bem
como reduzir a contenção de E/S com outros
volumes durante os períodos de manutenção.
Coleta de dados
Há, é claro, os contadores de disco do
Windows, que dão uma ideia do que o
Windows acha que está acontecendo. (Não
se esqueça de ajustar os números brutos com
base na configuração RAID.) Fornecedores de
SAN costumam oferecer seus próprios dados
de desempenho.
O SQL Server também fornece
informações de E/S no nível do arquivo:
• Versões anteriores ao SQL 2005 — Use a
função fn_virtualfilestats.
• Versões posteriores — Use a função de
gerenciamento dinâmico sys.dm_io_virtual_
file_stats.
Ao usar essa função no seguinte código,
você pode:
•Derivar taxas de E/S para leituras e gravações
•Obter a taxa de transferência de E/S
•Obter uma média de tempo por E/S
•Analisar os tempos de espera de E/S
SELECT db_name (a.database_id) AS [DatabaseName],
b.name AS [FileName], a.File_ID AS [FileID],
CASE WHEN a.file_id = 2 THEN ‘Log’ ELSE ‘Data’ END AS [FileType],
a.Num_of_Reads AS [NumReads],
a.num_of_bytes_read AS [NumBytesRead],
a.io_stall_read_ms AS [IOStallReadsMS],
a.num_of_writes AS [NumWrites],
a.num_of_bytes_written AS [NumBytesWritten],
a.io_stall_write_ms AS [IOStallWritesMS],
a.io_stall [TotalIOStallMS],
DATEADD (ms, -a.sample_ms, GETDATE ()) [LastReset],
( (a.size_on_disk_bytes / 1024) / 1024.0) AS [SizeOnDiskMB],
UPPER (LEFT (b.physical_name, 2)) AS [DiskLocation]
FROM sys.dm_io_virtual_file_stats (NULL, NULL) a
JOIN sys.master_files b
ON a.file_id = b.file_id AND a.database_id = b.database_id
ORDER BY a.io_stall DESC;
Análise dos dados
Preste atenção especial ao valor
"LastReset" na consulta; ele mostra a
última vez que o serviço do SQL Server
foi iniciado. Os dados de objetos de
gerenciamento dinâmico não são
persistentes, então, quaisquer dados
sendo usados para fins de ajuste devem
ser validados em relação ao tempo de
execução do serviço, caso contrário,
podem ser feitas falsas suposições.
Ao usar esses números, você poderá
rapidamente restringir quais arquivos são
responsáveis ​​pelo consumo da largura de
banda de E/S e fazer perguntas como:
• Este E/S é necessário? Está faltando um
índice?
• Será que uma tabela ou índice em um
arquivo é responsável? Posso colocar esse
índice ou tabela em outro arquivo em outro
volume?
Dicas para ajustar seu hardware se os
arquivos de banco de dados estiverem
corretamente colocados e todos os
pontos de acesso de objetos tiverem
sido identificados e separados em
diferentes volumes, então, estará na
hora de dar uma olhada no hardware.
Ajustar o hardware é um tema
especializado fora do escopo deste
white paper. Porém, há algumas
melhores práticas e dicas que eu posso
compartilhar com você para tornar isso
mais fácil:
• Não use o tamanho da unidade de
alocação padrão ao criar volumes para
usar com o SQL Server. O SQL Server usa
extensões de 64 KB, então, esse valor
deve ser o mínimo.
• Veja se suas partições estão alinhadas
corretamente. Jimmy May escreveu
um white paper fantástico sobre esse
assunto. Partições desalinhadas podem
reduzir o desempenho em até 30%.
• Crie uma referência de desempenho para
a E/S do seu sistema usando uma ferramenta
como SQLIO. Você pode assistir a um
tutorial sobre essa ferramenta.
Figura 3. Informações de E/S em nível do arquivo do SQL Server
11
Configurar backups
para que sejam
compactados por
padrão reduz a
contenção de E/S.
Dica nº 4. Cursores e outro T-SQL
ruim frequentemente voltam para
assombrar as aplicações.
Um exemplo de código ruim
Em um trabalho anterior, descobri o que
deve ser o pior código que já vi na minha
carreira. O sistema foi substituído há muito
tempo, mas aqui está um resumo do
processo pelo qual a função passou:
1.Aceite o valor de parâmetro a ser removido.
O SQL Profiler
ainda pode
fornecer grandes
informações sobre
o funcionamento
de aplicações em
tempo real para
muitos ambientes
do SQL Server.
2.Aceite a expressão de parâmetro a ser
removida.
3.Descubra o tamanho da expressão.
4.Carregue a expressão em uma variável.
5.Execute um ciclo com cada caractere na
variável e verifique se esse caractere combina
com um dos valores a ser removido. Se
combinar, atualize a variável para removê-la.
6.Siga para o próximo caractere até que a
expressão seja completamente verificada.
Se você estiver horrorizado, então, somos
dois. É claro que estou explicando a
tentativa de alguém de escrever sua própria
instrução "REPLACE" do T-SQL!
A pior parte é que essa função foi utilizada
para atualizar os endereços como parte
de uma rotina de endereçamento e seria
chamada dezenas de milhares de vezes por
dia.
Executar um rastreamento do Profiler no
lado do servidor permite visualizar a carga
de trabalho do servidor e escolher partes de
código executadas com frequência (que é
como essa "joia" foi encontrada).
Ajuste de consulta usando planos de
consulta Um T-SQL ruim também pode
parecer com consultas ineficientes que
não usam índices, principalmente porque o
índice está incorreto ou ausente. É de vital
importância ter um bom entendimento
sobre como ajustar consultas usando
planos de consulta.
Uma discussão detalhada sobre ajuste de
consulta usando planos de consulta está
fora do escopo deste white paper. No
entanto, a maneira mais simples de iniciar
este processo é transformando operações
SCAN em SEEKs. Os SCANs leem cada linha
na tabela ou índice, então, para tabelas
grandes, eles são caros em termos de E/S.
Um SEEK, por outro lado, usará um índice
para ir direto até a linha necessária, o que,
obviamente, exige um índice. Se você
encontrar SCANs em sua carga de trabalho,
os índices poderão estar ausentes.
Existe uma série de bons livros sobre
esse tema, inclusive:
• "Professional SQL Server Execution Plan
Tuning" (Ajuste do plano de execução do
Professional SQL Server) por Grant Fritchey
• "Professional SQL Server 2012 Internals &
Troubleshooting" (Solução de problemas e
operações internas do Professional SQL Server
2012) por Christian Bolton, Rob Farley, Glenn
Berry, Justin Langford, Gavin Payne, Amit
Banerjee, Michael Anderson, James Boother e
Steven Wort
• "T-SQL Fundamentals for Microsoft SQL Server
2012 and SQL Azure" (Princípios básicos do
T-SQL para Microsoft SQL Server 2012 e SQL
Azure) por Itzik Ben-Gan
Figura 4. Exemplo de um grande plano de consulta
12
Dica nº 3. Aumente a reutilização do plano Avaliar se você está recebendo um bom
para obter melhor caching do SQL Server. plano de reutilização
Por que a reutilização de planos de consulta é
importante
Antes de executar uma instrução SQL, o SQL
Server primeiro cria um plano de consulta.
Isso define o método que o SQL Server usará
para levar a instrução lógica da consulta e
implementá-la como uma ação física nos
dados.
Há alguns contadores de desempenho
disponíveis no objeto de desempenho
de estatísticas SQL que lhe dirão se você
está tendo uma boa reutilização do
plano. Esta fórmula informa a relação de
lotes submetidos para compilações:
Você quer que esse número seja o
mais baixo possível. Uma relação 1:1
significa que cada lote enviado está
Criar um plano de consulta pode exigir CPU
significativa. Assim, o SQL Server será executado sendo compilado, e não há nenhuma
reutilização de plano.
de forma mais eficiente se puder reutilizar
planos de consulta em vez de criar um novo
cada vez que uma instrução SQL for executada.
(Batch Requests/sec – SQL Compilations/sec) / Batch Requests/sec
Abordar uma reutilização de plano ruim
Não é fácil definir a carga de trabalho
exata responsável pela reutilização ruim
do plano, pois o problema geralmente
está no código da aplicação cliente que
envia as consultas. Portanto, você pode
precisar analisar o código da aplicação
cliente que está enviando as consultas.
Para encontrar o código incorporado
dentro de uma aplicação cliente,
você terá que usar os eventos
estendidos ou o Profiler. Ao adicionar
o evento SQL:StmtRecompile em um
rastreamento, você será capaz de ver
quando um evento de recompilação
ocorre. (Há também um evento chamado
SP:Recompile, que é incluído para
compatibilidade com versões anteriores,
pois a ocorrência de recompilação foi
alterada no nível de procedimento para o
nível de instrução no SQL Server 2005.)
13
Um problema comum é que o
código não está usando instruções
parametrizadas preparadas. Usar
consultas parametrizadas não só melhora
a reutilização do plano e sobrecarga
de compilação, mas também reduz
o risco de ataque de injeção de SQL
envolvido ao analisar parâmetros por
meio da concatenação de cadeias.
A Figura 5 mostra dois exemplos de
código. Embora sejam inventados, eles
ilustram a diferença entre construir uma
instrução por meio de concatenação de
cadeia e usar instruções preparadas com
parâmetros.
SANs podem ser
configurados para
um desempenho
rápido a partir de
uma perspectiva
do SQL Server,
mas muitas vezes
não são.
Ruim
As informações
de E/S no nível do
arquivo do SQL
Server podem ajudar
você a identificar
quais arquivos estão
consumindo largura
de banda de E/S.
Bom
Figura 5. Comparação do código que constrói uma instrução por meio de
concatenação de cadeia e código que usa instruções preparadas com parâmetros
O SQL Server não pode reutilizar o plano
do exemplo "ruim" na Figura 5. Se um
parâmetro for um tipo de cadeia, esta
função poderá ser usada para montar
um ataque de injeção de SQL. O "bom"
exemplo não é suscetível a um ataque de
injeção de SQL porque um parâmetro é
usado e o SQL Server é capaz de reutilizar
o plano.
A memória alocada para o cache
de planos reside no pool de buffer.
Portanto, um cache de planos
sobrecarregado reduz a quantidade
de páginas de dados que podem ser
armazenadas no cache de buffer, assim,
haverá mais viagens de ida e volta para
buscar dados no subsistema de E/S, que
podem ser muito caras.
A definição de configuração ausente
na Dica nº 8
Dica nº 2. Aprenda a ler o cache de
buffer do SQL Server e minimizar a
sobrecarga do cache.
Aqueles de vocês com uma boa memória
vão lembrar que na Dica nº 8 (em
que falamos sobre as mudanças de
configuração) havia mais um conselho
que não foi falado. O SQL Server 2008
introduziu uma definição de configuração
chamada "Otimizar para cargas de trabalho
ad hoc". Essa configuração solicitará que
o SQL Server armazene um plano de
stub em vez de um plano completo no
cache de planos. Isto é especialmente
útil para ambientes que usam o código
T-SQL construído dinamicamente ou Linq,
que pode resultar na não reutilização do
código.
14
Por que o cache de buffer é importante
Como mencionado no segue bastante
elegante acima, o cache de buffer
é uma grande área de memória
usada pelo SQL Server para reduzir
a necessidade de realizar E/S físico.
Nenhuma execução de consulta do
SQL Server lê os dados diretamente
de um disco; as páginas do banco de
dados são lidas no cache de buffer. Se a
página procurada não estiver no cache
de buffer, uma solicitação de E/S físico
ficará na fila. Em seguida, a consulta
aguarda e a página é obtida no disco.
As alterações dos dados em uma
página de uma operação DELETE ou
UPDATE também são feitas às páginas
no cache de buffer. Estas alterações são
depois transmitidas ao disco. Todo esse
mecanismo permite que o SQL Server
otimize o E/S físico de várias maneiras:
Eu gostaria de concluir esta seção com
uma analogia; muitas pessoas argumentam
que a inovação de travas antibloqueio e
de outras tecnologias assistidas significa
que as distâncias de travamento devem
ser reduzidas, e também que os limites
de velocidade podem ser aumentados de
acordo com essa nova tecnologia. O valor
• Várias páginas podem ser lidas e escritas em
de aviso de 300 segundos (cinco minutos)
uma operação de E/S.
para Expectativa de vida da página incorre
• A leitura antecipada pode ser implementada.
em um debate semelhante na comunidade
O SQL Server pode notar que para
do SQL Server: alguns acreditam que esta é
determinados tipos de operações, pode ser
uma regra dura e rápida, enquanto outros
útil ler páginas em sequência, supondo que
acreditam que o aumento da capacidade
logo depois de ler a página solicitada, você
de memória na maioria dos servidores nos
vai querer ler a página adjacente.
dias de hoje significa que o valor deve ser
Nota: a fragmentação de índice prejudicará de milhares e não centenas. Essa diferença
de opinião destaca a importância das linhas
a capacidade do SQL Server de executar a
de base e por que é tão importante ter uma
otimização de leitura antecipada.
compreensão detalhada do que os níveis
Avaliação da integridade do cache de
de alerta de cada contador de desempenho
buffer
deve ser no seu ambiente,
Há duas indicações da integridade do
cache de buffer:
Sobrecarga do cache
• Taxa de acertos do cache
Durante uma grande verificação de tabela
MSSQL$Instance:Buffer Manager\Buffer —
ou índice, cada página na verificação deve
Esta é a relação de páginas encontradas no
passar pelo cache de buffer, o que significa
cache e páginas não encontradas no cache
que páginas possivelmente úteis serão
(as páginas que devem ser lidas fora do disco). despejadas para dar espaço a páginas que
Idealmente, você quer que esse número seja
provavelmente não serão lidas mais de
o mais alto possível. É possível ter uma alta
uma vez. Isto gera alto índice de E/S já
taxa de acertos, mas ainda experimentar a
que as páginas despejadas devem ser lidas
sobrecarga do cache.
no disco novamente. Esta sobrecarga de
• MSSQL$Instance:Buffer Manager\Expectativa cache é geralmente uma indicação de que
de vida da página — Esta é a quantidade
grandes tabelas ou índices estão sendo
de tempo que o SQL Server está mantendo
verificados.
as páginas no cache de buffer antes de
serem despejadas. A Microsoft diz que uma
expectativa de vida da página superior a
cinco minutos é satisfatória. Se a expectativa
de vida ficar abaixo disso, poderá ser um
indicador de pressão de memória (memória
insuficiente) ou sobrecarga do cache.
Para saber quais tabelas e índices estão
ocupando mais espaço no cache de buffer,
você pode examinar o DMV sys.dm_os_
buffer_descriptors (disponível a partir do
SQL Server 2005). A consulta de exemplo a
seguir ilustra como acessar a lista
SELECT o.name, i.name, bd.*
FROM sys.dm_os_buffer_descriptors bd
INNER JOIN sys.allocation_units a
ON bd.allocation_unit_id = a.allocation_unit_id
INNER JOIN
sys.partitions p
ON (a.container_id = p.hobt_id AND a.type IN (1, 3))
OR (a.container_id = p.partition_id AND a.type = 2)
INNER JOIN sys.objects o ON p.object_id = o.object_id
INNER JOIN sys.indexes i
ON p.object_id = i.object_id AND p.index_id = i.index_id
15
Se os arquivos
de banco de
dados estiverem
corretamente
colocados e todos
os pontos de acesso
de objetos tiverem
sido identificados
e separados em
diferentes volumes,
então é hora de
dar uma olhada no
hardware.
de tabelas ou índices que estão
consumindo espaço no cache de buffer
do SQL Server:
Você também pode usar os DMVs de
índice para descobrir quais tabelas ou
índices têm grandes quantidades de E/S
física.
Dica nº 1. Entenda como os índices
são usados e
​​ encontre índices ruins.
Executar um
rastreamento
do Profiler no
lado do servidor
permitirá que
você visualize a
carga de trabalho
do servidor e
selecione partes
de código
executadas com
frequência.
O SQL Server 2012 fornece alguns dados
muito úteis sobre índices, que você pode
buscar usando DMOs implantados na
versão SQL Server 2005.
Utilização do DMO sys.dm_db_index_
operational_stats
sys.dm_db_index_operational_stats
contém informações sobre o atual baixo
nível de E/S, bloqueio, travamento e
atividade do método de acesso para cada
índice. Use esse DMF para responder às
seguintes perguntas:
• Tenho um índice "favorito"? Tenho um
índice no qual existe contenção? As
colunas row lock wait in ms/page lock wait
in ms podem nos dizer se existem esperas
neste índice.
• Tenho um índice que está sendo usado
de forma ineficiente? Quais índices estão
atualmente em gargalos de E/S? A coluna
page_io_latch_wait_ ms poderá nos dizer
se houve espera de E/S ao trazer páginas
de índice para o cache do buffer; um bom
indicador de que existe um padrão de
acesso à verificação.
• Que tipo de padrões de acesso estão
em uso? As colunas range_scan_count
e singleton_ lookup_count podem nos
dizer quais tipos de padrões de acesso são
usados em um índice específico.
A Figura 6 ilustra a saída de uma consulta
que lista índices pela espera total
PAGE_IO_ LATCH. Isso será muito útil
ao tentar determinar quais índices estão
envolvidos em gargalos de E/S.
Utilização do DMO sys.dm_db_index_
usage_stats
sys.dm_db_index_usage_stats contém
contagens de diferentes tipos de
operações de índice e a hora que cada
tipo de operação foi executado pela
última vez. Use esse DMV para responder
às seguintes perguntas:
• Como os usuários estão usando os
índices? As colunas user_ seeks, user_
scans, user_lookups podem informar os
tipos e o significado das operações do
usuário nos índices.
• Qual é o custo de um índice? A coluna
user_updates pode informar qual é o nível
de manutenção para um índice.
• Quando um índice foi usado pela última
vez? As colunas last_* podem informar a
última vez que uma operação ocorreu em
um índice.
Figura 6. Índices listados pela espera total de PAGE_IO_LATCH
16
Figura 7. Índices listados pelo número total de user_seeks
A Figura 7 ilustra a saída de uma consulta
que lista índices pelo número total de
user_seeks. Se você quis identificar índices
que tiveram uma alta proporção de
verificações, poderá ordenar pela coluna
user_scans. Agora que você tem um
nome de índice, não seria bom descobrir
quais instruções SQL usaram esse índice?
No SQL Server 2005 e versões mais
recentes, você pode fazer isso.
Para recapitular, lembre-se
dessas 10 coisas ao otimizar o
desempenho do SQL Server:
10.A referência de desempenho facilita as
comparações de comportamento da
carga de trabalho e permite detectar
o comportamento anormal, pois você
tem uma boa indicação do que é um
comportamento normal.
9.Os contadores de desempenho fornecem
informações rápidas e úteis sobre as
operações atualmente em execução.
Há, naturalmente, muitas outras áreas
8.Alterar as configurações do servidor pode
para índices, como estratégia de design,
proporcionar um ambiente mais estável.
consolidação e manutenção. Se você
7.
DMOs ajudam você a identificar gargalos de
quiser ler mais sobre esta área vital de
desempenho rapidamente.
ajuste de desempenho do SQL Server, vá
até o SQLServerPedia ou confira alguns dos 6.Aprenda a usar o SQL Profiler, rastreamentos
e eventos estendidos.
webcasts da Dell ou white papers sobre o
5.SANs são mais do que apenas caixas pretas
assunto.
que executam E/S.
Conclusão
4.Cursores e outro T-SQL ruim
frequentemente voltam para assombrar as
Claro que há muito mais que 10 coisas
aplicações.
que você deve saber sobre o desempenho
3.Aumente a reutilização do plano para obter
do SQL Server. No entanto, este white
melhor caching do SQL Server.
paper oferece um bom ponto de partida e
algumas dicas práticas sobre otimização de 2.Aprenda a ler o cache de buffer do SQL
Server e a minimizar a sobrecarga do cache.
desempenho que você pode aplicar ao seu
ambiente do SQL Server.
E a dica número um para otimizar
o desempenho do SQL Server:
1.Domine a indexação aprendendo como
os índices são usados e como encontrar
índices ruins.
17
Uma expectativa
de vida da
página de
menos de cinco
minutos pode
indicar pressão
de memória
(memória
insuficiente) ou
sobrecarga no
cache.
Chamada para ação
Estou certo de que você está
ansioso para implementar as lições
aprendidas neste white paper.
A tabela abaixo lista as ações para
buscar um ambiente mais otimizado
do SQL Server:
Usar consultas
parametrizadas
não só melhora
a reutilização do
plano e sobrecarga
de compilação,
mas também reduz
o risco de ataque
de injeção de
SQL envolvido ao
analisar parâmetros
por meio da
concatenação de
cadeias.
18
Ação
Subtarefas
Obter aprovação para iniciar
o projeto
Fale com o seu gerente de linha e apresente o
argumento de que, com este projeto em vigor, você
pode ser proativo ao invés de reativo.
Identificar metas de desempenho
Fale com as partes interessadas da empresa para
determinar os níveis aceitáveis de desempenho.
Estabelecer uma linha de
base para o desempenho do
sistema
Colete dados relevantes e armazene-os em um
repositório personalizado ou de terceiros.
Identificar os principais
Faça download do pôster do Perfmon da Dell.
contadores de desempenho e
configurar rastreamento e/ou
eventos estendidos
Analisar as configurações do
servidor
Preste especial atenção às configurações de memória
e "Otimizar para cargas de trabalho ad hoc".
Analisar o subsistema de E/S
Se for o caso, fale com seus administradores de SAN
e considere realizar testes de carga de E/S usando
ferramentas como SQLIO, ou simplesmente determine
a taxa na qual você pode fazer operações intensivas de
leitura e gravação, como ao realizar back-ups.
Identificar consultas com
baixo desempenho
Analise os dados retornados a partir de rastreamentos,
sessões de eventos estendidos e cache de planos.
Refatorar códigos com baixo
desempenho
Confira as melhores práticas mais recentes no
serviço de blog sindicalizado do SQLServerPedia.
Manutenção de índice
Certifique-se de que seus índices sejam os melhores
possíveis.
Data esperada
Para obter mais informações
© 2013 Dell, Inc. TODOS OS DIREITOS RESERVADOS. Este
documento contém informações proprietárias protegidas por
direitos autorais. Nenhuma parte deste documento pode ser
reproduzida ou transmitida em qualquer forma ou por qualquer
meio, eletrônico ou mecânico, incluindo fotocópia e gravação
para qualquer propósito, sem a permissão por escrito da Dell,
Inc. ("Dell").
Dell, Dell Software, o logotipo e os produtos da Dell Software,
como identificados neste documento, são marcas registradas
da Dell, Inc. nos EUA e/ou em outros países. Todas as outras
marcas comerciais ou registradas são de responsabilidade de
seus respectivos proprietários.
As informações deste documento são relativas aos produtos
Dell. Nenhuma licença, expressa ou implícita, por embargo ou
de outra forma, a qualquer direito de propriedade intelectual é
concedida por este documento ou em conjunto com a venda
de produtos Dell. EXCETO CONFORME ESTABELECIDO NOS
TERMOS E CONDIÇÕES DA DELL, CONFORME ESPECIFICADO
NO CONTRATO DE LICENÇA PARA ESTE PRODUTO,
Sobre a Dell
A Dell Inc. (NASDAQ: DELL) escuta seus clientes e fornece,
globalmente, soluções de negócios e tecnologias inovadoras
e serviços que eles valorizam e nos quais confiam. Para obter
mais informações, visite o site www.dell.com.
Se você tiver dúvidas sobre o possível uso deste material,
entre em contato:
Dell Software
5 Polaris Way
Aliso Viejo, CA 92656
www.dell.com
Consulte nosso site para obter informações sobre escritórios
regionais ou internacionais.
Whitepaper-TenTips-OptimSQL-US-KS-2013-04-03
A DELL NÃO ASSUME NENHUMA RESPONSABILIDADE,
SEJA ELA QUAL FOR, E RENUNCIA A TODA GARANTIA
EXPLÍCITA, IMPLÍCITA OU ESTATUTÁRIA RELACIONADA A
SEUS PRODUTOS, INCLUINDO, SEM LIMITAÇÃO, A GARANTIA
IMPLÍCITA DE COMERCIABILIDADE, ADEQUAÇÃO A UM
PROPÓSITO ESPECÍFICO OU NÃO VIOLAÇÃO. EM HIPÓTESE
ALGUMA A DELL SERÁ RESPONSÁVEL POR QUAISQUER
DANOS DIRETOS, INDIRETOS, CONSEQUENCIAIS, PUNITIVOS,
ESPECIAIS OU INCIDENTAIS (INCLUINDO, SEM LIMITAÇÃO,
DANOS POR PERDA DE LUCROS, INTERRUPÇÃO DE
NEGÓCIOS OU PERDA DE INFORMAÇÕES), DECORRENTES DO
USO OU IMPOSSIBILIDADE DE UTILIZAR ESTE DOCUMENTO,
MESMO QUE A DELL TENHA SIDO AVISADA DA POSSIBILIDADE
DE TAIS DANOS. A Dell não faz quaisquer representações ou
garantias com relação à exatidão ou completude do conteúdo
deste documento e se reserva o direito de fazer alterações nas
especificações e descrições de produtos a qualquer momento
sem aviso prévio. A Dell não se compromete em atualizar as
informações contidas neste documento.
Download