Mittwoch, Juli 29, 2009

SYS_GUID

Bei Carsten Czarski gibt's einen interessanten Hinweis auf die Möglichkeit, die Funktion SYS_GUID zur Erzeugung global eindeutiger IDs (also z.B. für Primärschlüssel) zu verwenden. Erläutert werden dabei auch die Vor- und Nachteile gegenüber der Verwendung von Sequences.

Montag, Juli 27, 2009

Einführung zum Thema "Materialized Views"

wer in Jonathan Lewis' Blogroll erscheint, muss interessante Dinge schreiben, dachte ich mir, als ich dort Uwe Hesses Blog entdeckte. Diese Vermutung ließ sich dann auch recht schnell verifizieren. Der einführende Artikel zu den Materialized Views ist sehr instruktiv und bringt schön auf den Punkt, was der tiefere Sinn der Sache ist. Erinnert mich persönlich ein wenig an die kompakten Erläuterungen, die man bei Tim Hall findet - sehr gutes Einführungsmaterial, wenn man sich nicht die Zeit nehmen kann (oder möchte), die Dokumentation durchzuarbeiten.

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.