Samstag, Juli 25, 2009

SQL_Monitor

Bei Doug Burns konnte man dieser Tage etwas über das in Oracle 11 verfügbare SQL Monitoring mit Hilfe des SQL Developers finden. Da ich Datenbanken aber traditionsbedingt (und auch noch aus anderen Gründen) lieber über sqlplus anspreche, habe ich mir mal ein simples Analyse-Script für die zugehörigen Tabellen V$SQL_PLAN_MONITOR und V$SQL_MONITOR gebastelt, mit dem ich hoffentlich in Zukunft etwas genauer sagen kann, was eine lang laufende Query denn nun aktuell genau tut (ohne auf die vageren Aussagen aus v$bh, v$sql_workarea angewiesen zu sein):

select p.status
     , s.id
     , s.parent_id
     , lpad (' ', depth - 1) || s.operation || ' ' || s.options operation
     , s.object_name
     , p.starts
     , p.output_rows
     , (select r.buffer_gets
          from v$sql_monitor r
         where r.key = p.key) buffer_gets
     , s.cost
     , s.time
     , s.cardinality
     , s.bytes
     , s.search_columns
     , s.access_predicates
     , s.filter_predicates
     , s.projection
     , s.cpu_cost
     , s.io_cost
  from v$sql_plan_statistics_all s
  left outer join
       v$sql_plan_monitor p
    on (s.sql_id = p.sql_id and s.id = p.plan_line_id)
 where s.sql_id = '&&1'
 order by s.id;

Noch nicht besonders elegant (meine unglückliche Liebe zu skalaren Subqueries schlägt sich einmal mehr nieder), aber - so hoffe ich zumindest - erst mal verwendbar.

Nachtrag 05.08.2011: hier noch ein Link auf die Lizenzierungsinformationen: Voraussetzung für das SQL Monitoring ist das Tuning Pack. Außerdem noch der Hinweis, dass man statt des SQL-Zugriffs auf die angegebenen v$sql_plan%-Views auch die vorformatierte Variante des dbms_sqltune-Packages (report_sql_monitor) verwenden kann - wie in meinem aktuellen Script zum Thema.

Keine Kommentare:

Kommentar veröffentlichen