MCDBA Brasil    
16:23:54
  Job Board


[Todas Oportunidades]
 

  TechNet Experience



 

  Recursos de Pesquisa

Encontrou um erro no SQL Server e não sabe o que ele significa?
Pesquise-o aqui.

Pesquisar na Web
MS Knowledge Base

   Pesquisar no Portal
   Pesquisar nos Fórums
 

  Links Rápidos


Envie bugs e feedback de melhorias para o time do SQL Server.




SQL Server 2008 R2 Books Online
Feature Pack for SQL Server 2008 R2
Download SQL Server Express 2008 R2 (FREE)
Download SQL Server 2008 R2 Trial
Cumulative Update 1 for SQL Server 2008 R2
Lista de Cumulatives Updates liberados para SQL Server 2008 R2
Cumulative Update 8 for SQL Server 2008 SP1
Lista de Cumulatives Updates liberados para SQL Server 2008 SP1
Lista de Cumulatives Updates liberados para SQL Server 2008 (RTM)
Lista de Cumulatives Updates liberados após SQL Server 2005 SP3
SQL Server 2005 SP3
Feature Pack for SQL Server 2008 (Out/08)
SQL Server 2008 Books Online (Out/09)
SQL Server 2008 Books Online (MSDN)
SQL Server 2005/2008 Samples Databases
SQL Server 2005 Features Comparison
Lista de Cumulative Hotfix liberados após SQL 2005 SP2
SQL Management Studio Express SP2
SQL Server 2000 SP4
Cumulative Hotfix for SQL 2000 SP4 (build 2187)
Bugs fixed in SQL 2000 SP4
SQL Server 2005 (Preços e licenciamento)
Upgrading to SQL Server 2005
Upgrading MSDE 2000 to SQL Express 2005
Documentando o Servidor SQL Server
SQL Server 2005 (Requisitos de sistema)
MSDE 2000 Release A Free
SQL Server 2000 Performance Tuning Guide
SQL Server 2005 - Cursos Gratuitos
FAQ Sobre Uso Apropriado do MSDE
Analisando a Performance do Servidor-CheckList
SQL Server 2000 Security Tools
Northwind and Pubs Sample Databases
 

  Menu Principal

Home
 Fale Conosco
 Pesquisas
 Recomende-nos
 Sobre
 
Comunidade:
 Arquivo de Newsletter
 Arquivo de Notícias
 Artigos/Tutoriais
 Estatíticas
 Fórum
 Livro de Visitas
 MCDBA Database
 Newsgroups e Blogs
 Revistas .NET/SQL
      Magazine

 SQL Server FAQ
 Top 10
 Tópicos
 Utilitários
 Web Links
 Webcasts
 
Membros:
 Downloads
 Enviar Notícias
 Hands On Labs
 Mensagens Privadas
 Scripts Sql
 Sua Conta
 

  Publicidade




 

  Artigos

Total de artigos: 599
Total de Categorias : 6


Mais visualizados
1: Instalando e Configurando o SQL Server 2005 Express
[1 comentários]
[146314 visualizações]

2: Livros em .pdf para download
[0 comentários]
[99113 visualizações]

3: SQL Server 2005 - Cursos Gratuitos
[1 comentários]
[33867 visualizações]

4: Microsoft SQL Server 2008 Books Online em Portugês
[0 comentários]
[24902 visualizações]

5: Database Mirroring - Configurando Alta Disponibilidade no Banco de Dados
[5 comentários]
[24452 visualizações]

6: Analisando a Performance do Servidor - CheckList
[5 comentários]
[21273 visualizações]

7: Documentando o Servidor SQL Server
[17 comentários]
[17655 visualizações]

8: Plano de Execução - O que analisar ?
[5 comentários]
[14607 visualizações]

9: Liberado versão final do SQL Server 2005 SP2
[0 comentários]
[13182 visualizações]

10: Importando e Exportando dados do SQL Server 2000
[0 comentários]
[12394 visualizações]


[ Mais conteúdo como este na seção de notícias ]
 

  Scripts SQL

Total de Scripts: 44


Últimas inclusões
1: usp_docservidor_2005

2: sp_truncatetable

3: usp_docservidor

4: fn_dateformat


Mais Baixados
1: usp_docservidor
[Downloads: 1812]

2: Localizando Registos Duplicados
[Downloads: 1770]

3: Localiza maiores tabelas em uma base
[Downloads: 1524]

4: Gera script para inserir dados
[Downloads: 1510]

5: Fazendo Rebuild dos índices
[Downloads: 1486]

