Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle-Abfragen, die von einer Sitzung ausgeführt werden

Sie werden die gesuchten Daten wahrscheinlich nicht erhalten, ohne weitere Konfigurationen vorzunehmen (z. B. Auditing zu aktivieren) oder Kompromisse einzugehen. Welches Geschäftsproblem möchten Sie lösen? Je nach Problem können wir Ihnen möglicherweise dabei helfen, den einfachsten Ansatz zur Konfiguration der Datenbank zu finden, damit Sie die gewünschten Informationen aufzeichnen können.

Oracle versucht nicht, irgendwo zu speichern, wie oft ein bestimmter Benutzer (und insbesondere nicht, wie oft ein bestimmter Betriebssystembenutzer) eine bestimmte Abfrage ausgeführt hat. Die SQL_ID in V$SESSION gibt nur die SQL_ID an dass die Sitzung gerade ausgeführt wird. Wenn dies, wie ich vermute, eine Client-Server-Anwendung ist, ist es sehr wahrscheinlich, dass dies in 99% der Fälle NULL ist, da die Sitzung in der überwiegenden Mehrheit der Zeit kein SQL ausführt, sondern auf den Benutzer wartet etwas zu tun. Die PREV_SQL_ID in V$SESSION ist die vorherige SQL-Anweisung, die ausgeführt wurde – die zumindest im Allgemeinen nicht NULL sein wird . Aber es wird nur einen Wert haben, es wird keinen Verlauf der SQL-Anweisungen haben, die von dieser Sitzung ausgeführt wurden.

Die V$SQL view ist eine Darstellung dessen, was sich im gemeinsam genutzten SQL-Pool befindet. Wenn eine SQL-Anweisung aus dem gemeinsam genutzten Pool veraltet, befindet sie sich nicht mehr in V$SQL Aussicht. Wie schnell das geschieht, hängt von einer Vielzahl von Faktoren ab – wie oft jemand die Anweisung ausführt, wie häufig neue Anweisungen geparst werden (was im Allgemeinen stark davon abhängt, ob Ihre Anwendungen Bind-Variablen korrekt verwenden), wie groß Ihr gemeinsam genutzter Pool ist usw . Im Allgemeinen wird das zwischen ein paar Minuten und dem Herunterfahren der Datenbank dauern.

Wenn Sie für die Verwendung der AWR-Tabellen lizenziert sind und eher an Annäherungen als an vollkommen korrekten Antworten interessiert sind, können Sie möglicherweise die gewünschten Informationen erhalten, indem Sie sich einige der AWR-Tabellen ansehen. Beispiel:V$ACTIVE_SESSION_HISTORY erfasst die SQL-Anweisung, die jede Sitzung aktiv jede Sekunde ausgeführt hat. Da dies jedoch eine Client-Server-Anwendung ist, bedeutet dies, dass die Sitzung die meiste Zeit inaktiv ist, sodass nichts erfasst wird. Die SQL-Anweisungen, die zufällig für eine Sitzung erfasst werden, geben Ihnen jedoch eine Vorstellung von der relativen Häufigkeit verschiedener SQL-Anweisungen. Natürlich werden auch länger laufende SQL-Anweisungen eher erfasst, da sie mit größerer Wahrscheinlichkeit zu einem bestimmten Zeitpunkt aktiv sind. Wenn Abfrage A und B beide in genau der gleichen Zeit ausgeführt werden und eine Sitzung erfasst wurde, in der A fünfmal und B zehnmal in der letzten Stunde ausgeführt wurde, können Sie daraus schließen, dass B ungefähr doppelt so oft wie A ausgeführt wird. Und wenn Sie es wissen die durchschnittliche Ausführungszeit einer Abfrage, die durchschnittliche Wahrscheinlichkeit, dass die Abfrage erfasst wurde, ist die Anzahl der Sekunden, die die Abfrage ausgeführt wird (eine Abfrage, die in 0,5 Sekunden ausgeführt wird, hat eine 50-prozentige Chance, erfasst zu werden, eine, die in 0,25 Sekunden ausgeführt wird Sekunden hat eine Wahrscheinlichkeit von 25 %, erfasst zu werden), sodass Sie abschätzen können, wie oft eine bestimmte Sitzung eine bestimmte Abfrage ausgeführt hat. Das ist weit von einer genauen Zahl entfernt, insbesondere über kürzere Zeiträume und für Abfragen, deren tatsächliche Ausführungszeiten variabler sind.

Die Daten in V$ACTIVE_SESSION_HISTORY Ansicht ist in der Regel für einige Stunden verfügbar. Es wird dann in DBA_HIST_ACTIVE_SESS_HISTORY abgetastet Tabelle, die die verfügbare Datenmenge um eine Größenordnung reduziert, wodurch Schätzungen viel ungenauer werden. Aber diese Daten werden unabhängig von Ihrem AWR-Aufbewahrungsintervall aufbewahrt (standardmäßig ist das eine Woche, obwohl viele Websites es auf 30 oder 60 Tage erhöhen).