17. September 2008

Den Speicherverbrauch einer Datenbank-Session ermitteln - nur mit SQL

English title: Determine the memory consumption of a database session

Gerade wenn man viel PL/SQL-Logik programmiert, muss man hin und wieder feststellen, wieviel Hauptspeicher eine Datenbanksession verbraucht. Und man hat nicht immer die Zeit, die grafische Oberfläche zu starten ... und manchmal (Entwicklermaschine) hat man auch gar nicht mehr die Ressourcen dafür frei ...
When you're coding lots of PL/SQL code you might need to determine the sessions's memory consumption sometimes. And sometimes you don't have the time to start a graphical user interface just for that - and there are situations where you just don't have the resources (on your development machine) to start Enterprise Manager oder SQL Developer or any other tool.
Heute habe ich (zum x-ten Mal) wieder ein SQL-Skript dafür geschrieben - und damit ich es das nächste Mal nicht schon wieder zusammensuchen muss, poste ich es nun hier. Und vielleicht ist es ja für den einen oder andeeren ebenfalls hilfreich.
Today I've compiled (for the x-th time) a SQL script displaying the memory statistics for a particular database session. And today I'm posting it here - just that I have it ready the next time I need it. And perhaps it's also useful for you ...
col program format a30
col machine format a30
col name format a30

set verify off
set define '&'

set lines 120

accept UNAME default 'SYS' prompt '>> Username [SYS] : '

select si.sid, si.program, si.machine, sa.name, sum(ss.value) value
from v$sesstat ss, v$statname sa, v$session si
where ss.sid = si.sid and (sa.name like '%pga%' or sa.name like '%uga%')
and si.username = '&UNAME.' and sa.statistic# = ss.statistic#
group by si.sid, si.program, si.machine, sa.name
order by 1,2,3
/
Mit der LIKE Abfrage kann man die Statistiken eingrenzen, die man sehen möchte - das Beispiel selektiert den PGA und UGA Verbrauch. Mit einem select distinct name from v$statname kann man sich ansehen, welche Statistiken es gibt. Das Skript zeigt einen "Snapshot" der aktuellen Situation. Die Ausgabe sieht dann so aus:
You can select the statistic you want to have displayed by changing the LIKE expression in the query. A select distinct name from v$statname shows you the available statistics. Running the script gives you a "snapshot" of the current situation. The output looks like this:
SQL> @mem
>> Username [SYS] : PARTNER

       SID PROGRAM                        MACHINE                        NAME                               VALUE
---------- ------------------------------ ------------------------------ ------------------------------ ---------
       137 sqlplus.exe                    DE-ORACLE\cczarski-de          session uga memory max           3369532
       137 sqlplus.exe                    DE-ORACLE\cczarski-de          session uga memory               1480156
       137 sqlplus.exe                    DE-ORACLE\cczarski-de          session pga memory max           8500756
       137 sqlplus.exe                    DE-ORACLE\cczarski-de          session pga memory               8500756
         : :                              :                              :                                      :

Keine Kommentare:

Beliebte Postings