6: sp_usrheadblocker
[Downloads: 1484]

7: Derrubar todas as conexões da base
[Downloads: 1476]

8: Cria Job para Backup
[Downloads: 1475]

9: usp_docservidor_2005
[Downloads: 1334]

10: Busca Tabelas sem índices
[Downloads: 1332]

11: Estima tamanho da tabela
[Downloads: 1308]

12: Associar Usuários Orfãos
[Downloads: 1253]

13: sp_usrtrackusers
[Downloads: 1179]

14: Obtendo as configurações de um servidor
[Downloads: 1146]

15: Recuperando base em Suspect
[Downloads: 1117]

16: Monitora Espaço em Disco
[Downloads: 1103]

17: Mostra espaço ocupado pelas tabelas
[Downloads: 1076]

18: Monitora espaço do Database
[Downloads: 1074]

19: Calcula seletividade da coluna
[Downloads: 985]

20: Migrando Logins entre Servidores
[Downloads: 962]

21: Alterar o owner dos objetos
[Downloads: 944]

22: Usando o DBCC SHRINKFILE
[Downloads: 889]

23: sp_usrinputbuffer
[Downloads: 852]

24: Recuperando uma base sem o arquivo de log
[Downloads: 765]

25: Obtendo as configurações de um servidor (Básico)
[Downloads: 704]

26: Administrar Cluster pelo Query Analyzer
[Downloads: 671]

27: Filtra SQL Errorlog
[Downloads: 667]

28: Verificando o Status das Triggers
[Downloads: 608]

29: Excluindo todas as tabelas de uma base
[Downloads: 580]

30: Desatachar bases do servidor
[Downloads: 559]

31: fn_dateformat
[Downloads: 540]

32: Script para alterar o nome lógido da base
[Downloads: 536]

33: Verificando o Status de um Cluster
[Downloads: 532]

34: Cria banco Northwind com dados
[Downloads: 531]

35: Localizar Tabelas Temporárias
[Downloads: 528]

36: Restaurando uma base para discos diferentes
[Downloads: 527]

37: Pesquisa uma dada coluna nas tabelas
[Downloads: 524]

38: Mostra Tabelas por FileGroups
[Downloads: 477]

39: Script para Attachar uma banco de dados
[Downloads: 467]

40: Importa arquivo .trc para uma tabela
[Downloads: 455]

41: sp_truncatetable
[Downloads: 433]

42: Expandindo o tamanho de uma base
[Downloads: 425]

43: Salva Pacotes DTS como arquivo .dts
[Downloads: 404]

44: Cria banco Pubs com dados
[Downloads: 299]


[ Mais conteúdo na seção de Scripts ]
 

  Sample Chapters

Há um problema em visualizar as notícias deste site
 

  SQLServercentral.com

·Sending scheduled SQL query results via HTML e-mail using SSIS
·Introduction to SQL ServerStatistics
·SQLBits - The 7 Wonders of SQL
·Automatic Restart of SSIS packages after Failover or Failure
·SQL Saturday #50 - East Iowa
·Restricting SecurityAdmin on SQL Server 2005/2008
·DMVs for Query Plan Metadata
·SQL Saturday #46 - Raleigh
·Parsing an ADO result set into a comma separated string in SSIS
·Raw Materials - Refugees

Leia mais...
 

  Total Hits

Total de Page views: 9857901
Page views de hoje: 4688
Page views de ontem: 6809
Page views do mês: 18648

Desde 03 de Julho de 2004
 

  Top 10 Links


1: SQLDev.net

2: DevSQL

3: SQL-Server-Performance.com

4: SQLDTS.com

5: SQLServerCentral.com

6: Database Journal

7: DBAzine.com

8: Microsoft SQL Server (Documentação)

9: Site pessoal do Narayana Vyas Kondreddi

10: SearchDatabase.com

 


 
  Artigos: Analisando a Performance do Servidor - CheckList
Postado em Terça-feira, 5 de Abril de 2005 (11:01:58) por niltonpinheiro
 
 
  SQL Server

Uma das grandes dificuldades de  muitos DBA's, principalmente aqueles que estão iniciando no SQL Server, é saber como e o quê verificar no momento de uma lentidão no sistema ou até mesmo no servidor como um todo. Neste artigo, descreverei um checklist básico que você poderá seguir para ajudar na hora de identificar a causa de uma lentidão.



Na verdade, a causa da lentidão em um servidor pode ser várias: uma query que não faz uso adequado dos índices, tabelas sem índices, proplemas de modelagem, falta de memória, discos ruins e assim vai...

