Amigos, Costumo utilizar a consulta abaixo: SELECT to_char(begin_time, 'DD-MON-RR HH24:MI:SS') begin_time, to_char(end_time, 'DD-MON-RR HH24:MI:SS') end_time, metric_name, value FROM v$sysmetric WHERE metric_name in ('CPU Usage Per Sec', 'Current OS Load', 'Host CPU Utilization (%)') ORDER BY begin_time
A view V$SYSMETRIC coleta estatísticas de curta duração a cada 15s e de longa duração 60s. Existe um histórico em V$SYSMETRIC_HISTORY, que guarda as estatísticas de longa duração por 1 hora. Lembrando que a métrica "CPU Usage Per Sec" é em centésimo de segundo por segundo. Assim como o amigo Chiappa falou anteriormente. Ou seja, você vai ter o tempo consumido dentro da CPU, e não o percentual que o "banco" está consumindo. 2009/10/13 jlchiappa <jlchia...@yahoo.com.br>: > Opa, intão, deixem-me dar uns palpites aí : primeiro, a query em questão > lista as sessões fazendo muito I/Os, muitas vezes elas também são grandes > consumidoras de CPU (já que CADA bloco lido necessariamente tem que ser > 'gerenciado' em cache, muitas vezes há que se fazer uma leitura consistente, > etc, isso custa CPU) mas é meio arriscado dizer que necessariamente essas são > as tpo consumidoras de CPU, há várias outras tarefas (tais como compilação de > Pl/SQL, parse de SQLs, contas/cálculos, context switch entre SQL e PL/SQL, > entre muitas outras) que podem consumir muita CPU sem necessariamente fazer > montes de I/Os.... Segundo, a pergunta original é "quantos porcento de CPU > uma sessão utilizou na sua atividade?", e isso ABSOLUTAMENTE NÃO É registrado > nas views/tabelas internas : entre outras questões, o fato é que para se > saber quanto um dado volume representa do total, vc TEM que conhecer o total, > e por mais que nós DBAs não consideremos assim a verdade é que o bd Oracle > num servidor é simplesmente um software a mais, ele ** NÃO ** necessariamente > roda com privilégios administrativos diferenciados, ele é só um CONSUMIDOR > dos recursos (ie, CPU, RAM, I/O, rede) , via de regra ele Não Tem Como saber > o total de CPU da máquina como um todo pra poder extrapolar quantos % do 100% > total cada sessão representa, isso em tese só um account Admin poderia > fazer... Exatamente POR ISSO o pessoal do kernel do banco Oracle fez o > seguinte : instrumentou cada chamada por recursos botando antes e depois dela > um call ao clock do sistema, tipo : > > # quero fazer um I/O, portanto : > getsystemclock1 > pedeporumI/O > quando recebeu o I/O, getsystemclock2 > calcula a diferença de tempo entre as chamadas 1 e 2 > > # quero fazer uma operação em RAM do bloco lido (e portanto consumir CPU) : > getsystemclock1 > faz o processamento de mover o bloco > quando recebeu o resultado de OK, getsystemclock2 > calcula a diferença de tempo entre as chamadas 1 e 2 > > ... etc, etc, etc .... > > então a idéia por trás é : vc sabe sempre apenas o TEMPO que cada operação > que consumiu CPU, I/O, rede ou o que for levou pra ser ATENDIDA, apenas e tão > somente isso, assim praticamente TODAS as views/tabelas internas te dão ** > TEMPO ** gasto com CPU, ** TEMPO ** gasto com I/O, etc... É sempre o TEMPO, e > não % do total, ok ?? E isso nos leva a um OUTRO ponto crucial para o > entendimento desse tipo de monitoração, que é o efeito cascata: já que na > prática o que o banco mede é o tempo de resposta, digamos que o servidor está > folgado, aí um I/O demora 10 milisegundos (digamos), então digamos que uma > rotina periódica que esteja rodando e que faça 100 I/Os vai gastar > 10*100=1000 milisegundos... Agora suponha que uma ** outra ** rotina pesada > (até de fora do banco, talvez) comece a rodar nesse servidor e fazer montes > de I/Os e satorou o sub-sistema de I/O da máquina : OBVIAMENTE, cada I/O vai > ser mais lento, pois o servidor está ao mesmo tempo sendo acessado e > atendendo aquele outro monstrão, então para esses mesmos 100 I/Os vai se > gastar muito mais tempo.... Esse é o ponto, as views/tabelas do banco te > mostram quem está demorando mais em gasto de tempo de CPU de I/O, de tudo *** > MAS *** a priori consultando só elas vc NÂO TEM COMO identificar em quais os > números estão aumentando por causa de espera por recurso indisponível e quais > exatamente estão realmente usando demais o recurso..... No banco 10g em > diante vc pode ainda ativar o recurso das views V$OSSTAT e do histórico dela, > ela ** também ** é por tempo mas é mais detalhada, listando o tempo que as > CPUs do sistema ficaram IDLE, tempo de uso pelo kernel do banco, tempo de uso > das CPUs pelo usuário, > http://www.databasejournal.com/features/oracle/article.php/3799846/Looking-at-your-operating-system-with-the-help-of-Oracles-VOSSTAT-view.htm > as relaciona.... Isso pode te ajudar, mas pra se identificar exatamente o > consumo de CPU , com QUEM, QUANDO, AONDE e POR QUE, sorry mas não tem uma > fonte só, uma vez consultadas as views tipo vc terá que : > > a) consultar repetidas vezes a V$SESSTAT/V$SESSION_WAIT e similares (ou as > OSSTAT ou o que for) , a cada vez armazenando o valores, para poder comparar > qual/quais sessões passaram a ter mais 'tempo' de CPU (ou seja qual for o > recurso que vc quer monitorar) - lembro que a V$SQL na versão 10gR2 já é > "on-line", ie, enquanto o SQL está rodando as estatísticas de consumo de CPU, > I/O e etc vão sendo atualizadas, então ESSA seria uma fonte Preciosa para se > localizar SQLs ruinzões consumindo muita CPU > > b) usar os comandos do Sistema Operacional como mostrado, eles sim possui > instrumentação para identificar por % consumos > > c) para as sessões identificadas em a), usar as views de histórico (seja a > V$ACTIVE_SESSION_HISTORY, V$SYS_TIME_MODEL , as de AWR, o que vc tiver > direito e puder usar) para elas, consultando estat´siticas de SQLs > executados, waits anteriores... O Objetivo aqui é identificar picos de uso > por um recurso... > > d) traces são outro recurso que eventualmente vc pode lançar mão, nele ficam > registradas as quantidades de vezes em que WAITs foram pedidos , além do > tempo, pode te ajudar também... > > []s > > Chiappa > > > --- Em oracle_br@yahoogrupos.com.br, Priscila Viana <priska....@...> escreveu >> >> escreve esse comando no unix, ele vai de mostrar os processo que estão >> consumindo mais. >> >> #### /usr/ucb/ps -aux|more >> >> 2009/10/9 Willian Fernando Frasson <wfras...@...> >> >> > >> > >> > segue um select bem simples para pegar as 10 sessões que tem maior consumo >> > de cpu: >> > >> > SELECT * FROM ( >> > SELECT >> > UPPER(b.username) username >> > , a.disk_reads disk_reads >> > , a.executions executions >> > , a.disk_reads / decode(a.executions, 0, 1, a.executions) reads_per_exec >> > , sql_text || chr(10) || chr(10) sql >> > FROM >> > sys.v_$sqlarea a >> > , dba_users b >> > WHERE >> > a.parsing_user_id = b.user_id >> > AND a.disk_reads > 1000 >> > AND b.username NOT IN ('SYS','SYSTEM') >> > ORDER BY >> > disk_reads desc >> > ) >> > WHERE ROWNUM <11 >> > ; >> > >> > Outra forma que você pode pegar de uma determinada sessão, pegue a mesma >> > via PID de SO, ataves do PID, pegue o ISD e Serial# e faça um trace da >> > mesma. >> > >> > abcs. >> > >> > >> > ----- Original Message ----- >> > From: Márcio Ricardo Alves da Silva >> > To: oracle_br@yahoogrupos.com.br <oracle_br%40yahoogrupos.com.br> ; >> > gpora...@yahoogrupos.com.br <GPOracle%40yahoogrupos.com.br> >> > Sent: Friday, October 09, 2009 10:04 AM >> > Subject: [oracle_br] total de cpu(%) >> > >> > GeleiraBom dia! >> > >> > Tem alguma maneira de identificar quantos porcento de CPU uma sessão >> > utilizou na sua atividade? >> > >> > RELEASE 10.2.0.1 >> > Márcio >> > >> > [As partes desta mensagem que não continham texto foram removidas] >> > >> > ---------------------------------------------------------- >> > >> > O Banco de Dados de Vírus interno expirou. >> > Verificado por AVG - http://www.avgbrasil.com.br >> > Versão: 8.0.233 / Banco de dados de vírus: 270.10.16/1926 - Data de >> > Lançamento: 30/1/2009 17:31 >> > >> > [As partes desta mensagem que não continham texto foram removidas] >> > >> > >> > >> >> >> [As partes desta mensagem que não continham texto foram removidas] >> > > > > > ------------------------------------ > > -------------------------------------------------------------------------------------------------------------------------- >>Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira >>responsabilidade de seus remetentes. > Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ > -------------------------------------------------------------------------------------------------------------------------- >>Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » >>Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: >>http://www.oraclebr.com.br/ > ------------------------------------------------------------------------------------------------------------------------ > Links do Yahoo! Grupos > > > -- Rosivaldo Azevedo Ramalho Consultor Oracle Database / Application Server mail/msn: rosiva...@gmail.com mobile: +55 83 8893 8281 Oracle Database 10g Certified Professional Oracle Application Server 10g Certified Professional