Tôi thấy câu lệnh SQL này là một nơi hữu ích để bắt đầu (xin lỗi, tôi không thể gán điều này cho tác giả gốc; tôi đã tìm thấy nó ở đâu đó trên internet):
SELECT * FROM
(SELECT
sql_fulltext,
sql_id,
elapsed_time,
child_number,
disk_reads,
executions,
first_load_time,
last_load_time
FROM v$sql
ORDER BY elapsed_time DESC)
WHERE ROWNUM < 10
/
Điều này tìm các câu lệnh SQL hàng đầu hiện được lưu trữ trong bộ đệm SQL được sắp xếp theo thời gian đã trôi qua. Các câu lệnh sẽ biến mất khỏi bộ nhớ cache theo thời gian, vì vậy việc cố gắng chẩn đoán công việc hàng loạt của đêm qua có thể không tốt khi bạn bắt đầu làm việc vào buổi trưa.
Bạn cũng có thể thử sắp xếp theo disk_reads và các lần thực thi. Việc thực thi rất hữu ích vì một số ứng dụng kém gửi cùng một câu lệnh SQL quá nhiều lần. SQL này giả định rằng bạn sử dụng các biến liên kết một cách chính xác.
Sau đó, bạn có thể lấy sql_id
và child_number
của một tuyên bố và đưa chúng vào em bé này:-
SELECT * FROM table(DBMS_XPLAN.DISPLAY_CURSOR('&sql_id', &child));
Điều này cho thấy kế hoạch thực tế từ bộ đệm SQL và toàn bộ văn bản của SQL.