Independente da causa da lentidão, alguns passos básicos podem ser seguidos para tentar identificar o problema. Neste artigo estarei descrevendo alguns desses passos e dizendo como interpretá-los durante a verificação de problemas de performance em seu servidor. Porém, quero deixar claro que os passos decritos aqui não é um padrão e que a metodologia de análise pode variar de DBA para DBA.

O PASSO-A-PASSO

Passo 1: Verificar as conexões existentes no servidor e se existe problemas de blocks.

O primeiro passo para identificar problemas de performance é saber o que está rolando no servidor. Quais são as conexões existentes? O que elas estão executando? Existem conexões bloqueadas? Quem é o causador do bloqueio? Quem está bloqueado? etc...

A procedure de sistema sp_who é uma procedure muito utilizada para responder estas questões, mas a principal pergunta a ser respondida aqui é: Existem conexões bloqueadas?

Para responder a esta pergunta execute a procedure sp_who e verifique se existe alguma conexão onde a coluna Blk seja diferente de 0 (blk<>0). Se existir, já sabemos que estamos tendo problemas de block de conexões.

Passo 1.2: Havendo conexões bloqueadas, identificar o causador do bloqueio e a instrução SQL envolvida.
 
Uma vez detectado problemas de bloqueio, o próximo passo é identificar a conexão que está causando o bloqueio. Os bloqueios ocorrem porque normalmente duas ou mais conexões estão tentando utilizar um mesmo recurso. Imagine que temos duas conexões, uma com o SPID 64 e outra com o SPID 65. O SPID 65 efetua um lock exclusivo em uma tabela para efetuar uma atualização de dados e neste mesmo momento a conexão com SPID 64 tenta ler estas informações.

Neste caso, como a conexão SPID 65 abriu uma transação e efetuou um lock exclusivo, a conexão com SPID 64 ficará bloqueada pelo SPID 65 até que o mesmo conclua sua atualização. Uma das maiores causas de problemas de bloqueio são tabelas sem índices ou queries que não utilizam os índices de forma correta. Na maioria das vezes, a simples criação de uma índice clustered na tabela envolvida pode solucionar este tipo de problema.

Em grandes ambientes (ambientes com muitas conexões), a dificuldade aqui pode estar em identificar a conexão causadora do bloqueio. Isto porque muitas das vezes pode haver um certo encadeamento de bloqueio. Para facilitar este trabalho, você poderá estar utilizando a procedure sp_usrheadblocker.

Ao executá-la você obterá as seguintes informações:
--SPID => Este é o identificador da conexão.
--Blocked => informa o SPID que está bloqueando a conexão. Os SPIDs que possuirem Blocked=0 é o SPID que está causando os problemas de bloqueio.
--ECID => Informa se a conexão esta fazendo uso de pararelismo.
--WaitTimeMS => informa o tempo (em milessegundo) que a conexão está aguardando pelo recurso. Ou seja, a quanto tempo ela está bloqueada.
--RunAs => informa a quanto tempo (em minutos) a conexão está no servidor.
--Status => O status da conexão.
--CPU => informa o consumo de CPU pela conexão.
--Physical_IO => informa o consumo de I/O pela conexão.
--HostName => O nome da máquina que estabeleceu a conexão.
--LoginName => o nome do login que estabeleceu a conexão.
--DBName => o nome da base de dados.
--Last_Batch => a hora em que a conexão foi estabelecida ou executou a última instrução.
--open_tran => informa se existe alguma transação aberta pela conexão. O número apresentado aqui é o número de transações abertas pela conexão.
--MemUsage => quantidade de memória sendo utilizada pela conexão.
--TextBuffer => informa a instrução T-SQL sendo executada pela conexão.
 
  
Na maioria das vezes, a primeira linha sempre será a conexão causadora do bloqueio e as demais, as que estão aguardando pela liberação do recurso. Nos casos onde você tiver block em vários recursos, as conexões causadoras dos boqueios sempre terão a coluna Blocked=0 e serão as primeiras linhas.

No exemplo abaixo, temos que as conexões 64 e 68 estão sendo bloqueadas pelas conexões 65 e 66 respectivamente. Na coluna TextBuffer, podemos ver que as conexões 65 e 64 estão utilizando o mesmo recurso (a tabela Products). O mesmo acontece com as conexões 66 e 68.

SPID   Blocked WaitTimeMS  TextBuffer
------ ------- ----------- -----------------------------------------------------------------------
65     0       0           begin tran Update products SET UnitsInStock= 38 where ProductID=1
66     0       0           begin tran Update Orders SET ShipCountry = 'Brasil' where OrderID=10248
64     65      1408218     select * from Products
68     66      134890      select * from orders

