Der einfachste Ansatz zum finden von „problematischen“ SQL Statements ist die Auswertung der in der SGA gecachten Statements nach den evlt. Problemfällen.
Dabei werden die Statements gesucht, die oft aufgerufen werden UND viele Resourcen (CPU und Lesevorgänge) verbrauchen.
SELECT DISTINCT s.inst_id , s.username , u."USER" , u.tablespace , u.contents , u.extents , u.blocks , u.segtype , s.client_info , sq.sql_text , sq.DISK_READS , sq.BUFFER_GETS , sq.FETCHES , sq.EXECUTIONS FROM sys.gv$session s , sys.gv$sort_usage u , sys.gv$sql sq WHERE s.saddr = u.session_addr AND s.inst_id = u.inst_id AND sq.ADDRESS = s.SQL_ADDRESS AND sq.HASH_VALUE = s.SQL_HASH_VALUE AND sq.inst_id = s.inst_id AND u.SQLADDR = sq.ADDRESS AND u.SQLHASH = sq.HASH_VALUE AND u.inst_id = sq.inst_id ORDER BY u.blocks DESC
Mit etwas Glück können Sie mit dieser Abfrage finden, die ein Anwender zuletzt ausgeführt hat.
Parameter:
INST_ID : aktuelle Instance auf der der Anwender angemeldet ist (immer 1 wenn es nur eine Instance gibt)
SID : Sid des Anwenders
SELECT inst_id,sid FROM gv$session WHERE username='<mein gesuchter Anwender';
SELECT s.sid ,s.CLIENT_INFO ,s.MACHINE ,s.PROGRAM ,s.TYPE ,s.logon_time ,s.osuser ,sq.sorts ,sq.DISK_READS ,sq.BUFFER_GETS ,sq.ROWS_PROCESSED ,sq.SQLTYPE ,sq.SQL_TEXT FROM gv$session s , gv$sql sq WHERE s.SQL_HASH_VALUE = sq.HASH_VALUE AND s.inst_id=:id AND s.sid = :sid AND sq.inst_id= s.inst_id