STATSPACK ist ein Performance- und Analysetool und seit Oracle 8i verfügbar und es kann kostenlos verwendet werden.
Nachdem Sie Statspack installiert haben können Snapshots erstellt werden.
Snapshots können in verschiedenen Zeitintervallen und Levels erstellt werden.
Wenn ein Snapshot ausgeführt wird werden die Daten aus der SGA (System Global Area) in die entsprechenden Statspack Tabellen geschrieben.
Die Werte können dann zwischen zwei Snapshots verglichen werden.
Installation und konfiguration von STATSPACK
Tablespace erstellen
Per default wird der Tablespace SYSAUX verwendet. Um diesen nicht unnötig zu füllen wird ein eigener Tablespace STATSPACK zu erstellen.
# sqlplus / as sysdba
SQL> create tablespace statspack
datafile '/u02/oradata/ORCL/statspack01.dbf' size 1G
autoextend on next 100M maxsize 10G;
STATSPACK installieren
# sqlplus / as sysdba
SQL> define default_tablespace = 'STATSPACK'
define temporary_tablespace='TEMP'
define perfstat_password='perfstat'
@?/rdbms/admin/spcreate.sql
STATSPACK Snapshot Level
# sqlplus / as sysdba
SQL> select * from stats$level_description order by snap_level;
Level 0
This level captures general statistics, including rollback segment, row cache, SGA, system events, background events, session events, system statistics, wait statistics, lock statistics, and Latch information
Level 5
This level includes capturing high resource usage SQL Statements, along with all data captured by lower levels
Level 6
This level includes capturing SQL plan and SQL plan usage information for high resource usage SQL Statements, along with all data captured by lower levels
Level 7
This level captures segment level statistics, including logical and physical reads, row lock, itl and buffer busy waits, along with all data captured by lower levels
Level 10
This level includes capturing Child Latch statistics, along with all data captured by lower levels
Um den Snapshot Level permanent zu wechseln kannst Du als Beispiel (Level 10) dieses Statement absetzen.
# sqlplus perfstat/perfstat
SQL> exec statspack.snap(i_snap_level=>10, i_modify_parameter=>'true');
Snapshots manuell erstellen
# sqlplus perfstat/perfstat
SQL> exec statspack.snap
Snapshots automatisch jede Stunde erstellen
Per default wird mit dem Skript spauto.sql ein DBMS_JOB erstellt, der pro Stunde einen Snapshot erstellt.
# sqlplus perfstat/perfstat
SQL> @?/rdbms/admin/spauto.sql -- erstellt ein DBMS_JOBS
Mit folgenden Statements kann der Snapshot Interval angepasst werden..
# sqlplus perfstat/perfstat
SQL> variable jobno number;
begin
select job into :jobno from dba_jobs where what like '%statspack.snap%';
-- 1 Stunde
-- dbms_job.change(:jobno, null, null, 'trunc(sysdate,''HH'')+60/1440');
-- 30 Minuten
-- dbms_job.change(:jobno, null, null, 'trunc(sysdate,''MI'')+30/1440');
-- 15 Minuten
dbms_job.change(:jobno, null, null, 'trunc(sysdate,''MI'')+15/1440');
commit;
end;
/
Statspack Report zwischen 2 Snapshots erstellen
# sqlplus perfstat/perfstat
SQL> @?/rdbms/admin/spreport.sql
Alte Snapshots löschen
# sqlplus perfstat/perfstat
SQL> @?/rdbms/admin/sppurge.sql
Statspack deinstallieren
# sqlplus / as sysdba
SQL> @?/rdbms/admin/spdrop.sql
drop tablespace statspack including contents and datafiles;