Obs: Algumas colunas foram excluídas para facilitar a visualização. 


Neste caso, as conexões 64 e 68 não serão liberadas enquanto as conexões 65 e 66 não concluírem o processo de atualização (efetuarem um commit tran) ou forem derrubadas com a utilização do comando Kill. Um ponto importante a ser observado é que nem sempre o comando Kill finalizará o processo de forma imediata. Dependendo da instrução sendo executada e dos status das conexões, a conexão pode entrar em Rollback e demorar um certo tempo para ser finalizada.

Caso a coluna TextBuffer não esteja lhe fornecendo informações suficientes sobre a instrução T-SQL sendo executada pela conexão, você pode executar também o comando DBCC Inputbuffer(<spid>). Porém, uma limitação do DBCC Inputbuffer é que nos casos em que a conexão estiver executando uma stored procedure ou view, ele lhe mostrará apenas o nome da procedure ou view. O ideal seria poder identificar o que realmente está sendo executado pela conexão naquele exato momento e para vencer esta limitação do comando DBCC Inputbuffer, você pode utilizar a procedure sp_usrinputbuffer<spid>.

Exemplo:

-- Executa o Comando DBCC InputBuffer no QA
dbcc inputbuffer (77)

EventType      Parameters EventInfo                         
-------------- ---------- ----------------------------------
Language Event 0          exec SalesByCategory 'Beverages'

  
-- Para usar esta procedure o conexão deve estar com o status "Runnable"
Exec sp_usrinputbuffer 77

******** STATEMENT SENDO EXECUTADO NO MOMENTO ************
SELECT ProductName,
TotalPurchase=ROUND(SUM(CONVERT(decimal(14,2), OD.Quantity * (1-OD.Discount) * OD.UnitPrice)), 0)
FROM [Order Details] OD, Orders O, Products P, Categories C
WHERE OD.OrderID = O.OrderID
AND OD.ProductID = P.ProductID
AND P.CategoryID = C.CategoryID
AND C.CategoryName = @CategoryName
AND SUBSTRING(CONVERT(nvarchar(22), O.OrderDate, 111), 1, 4) = @OrdYear
GROUP BY ProductName
ORDER BY ProductName


Passo 2: Avaliar o estado do servidor.

Se o problema de lentidão ou performance não estiver associado com o bloqueio das conexões, o próximo passo a seguir é fazer uma análise em alguns contadores do Perfmon (Performance Monitor) para tentar identificar possíveis gargalos no nível de hardware.

Alguns dos principais contadores a serem monitorados são listados abaixo:

A) Contadores de Memória
 
Memory: Available Bytes ==>  Indica a quantidade de memória disponível no servidor.

Mamory: Pages/Sec   ==> Indica se está havendo paginação. Em perfeitas condições deve-se ver pouca atividade neste contador. Se o SQL esta rodando em um servidor dedicado, toda a sua memória alocada (aquela configurada nas propriedades do servidor dentro do Enterprise Manager) será mapeada para a memória física e muito pouco swapping (paginação) deverá ocorrer. Se este contador estiver muito alto ou crescente, verifique a memória alocada para o SQL Server, aumentar este valor ou colocar o SQL Server para configurar sua memória dinamicamene pode ajudar a reduzir a paginação.

B) Contadores do SQL Server
 
SQL Server: Buffer Manager: Buffer Cache Hit Ratio ==> Indica o percentual de requisições a dados que são obtidas no próprio cache do sql e portanto, sem precisar acessar o disco. O ideal é estar maior que 90%.

SQL Server:Access Methods:Page Splits/sec ==> Mostra quantos page splits estão ocorrendo no servidor. Este valor deve ser o mais baixo possível. Se o valor estiver alto, configurar os índices com um fillfactor apropriado pode ajudar a reduzir este valor.

SQL Server: Memory Manager: Total Server Memory (KB) ==> Quando maior que a quantidade de memória física pode indicar falta de memória.

 C) Contadores de CPU
 
Processor:% Processor Time:_Total ==> Indica o consumo de CPU no servidor (ideal abaixo de 80%).

Process: % Processor time: sqlservr ==> Indica o consumo do processador pelo processo do SQL Server.

System: Processor Queue Length ==> Indica o número de threads aguardando para execução no processador e nunca deve exceder 1 ou 2 (por processador) por um período superior a 10 minutos.

D) Contadores de Disco

