Array
(
)

SQLServer com multiplos processadores.

Rc.salvador
   - 30 nov 2004

Estou utilizando o SQLServer2000 com um servidor quadriprocessado DELL com Pentium3Xeon e 2Gb de RAM, mas não estou obtendo uma performance satisfatória em algumas consultas ao banco de dados.
Já revisei e reconstrui os indices das tabelas mais criticas e otimizei as selects, mas mesmo assim em alguns casos o servidor é lento durante a consulta.
Acontece também que algumas vezes até desconecta aleatóriamente os usuários (TimeOut de 600sec);
As opções ´Boost SQL Server priority...´ e ´Use NT fibers´ estão habilitadas.
Alguém tem uma sugestão para que eu possa configurar e melhorar o funcionamento do SQL ?
Há alguma necessidade especial de mudar as Selects ?!

Marcus.magalhaes
   - 30 nov 2004

Bom dia.

- Seu servidor é dedicado à banco de dados ou compartilhado com aplicação?
- Verifique o Buffer Cache Hit Ratio, ele deve estar sempre acima de 85¬, à menos q sua aplicação faça muito insert.
- Verifique quanto do processador está sendo consumido.
- Verifique se as consultas que demoram são sempre as mesmas, se forem verifique se realmente não há como melhora-la.
- Faça um teste, execute a consulta diretamente no servidor e tb à partir de uma estação, pois o problema pode estar na rede, se a diferença de performance for grande.
- Verifique os I/O de disco, por ele ser o meio mais lento do conjunto, ele pode ser um gargalo.
- Como estão configurados os discos, lembre que o log (.LDF) é gravado sequencialmente e os dados (.MDF/.NDF) são gravados randomicamente, ou seja, se eles estiverem no mesmo disco a cabeça de leitura irá perder tempo.

Espero ter ajudado.

QQ coisa me retorne.

Att,

Laertepjunior
   - 01 dez 2004

Ola...um de meus servidores é praticamente igual ao seu. Estava tb com problemas de Performance. Além dos tópicos colocados já, fiz o seguinte :

Pelo Perfom verifiquei que os processadores não estavam Uniformes, ou seja, o processamento deles (fora em horarios de backup..etc) eram completamente varidos. Pelo Profiler, precebi que a maioria de nossas queries eram rápidas. e algumas eram pesadas.
Coloquei o sql server pra trabalhar somente com 3 processadores e deixar um( o primeiro) pro SO. Aumentei a mémoria pro sql server neste servidor (dedicado sql server).
Destes 3 processadores, 2 ficaram pra paralelizar as queries pesadas e o tempo de paralelesimo foi aumentado para 50 segundos (pela analise feita começei com este valor) pois o mesmo gera um custo e é melhor as queries rapidas rodarem em um processador só do que paralelizar.
Após esteas mudanças, tivemos um ganho de performance muito bom, e pelo perfom hoje, os processadores tem uma média melhor. A queries que eram rapidas(paralelizando) ficaram mais rapidas rodando em 1 processador só e as pesadas tiveram mais recursos liberados dos outros dois processadores, pois antes todas as queries eram paralelizadas.

Essas foram algumas das modificações inciais que surtiram um bom efeito.

Valeu

Laertepjunior
   - 01 dez 2004

Ola...um de meus servidores é praticamente igual ao seu. Estava tb com problemas de Performance. Além dos tópicos colocados já, fiz o seguinte :

Pelo Perfom verifiquei que os processadores não estavam Uniformes, ou seja, o processamento deles (fora em horarios de backup..etc) eram completamente varidos. Pelo Profiler, precebi que a maioria de nossas queries eram rápidas. e algumas eram pesadas.
Coloquei o sql server pra trabalhar somente com 3 processadores e deixar um( o primeiro) pro SO. Aumentei a mémoria pro sql server neste servidor (dedicado sql server).
Destes 3 processadores, 2 ficaram pra paralelizar as queries pesadas e o tempo de paralelesimo foi aumentado para 50 segundos (pela analise feita começei com este valor) pois o mesmo gera um custo e é melhor as queries rapidas rodarem em um processador só do que paralelizar.
Após esteas mudanças, tivemos um ganho de performance muito bom, e pelo perfom hoje, os processadores tem uma média melhor. A queries que eram rapidas(paralelizando) ficaram mais rapidas rodando em 1 processador só e as pesadas tiveram mais recursos liberados dos outros dois processadores, pois antes todas as queries eram paralelizadas.

Essas foram algumas das modificações inciais que surtiram um bom efeito.

Valeu

Rc.salvador
   - 02 dez 2004

Existe alguma relação do tamanho do BD com a quantidade de memória ??
Meu banco está com aproximadamente 25Gb e meu servidor tem 2Gb.

Laertepjunior
   - 03 dez 2004

