Database Reference
In-Depth Information
SQL>select force_matching_signature, exact_matching_signature, sql_text from v$sql where
force_matching_signature = &force_matching_signature;
alt 1: select force_matching_signature, exact_matching_signature, sql_text from v$sql where
force_matching_signature = &force_matching_signature
neu 1: select force_matching_signature, exact_matching_signature, sql_text from v$sql where
force_matching_signature = 4992463601149755224
FORCE_MATCHING_SIGNATURE EXACT_MATCHING_SIGNATURE
------------------------ ------------------------
SQL_TEXT
--------------------------------------------------------------------------------
4992463601149755224 9345155026443381189
SELECT COUNT(*) FROM TAB$ WHERE OBJ# BETWEEN 10000 AND 10000000
4992463601149755224 9345155026443381189
select count(*) from tab$ where obj# between 10000 and 10000000
4992463601149755224 9345155026443381189
explain plan for select count(*) from tab$ where obj# between 10000 and 10000000
4992463601149755224 4992463601149755224
SELECT COUNT(*) FROM TAB$ WHERE OBJ# BETWEEN :"SYS_B_0" AND :"SYS_B_1"
Die beiden Signaturen sind sehr wichtig für Performance Tuning. Die jeweiligen Spal-
ten kann man in vielen internen Views und Tabellen finden. Beispielsweise hat die View
V$SQL 2 Spalten für die beiden Signaturen (genauso wie die Tabelle STATS$SQL_SUM-
MARY aus dem Statspack), wobei die View DBA_HIST_SQLSTAT aus dem AWR nur eine
Spalte FORCE_MATCHING_SIGNATURE hat. Das ermöglicht noch eine Suche nach der
SQL-Anweisung anhand der Signatur.
Warum ist die Suche über die SQL Id oder über den Hashwert nicht ausreichend? An-
genommen, wir haben einen SQL-Text und möchten nach der entsprechenden SQL-An-
weisung im AWR (oder im Statspack-Repository) suchen. Theoretisch könnten wir direkt
nach dem SQL-Text suchen. Solche Suche ist aber ziemlich unbequem und ineffektiv, da
die Spalte SQL_FULLTEXT vom Typ CLOB ist. Man muss sich dabei auch versichern,
dass der SQL-Text genauso ist, wie der Text im AWR oder im Statspack-Repository. Für
solche Suche könnten wir auch die Funktion für die Berechnung der SQL Id (oder des
Hashwertes) aus dem Abschn. 5.1 gebrauchen. Man kann also zunächst eine SQL Id oder
einen Hashwert berechnen und dann anhand dieser Werte im AWR oder im Statspack-
Repository suchen. Leider ist diese Methode fehleranfällig und aus diesem Grund nicht
praktikabel, da wir dafür auch einen zeichengenauen SQL-Text brauchen. Wesentlich bes-
ser sieht es mit den Signaturen aus, wo einige Abweichungen in SQL-Text erlaubt sind und
die Wahrscheinlichkeit, einen Fehler zu machen, viel geringer ist.
Noch ein Beispiel. Nehmen wir eine SQL-Anweisung mit Literalen, die sehr oft mit
verschiedenen Literal-Werten ausgeführt wird. Es ist problematisch, nach so einer SQL-
Anweisung im AWR (oder im Statspack-Repository) zu suchen, da wir nicht wissen, ob
und mit welchen Literalen genau diese SQL-Anweisung dort abgespeichert ist. In diesem
Fall können wir eine Force Matching Signature für unsere SQL-Anweisung berechnen und
Search WWH ::




Custom Search