![]() |
|||||||||||||||||||||||||||||||||||||||||||||
|
White Paper [06/10/2002] Comment scotcher une instruction dans le shared pool … Vous voulez que Oracle ne fasse pas vieillir prématurément une instruction dans le shared pool. Pour ceci, vous voulez la scotcher (piner ;-)) la bas. Lire d’abord http://www.tafora.fr/wp/optisql.doc.html. Si il s’agit d’un package SQL, facile : Fixer un package Pinnerbase.sql Ce petit bout de code est lancé à l’ouverture de la base et fixe dans le shared pool les packages/programmes/fonctions répertoriés.
BEGIN
sys.dbms_shared_pool.keep('TITAN.BAU');
sys.dbms_shared_pool.keep('SYS.AUDSES$');
sys.dbms_shared_pool.keep('SYS.UTL_TCP');
sys.dbms_shared_pool.keep('SYS.DBMS_LOB');
sys.dbms_shared_pool.keep('SYS.STANDARD');
sys.dbms_shared_pool.keep('SYS.UTL_FILE');
sys.dbms_shared_pool.keep('SYS.UTL_SMTP');
sys.dbms_shared_pool.keep('CTXSYS.DRIACC');
sys.dbms_shared_pool.keep('CTXSYS.DRIDDL');
sys.dbms_shared_pool.keep('CTXSYS.DRIUTL');
sys.dbms_shared_pool.keep('SYS.DBMS_PIPE');
sys.dbms_shared_pool.keep('WWWCTX.IMUTIL');
sys.dbms_shared_pool.keep('XDB.DBMS_XDBZ');
sys.dbms_shared_pool.keep('CTXSYS.CTX_DDL');
sys.dbms_shared_pool.keep('CTXSYS.CTX_DOC');
sys.dbms_shared_pool.keep('CTXSYS.DRIDISP');
sys.dbms_shared_pool.keep('CTXSYS.DRILIST');
sys.dbms_shared_pool.keep('CTXSYS.DRIPIPE');
sys.dbms_shared_pool.keep('OWA.PPROPALCLI');
sys.dbms_shared_pool.keep('SYS.DBMS_OUTPUT');
sys.dbms_shared_pool.keep('SYS.DBMS_RANDOM');
sys.dbms_shared_pool.keep('CTXSYS.CTX_QUERY');
sys.dbms_shared_pool.keep('SYS.DBMS_UTILITY');
sys.dbms_shared_pool.keep('SYS.NO_VM_CREATE');
sys.dbms_shared_pool.keep('CTXSYS.CTX_OUTPUT');
sys.dbms_shared_pool.keep('OWA.SEQ_PROPALCLI');
bau.loglog('Trigger DB ouverte: ok');
EXCEPTION
WHEN OTHERS THEN
bau.loglog('Trigger DB ouverte: ' || sqlerrm);
END;
/
SHOW ERRORS
Fixer le code rebelle dépisté en pleine production Si le code est erratique, vous pouvez le dépister avec les instructions simples de type select disk_reads/(executions+1) drex, buffer_gets/(executions+1) bfex, loads, invalidations, executions, sql_text from v$sqlarea order by loads;Cette requête vous aide à dépister la requête rebelle (sql_text). Avec le texte obtenu, faire :
spool tf_shared_pool_scoth.lis
select 'exec dbms_shared_pool.keep(''' || address || ',' || hash_value || ''', ''c'');'
|| chr(13)||chr(10) || sql_text
from v$sqlarea
where lower(sql_text) like lower('ma requéte rebelle');
;
spool OFF
Vous obtiendrez quelque chose de type :
exec dbms_shared_pool.keep('10D77B74,2096552445', 'c');
pour l’instructionselect count(*) from loco_urls Bien évidemment, puisque rebelle, cette instruction devrait être dépistée et fixée après le boot suivant. Les procédures /rdbms/admin/dbmspool.sql et /rdbms/admin/prvtpool.plb doivent avoir créé le package dbms_shared_pool avant toute fixation. BUG ? Si bug 1318267 (voir Metalink), mettre dans init.ora SQLEXEC_PROGRESSION_COST=0. Le paramètre loads (ou invalidations) est toujours énorme ? Envoyez un mail à sos-oracle@tafora.fr Radu Caulea, TAFORA, Senior Oracle Consultant |
||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||