Este ejemplo está probado en Oracle 11.2.0.2.7 y muestra come se puede limitar el tiempo de CPU de una consulta SQL. Antes de empezar, hay que verificar que RESOURCE_LIMIT sea TRUE. Si no se hace esto, Oracle no impone los límites: 
SQL> alter session set nls_language = 'SPANISH'
  2  /
Sesion modificada.
SQL> alter system set resource_limit = true
  2  /
Sistema modificado.
SQL>
Luego es necesario crear un perfil que limitará el tiempo de CPU a un segundo (el valor es suministrado en centésimas de segundo): 
SQL> create profile para_andrew
  2  limit cpu_per_call 100
  3  /
Perfil creado.
SQL>
Entonces debemos tener un usuario con este perfil:
SQL> create user andrew identified by reid
  2  profile para_andrew
  3  /
Usuario creado.
SQL> grant create session,
  2        alter session,
  3        select any dictionary to andrew
  4  /
Concesion terminada correctamente.
SQL> conn andrew/reid
Connected.
SQL> alter session set nls_language = 'SPANISH'
  2  /
Sesion modificada.
SQL>
Medimos el tiempo de CPU al principio de la manera siguiente:
SQL> select a.value/100
  2  from v$mystat a, v$sysstat b
  3  where a.statistic# = b.statistic#
  4  and b.name = 'CPU used by this session'
  5  /
A.VALUE/100
-----------
        .01
SQL>
Luego ejecutamos una consulta que empleará más de un segundo de tiempo de CPU: 
SQL> select count(*)
  2  from dba_tables a, dba_tables b
  3  /
from dba_tables a, dba_tables b
     *
ERROR en linea 2:
ORA-02393: ha excedido el limite de llamadas para uso
de CPU 
SQL>
La consulta falla con un error ORA-02393. Entonces vemos que el tiempo de CPU de la sesión sea aproximadamente un segundo más:
SQL> select a.value/100
  2  from v$mystat a, v$sysstat b
  3  where a.statistic# = b.statistic#
  4  and b.name = 'CPU used by this session'
  5  /
A.VALUE/100
-----------
        1.2
En inglés / in English
 
No hay comentarios:
Publicar un comentario