- USER_ROLE_PRIVS
- USER_SYS_PRIVS
- USER_TAB_PRIVSS
- USER_ERRORS
- DBA_ERRORS
Un bout de code pour tester les perfs CPU en PL/Sql :
SET SERVEROUTPUT ON
SET TIMING ON
DECLARE
n NUMBER := 0;
BEGIN
FOR f IN 1..10000000
LOOP
n := MOD (n,999999) + SQRT (f);
END LOOP;
DBMS_OUTPUT.PUT_LINE ('Res = '||TO_CHAR (n,'999999.99'));
END;
/
- DBA_HIST_TBSPC_SPACE_USAGE (à partir de 10g) conserve un historique de l'utilisation des tablespaces (10 jours par défaut, avec collecte toutes les heures) :
SELECT t.Name,Tablespace_Usedsize "Espace utilisé(nb blocks)",Rtime
FROM DBA_HIST_TBSPC_SPACE_USAGE h, v$TABLESPACE t
WHERE h.Tablespace_id=t.TS#
ORDER BY t.Name,Rtime;
Taille courante de la PGA par session :
SELECT sid, name , value
FROM v$sesstat s1, v$statname s2
WHERE s1.statistic# = s2.statistic# and s2.name like '%pga memory';
V$BH est une vue du dictionnaire de données Oracle, qui permet de visualiser le contenu des blocks présents en cours d'utilisation dans le Buffer Cache (1 ligne par block) :
SELECT OWNER,
OBJECT_NAME
FROM DBA_OBJECTS O,
V$BH B
WHERE O.DATA_OBJECT_ID = B.OBJD
Un profil SQL issu par exemple d'un Tuning Advisor au travers de la DB Console, est un ensemble de HINTs, associés à une requête au moment de l'exécution de celle-ci. Les HINT sont basés non seulement sur les statistiques concernant les tables de la requête, mais aussi sur les relations entre les tables établies par la requête.
Un Stored Outline, ou Plan d'Exécution Stocké est, comme son nom l'indique, une version donnée d'un plan d'exécution d'une requête stockée dans le dictionnaire de données. L'utilisation possible des Stored Outlines est de vouloir se passer des HINTs en cas de manque de stabilité d'une requête. Pour celà, on procède à la création de 2 Outlines : l'original (à priori pas bon) et celui optimisé, pour le coup, avec des HINTs, puis on supprime le premier !
SET pages 200
SET LINES 999
SELECT * FROM V$RESOURCE_LIMIT;
RESOURCE_NAME CURRENT_UTILIZATION MAX_UTILIZATION INITIAL_AL LIMIT_VALU
------------------------------ ------------------- --------------- ---------- ----------
processes 31 50 400 400
sessions 38 58 445 445
enqueue_locks 87 120 5790 5790
enqueue_resources 110 327 2176 UNLIMITED
ges_procs 0 0 0 0
ges_ress 0 0 0 UNLIMITED
ges_locks 0 0 0 UNLIMITED
ges_cache_ress 0 0 0 UNLIMITED
ges_reg_msgs 0 0 0 UNLIMITED
ges_big_msgs 0 0 0 UNLIMITED
ges_rsv_msgs 0 0 0 0
gcs_resources 0 0 0 0
gcs_shadows 0 0 0 0
dml_locks 20 295 1956 UNLIMITED
temporary_table_locks 0 3 UNLIMITED UNLIMITED
transactions 3 16 489 UNLIMITED
branches 0 0 489 UNLIMITED
cmtcallbk 1 3 489 UNLIMITED
sort_segment_locks 1 19 UNLIMITED UNLIMITED
max_rollback_segments 26 26 489 65535
max_shared_servers 1 1 UNLIMITED UNLIMITED
parallel_max_servers 0 16 160 3600
22 rows selected.
Le script suivant 'kill' toutes les sessions appartenant à UTIENT1 plus vieilles de 2 heures :
SELECT 'alter system kill session '''||sid||','||serial#||''' immediate;'
FROM v$session
WHERE username='UTIENT1' AND seconds_in_wait >7200
/
Envie de killer des sessions en ligne de commande ? Go :
SELECT username,sid,serial#
FROM v$session
WHERE username <> 'SYS' AND username <> 'SYSTEM' AND username <> 'SYSMAN' AND username <> 'DBSNMP';
SELECT 'alter system kill session '''||sid||','||serial#||''' immediate;'
FROM v$session
WHERE username NOT IN ('SYS','SYSTEM','SYSMAN','DBSNMP');
Exemple d'utilisation de USERENV :
SQL> SHOW parameter name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_file_name_convert string /u02/oradata/musrefp1, +DG01/m
uspmp1/datafile
db_name string muspmp1
db_unique_name string muspmp1
global_names BOOLEAN FALSE
instance_name string muspmp11
lock_name_space string
log_file_name_convert string
service_names string muspmp1, TAF
SQL> SELECT sys_context('USERENV','DB_NAME') FROM dual;
SYS_CONTEXT('USERENV','DB_NAME')
--------------------------------------------------------------------------------
muspmp1
ADDM et AWR en ligne de commande :
Plutôt que d'utiliser la lourde console Enterprise Manager, on a la possiblité d'obtenir rapidement
et facilement les même rapports liés aux performance d'une base de données, en ligne de commande,
sous forme d'un fichier texte.
$ sqlplus / as sysdba
> @?/rdbms/admin/addmrpt.sql
et
> @?/rdbms/admin/awrrpt.sql
Le premier nous donne un rapport ADDM (Automatic Database Diagnostic Monitor) qui fournit
un diagnostic des problèmes à régler en se basant sur les données de AWR (Automatic Workload Repository).
Le second est un rapport détaillé AWR, un peu comme celui d'un Statspack.
D'ailleurs, ceci n'est disponible que pour la version Enterprise, si tu bosses sur une version Standard,
tu devras te contenter de Statspack ...
Exemple de requêtes volontairement très consommatrice en I/O :
-- Sur Premium
SELECT /* full (t) */ count(*) FROM dwhpv3.DTWH_FCT_LIGNE_REMB t;
-- Un produit cartésien
SELECT count(*) FROM dba_tables a, dba_tables b;
Afficher le plan d'exécution d'une requête sous SQL*Plus :
SQL> EXPLAIN plan FOR
SELECT deptno FROM BIGDEPTENT WHERE dname='OPERATIONS' AND loc='BOSTON' AND code_entite=1;
Explained.
SQL> SELECT *FROM TABLE(dbms_xplan.display);
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 1255895898
--------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 50001 | 1123K| 438 (1)| 00:00:06 |
|* 1 | TABLE ACCESS FULL| BIGDEPTENT | 50001 | 1123K| 438 (1)| 00:00:06 |
--------------------------------------------------------------------------------
Predicate Information (IDENTIFIED BY operation id):
---------------------------------------------------
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
1 - filter("LOC"='BOSTON' AND "DNAME"='OPERATIONS' AND
"CODE_ENTITE"=1)
14 rows selected.
Connexion SQLPLUS sans TNSNAMES :
sqlplus nom/mot_de_passe@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=adresse_ip)(PORT=1521)))(CONNECT_DATA=(SID=nom_instance)))
Infos synthétiques ici : http://psoug.org/reference/dbms_feature_usage.html et note Metalink ”Determining Installed Features/Options, Usage and Usage Statistics [ID 1348056.1]”
SET linesize 170
col name format a43
col description format a126
SELECT name, description
FROM dba_feature_usage_statistics
ORDER BY 1;
SELECT name, detected_usages
FROM dba_feature_usage_statistics
ORDER BY 1;
-- voir si les composants installés sont valides
col comp_name format a40
SELECT comp_name, version, STATUS FROM dba_registry;
-- visualiser l'utilisation des options installées
SELECT name "feature", detected_usages "Used", first_usage_date "FROM", last_usage_date "TO"
FROM dba_feature_usage_statistics;
# voir les patchs installés sur un noyau de BDD
$ORACLE_HOME/OPatch/opatch lsinv
$ORACLE_HOME/OPatch/opatch lsinv -bugs_fixed
$ORACLE_HOME/OPatch/opatch lsinv -bugs_fixed | grep -i ‘database psu’