sexta-feira, 23 de junho de 2017

Utilização de CPU

Uma das formas de medição de consumo de banco de dados é a verificação da utilização de CPU por parte das aplicações no banco de dados.

Para obtermos essas informações, podemos utilizar o comando abaixo:


1) Para um banco de dados single instance:


SET PAGESIZE 60
SET LINESIZE 300

COLUMN username FORMAT A30
COLUMN sid FORMAT 9999999
COLUMN serial# FORMAT 9999999
COLUMN "utilização de cpu (seconds)"  FORMAT 999,999,999.0000

SELECT
   s.username,
   t.sid,
   s.serial#,
   SUM(VALUE/100) as "utilização de cpu (seconds)"
FROM
   v$session s,
   v$sesstat t,
   v$statname n
WHERE
   t.STATISTIC# = n.STATISTIC#
AND
   NAME like '%CPU used by this session%'
AND
   t.SID = s.SID
AND
   s.status='ACTIVE'
AND
   s.username is not null
GROUP BY username,t.sid,s.serial#
order by 4 desc;





2) Para banco de dados em cluster:

SET PAGESIZE 60
SET LINESIZE 300

COLUMN username FORMAT A30
COLUMN sid FORMAT 9999999
COLUMN serial# FORMAT 9999999
COLUMN "utilização de cpu (seconds)"  FORMAT 999,999,999.0000

SELECT
   s.username,
   t.sid,
   s.serial#,
   SUM(VALUE/100) as "utilização de cpu (seconds)"
FROM
   gv$session s,
   gv$sesstat t,
   gv$statname n
WHERE
   t.STATISTIC# = n.STATISTIC#
AND
   NAME like '%CPU used by this session%'
AND
   t.SID = s.SID
AND
   s.status='ACTIVE'
AND
   s.username is not null
GROUP BY username,t.sid,s.serial#
order by 4 desc;



Dependendo das necessidades, podemos incrementar os comandos acima, solicitando por exemplo que sejam exibidas apenas as sessões que pertencem a mesma aplicação, utilizando o campo SERVICE_NAME, da seguinte forma:


SET PAGESIZE 60
SET LINESIZE 300

COLUMN username FORMAT A30
COLUMN sid FORMAT 9999999
COLUMN serial# FORMAT 9999999
COLUMN "utilização de cpu (seconds)"  FORMAT 999,999,999.0000

SELECT
   s.username,
   t.sid,
   s.serial#,
   SUM(VALUE/100) as "utilização de cpu (seconds)"
FROM
   gv$session s,
   gv$sesstat t,
   gv$statname n
WHERE
   t.STATISTIC# = n.STATISTIC#
AND
   NAME like '%CPU used by this session%'
AND
   t.SID = s.SID
AND
   s.status='ACTIVE'
AND
   s.username is not null
AND s.service_name like 'NOME_SERVICO'
GROUP BY username,t.sid,s.serial#
order by 4 desc;



Estes são apenas exemplos, onde podemos modificar o comando de acordo com as necessidades de momento.