PhysicalDisk: % idle Time ==> Indica o percentual de tempo que o disco esta ocioso. Supostamente este contador apresenta uma estimativa mais precisa sobre a utilização dos discos. Subtraindo o valor encontrado de 100, temos uma ideia do quanto o disco esta trabalhando.

PhysicalDisk: % Disk Time ==> Mostra o quanto o disco esta ocupado. Se valor > 60% durante 10 minutos, verificar os contadores PhysicalDisk: % Disk Read Time e PhysicalDisk: % Disk Write Time para identificar se é leitura ou escrita quem está causando maior utilização.

PhysicalDisk: Avg. Disk Queue Length ==> Mostra o número médio de requisições de I/O aguardando para acesso ao disco. Este contador nunca deve exceder 2 (por disco) por um extenso período de tempo.

PhysicalDisk: Avg. Disk Sec/Transfer ==> Taxa de transferência em bytes de ou para um disco durante operações de leitura ou escrita.

D) Contadores de Banco de Dados

SQL Server: Access Methods: Full Scans/sec ==> Mostra a quantidade de Table Scan sendo executada no SQL Server. Este valor deve ser o mais baixo possível e se for constantemente alto, use o Profile para identificar quais queries estão causando os scans.

SQL Server: Locks: Average Wait Time (ms) ==> Este contador mostra quanto tempo em milessegundos um processo está aguardando para obter lock no SQL Server. O valor ideal para este contador é zero. Se este valor estiver muito alto, utilize o Profile para identificar quais processos estão mantendo locks por um período longo de tempo.

Como descrito no início deste artigo, o problema de permance pode estar associado a várias causas, este checklist segue alguns passos básicos para ajudar na identificação do problema. Também é importante observar que este checklist não é um padrão e que por isso, os métodos utilizados para analizar a performance de um servidor pode variar de DBA para DBA. Na verdade, no dia-a-dia de trabalho cada DBA acaba por criar a sua própria metodologia de análise.

Caso prefira, você pode estar baixando aqui um .xls (documento Excel) com os passos descritos neste artigo.

Um abraço a todos
Nilton Pinheiro

 
 
  Links relacionados

· Site Oficial do SQL Server
· Site Oficial do MSDE 2000
· SQLServerCentral.com
· SQL-Server-Performance.com
· SQLDTS.com
· Mais sobre SQL Server
· Notícias por niltonpinheiro


As notícias mais lidas sobre SQL Server:
Alterando o Collate Default do Servidor

 

  Classificação de notícias

Votar: 4.82
Votos: 58


Por favor, dedique um segundo de seu tempo para votar nesta notícia:

Excelente
Muito bom
Bom
Regular
Péssimo


 

  Opções


 Imprimir  Imprimir

 Envie esta notícia para uma pessoa  Envie esta notícia para uma pessoa

 

 
 
Tópicos relacionados

SQL Server
 
 


 
 
Os comentários são propriedade de quem os escreveu. Nós não nos responsabilizamos por seu conteúdo.
 
 


 
 
Comentários não podem ser enviados por usuários anônimos, por favor Cadastre-se
 
 


 
 
Re: Analisando a Performance do Servidor - CheckList (Pontos: 1)
por jmalzoni em Sexta-feira, 3 de Junho de 2005 (11:27:47)
(Informações do usuário | Enviar uma mensagem)
Ótimo artigo, fornecendo instruções claras, simples e práticas, mesmo para iniciantes como eu. O checklist orienta o DBA aos caminhos e estratégias corretas a serem traçados e mais profundamente analisados para se resolver os problemas de performance. Parabéns!


 
 


 
 
Re: Analisando a Performance do Servidor - CheckList (Pontos: 1)
por AbnerJr em Sábado, 14 de Julho de 2007 (12:35:34)
(Informações do usuário | Enviar uma mensagem)

Nilton muito bom !! Mas eu posso pelo profile criar um trace que verifique se houve bloqueio e ai eu inserir em uma tabela ! Como eu faço ?

abrço



 
 


 
 
Re: Analisando a Performance do Servidor - CheckList (Pontos: 1)
por soeihiga em Sexta-feira, 5 de Outubro de 2007 (10:31:00)
(Informações do usuário | Enviar uma mensagem)

Muito util

Parabens



 
 


 
  Todas os logotipos e marcas registradas são de propriedade de seus respectivos donos.
Sistema de portais PHP-Nuke. Copyright © 2003. PHP-Nuke é um Software Livre liberado sob licença GNU/GPL.
Tempo para gerar esta página: 0.375 segundos