oracle

Olá a todos. Nesta quinta e última serie de posts relacionados a performance, falarei um pouco sobre algumas ferramentas e analises a serem feitas para diagnosticar problemas a nível de sistema operacional.

Creio que todo o DBA já deva ter passado por uma situação parecida com essa: O ambiente de produção está incrivelmente lento, ninguém consegue fazer nenhuma operação, por mais simples que seja no servidor… logo os usuários e a gerência põem a culpe, sem nenhuma analise ou algo parecido, no banco de dados e por consequência nos DBAs. Depois de uma analise rápida em conjunto do os administradores de sistema, descobre-se que alguém estava compactanco um arquivo de 100GBs, consuminto todo o poder de processamento do servidor. Eu já passei por isso, e garanto que boa parte dos DBAs também já.

Todas as ferramentas listadas abaixo foram testadas nas distros derivadas no Red Hat, como Oracle Linux e CentOS. Mencionarei também algumas ferramentas de analise para ambientes Solaris.

 

   1) Comandos úteis

   1.1) Analisando consumo de CPU

Dentre as ferramentas mais comuns de mensuração de uso de CPU, estão:

  • top
  • vmstat
  • htop
  • prstat (Solaris)

A minha favorita para realizar analises iniciais é o “top” por já sr um padrão em todas as distros derivadas do Red Hat. Também já tive a oportunidade, e fortemente recomendo, a instalação da ferramenta htop, que mostra de uma maneira bem mais amigável o consumo de CPU, detalhando os principais processos consumidores. Exemplos de uso do top:


### atualiza as informações a cada 2 segundos
top -d 2


### usando o top em batch mode
### esse modo permite salvar a saida de uma iteração do top em um txt, para
### futuros tratamentos e dados históricos, por exemplo
top -b -n1 > top.txt

 

Também pode ser útil usar a ferramenta mpstat (requer o pacote sysstat). Ela pode mostrar o consumo geral por processador. Exemplos:

### consumo geral, de todos os processadores
mpstat


### consumo detalhado, por processador
mpstat -P ALL

 

Por fim, a nível de Linux, pode-se usar o “pidstat” para obter detalhes de consumo de CPU, por processo

### exibindo informações a cada 2 segundos
pidstat -t 2

 

A nível de Solaris, pode-se usar a ferramenta prstat, que equivale ao top do Linux. Exemplos

### informações gerais
prstat

 

1.2) Analisando processos consumidores

Para analisar o consumo dos processos, pode-se usar a ferramenta “ps”, bem como o “top”, acima mencionado. Ex:

### listando os 15 principais processos consumidores de cpu
echo "CPU(%) | PID | USER | TERMINAL | ARGS" ; echo "----------------------------------------------------------------------------" ; ps -e -o pcpu,pid,user,tty,args | sort -n -k 1 -r | grep -v %CPU | head -15


### listando os 15 principais processos consumidores de memória
echo "MEM(%) | PID | USER | TERMINAL | ARGS" ; echo "----------------------------------------------------------------------------" ; ps -e -o pmem,pid,user,tty,args | sort -n -k 1 -r | grep -v %CPU | head -1

 

Em se tratando de Solaris, é possível usar o prstat com a opção -a. Ex:

### informações sobre os processos e usuários
prstat -a

 

1.3) Analisando o consumo de memória

Para analisar o consumo de memória do ambiente, podemos usar as ferramentas “vmstat” (tanto para Linux quanto para Solaris) e o “free” (Linux). Ex:

### listando informações a cada segundo, em MBs
### atentar para as colunas "free", "si" e "so"
###    - free indica a quantidade de memória física livre no ambiente
###    - si e so contém informações relacionadas ao swap
vmstat -S M 1


### listando informações sobre a memória, de uma forma mais amigável so que o vmstat
free -m


### o sar é interessante pois ele mostra o % de memória em uso
### executa a cada 3 segundos
sar -r 3

 

1.4) Analisando o consumo de I/O

Podemos usar as ferramentas “sar” e “iostat” (ambas existem para Linux e Solaris) para monitorar a atividade de I/O no ambiente. Ex:

### exibindo informações, por device, a cada 2 segundos
iostat -d 2


### exibe estatisticas de I/O a casa 3 segundos, agrupando todos os devices
sar -b 3


### exibe informações por device, a casa 2 segundos
sar -d 2

OBS1: tps indica o número de transferencias por segundo de um dispositivo físico, onde uma transferencia é uma requisição de I/O a um dispositivo físico

OBS2: rtps e wtps indicam o número de requisições lidas (r) e escritas(w) em um dispositivo físico

### iostat, em ambientes Solaris 11
### executa a cada 3 segundos, exibindo informações sobre todos os devices
### Atentar para as colunas "%b" (percent of time the disk is busy) e "svc_t" (the average service time, in milliseconds, of the disk)
### Com relação ao "svc_t" caso ele apresente tempos acima de 30 ms, isso pode indicar um problema.
iostat -cx 3

 

1.5) Analisando o consumo de rede

Para analisar o tráfego de rede, podemos usar o “nestat”. Ex:

### atentar para a coluna "Send-Q". Caso ela possua um valor incomumente algo,
### isso pode indicar uma sobrecarga na rede
netstat -ptc


### a nível de Solaris 11
### atentar para a coluna "collins" (When collisions are greater than 5 percent of the packets sent,
### you are starting to experience network saturation. That is colls / packets >5%)
netstat -i

 

É isso ai pessoal, com esse post eu encerro a série relacionada a Performance Tuning. Espero que os leitores tenham gostado do que foi exposto e como foi exposto. Quaisquer críticas e sujestões são mais do que bem vindas.

Até a próxima série de posts.

Keep Tuning.