Olha...se existe uma formula pra calculo desa relação diretamente eu não conheço..talvez o marcus possa explicar melhor, mas se seu banco de dados começar a ficar muito grande e chegar nos limites de VLDB´
(geralmente acima de 500 GB)..com certeza mais memória seria interssante...mas não é seu caso..seu banco está bem pequeno ainda.
Agora a gente pode ver se a memória que está alocada pro sql server está legal. No meu ver, quado o servidor é dedicado sql server, somente ele e o SO operam, eu costumo deixar o máximo de memória pro sql server possível e um pouco pro SO. Algo como 1.4,1.5 GB pro sql server. No meu ponto de vista, se o servidor é somente pro sql server, quanto mais memória ele puder usar..melhor será (marcus, me corrija se eu estiver errado)

Tem 3 contadores legais pra vc verificar a memória do SQL SERVER.
Use o perfom (perfomance monitor) pra isso...Não se esqueça de usá-lo na maquina cliente ,não rode o perfom(o .exe) no servidor
pois ele degrada a perfomance, rode ele na sua maquina cliente direcionando pro servidor..e não se esqueça que vc tem que perivilégios
de ADM no servidor pra rodar os contadores.
Bom..mas vamos aos contadores de memoria que eu uso pra ver se a RAM está adequada:

Memory Object: Pages/Sec
Este carinha indica o número de paginas por segundo que são colocadas
de fora da RAM pro disco, ou paginadas de dentro da RAm pro disco.
Quanto mais páginas forem paginadas maior será seu overhead de I/O que afeta diretamente
na perfomance do SQL SERVER
Se seu servidor for dedicado pro sql server, intaum este carinha deve ter uma média (digamos num período de 24 horas),
próximo de zero, exceto por picos (backup..etc) que são normais elevar o contador.
Se seu contador estiver entre 1 e 20 , vc não tem muito problema de perfomance..mas se a média dele estiver acima de 20,
no periodo de 24 horas, provavelmente seu servidor está pedindo mais RAM.
Os picos que eu disse acima, geralemnte são efetuados por backup´s, restores, backup de log,
checkpoints, BCP, DTS..e ignore esses picos.
Geralmente num servidor dedicado sql com uma RAM adequada este contador
fica proximo a zero. Uma Ram adequada ao servidor é quando vc tem o contador
Buffer Hit Cache Ratio (outro contador encontrado no perfom) proximo de 99¬ ou mais.
Se vc tem este contador proximo de 99¬ ou mais num periodo de 24 horas , mas
mas vc esta vendo que a média do nível de paginação (pages/sec) está acima de 1, isto geralmente
indica que vc está rodando outras aplicações no servidor sql.
Neste caso, vc pode remover as aplicações e deixar o sql srever como
prioridade no servidor
Se seu sql server não roda nenhuma outra aplicação e a média do nível de paginação
exceder 1 no periodo de 24 horas , isto provavelmente indica que vc teria que mudar
a cofiguração de memória do sql server.
Sql srever -> Dynamically configure SQL Server memory´ opção e ´Maximum Memory´ configure pro maior nivel possível.

Memory Object: Available Bytes
Este contador tem que estar acima de 5MB..se não..seu sql server precisa de mais RAM
Num servidor dedicado sql server, fique atento pra manter entre 4 - 10 MB de memoria fisica livre.
O resto da memoria é usado pelo SO esql server
Quando o montante deste contdor é menor que 4MB, geralmente mostra que o sql server
esta também paginando e isto afeta a perfomance.
Quando isto ocorrer , vc necessita aumentar a memória fisica do servidor, reduzir
o load ou mudar as configurações de memoria do sql server apropriadamente.

E olhe bem estes dois contadores

SQLServer:Memory Manager: Total Server Memory (KB) e SQLServer:Memory Manager: Target Server Memory (KB).
O SQLServer:Memory Manager: Total Server Memory (KB), indica o quanto de memória
que o sql server está usando no momento e o SQLServer:Memory Manager: Target Server Memory (KB) indica
o quanto o slq server gostaria de ter pra operar eficientemente.
Se o sql server está com memoria sufciente, os dois contadores tem que estar iguais.
Mas se o SQLServer:Memory Manager: Total Server Memory (KB) estiver menor que SQLServer:Memory Manager: Target Server Memory (KB)
isto indica que não tem memoria RAM suficiente ....seria melhor colocar mais RAm

Eu fico com o perfom ligado 24 horas monitorando meu servidor, com estes contadores e vários outros..

Fonte tirada do sql server perfomance.com..(praticamente já traduzi este site inteiro heheh)..dá uma olhadinha lá..é muito show

http://www.sql-server-performance.com

Marcus.magalhaes
   - 03 dez 2004

Bom dia.

Não tem o que completar.

Att,