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