ฉันต้องการรับงบที่ดำเนินการล่าสุดในฐานข้อมูลของฉันพร้อมกับตัวบ่งชี้ประสิทธิภาพ
ฉันชอบที่จะรู้ว่าคำสั่ง SQL ใดที่ใช้ CPU / DISK มากที่สุด
ฉันต้องการรับงบที่ดำเนินการล่าสุดในฐานข้อมูลของฉันพร้อมกับตัวบ่งชี้ประสิทธิภาพ
ฉันชอบที่จะรู้ว่าคำสั่ง SQL ใดที่ใช้ CPU / DISK มากที่สุด
คำตอบ:
นี่คือ SQL ที่จะทำงาน เปิดให้ทดลองใช้
ขั้นตอนที่ 1: กำหนด ID การติดตั้งและรหัสผู้ใช้
SELECT inst_id,sid FROM gv$session WHERE username='<ENTER-USERNAME>';
ขั้นตอนที่ 2:
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 = :inst_id -- replace with instID from above
AND s.sid = :sid -- replace with ID from above
AND sq.inst_id = s.inst_id
อาจมี ID และอินสแตนซ์หลายรายการที่ส่งคืน ดังนั้นมันขึ้นอยู่กับทางเลือกของผู้ใช้ในการใช้ข้อมูลนี้ในเว็บอินเตอร์เฟส ฯลฯ
in
มีสิ่งอันดับดังนั้นจากตัวอย่างด้านบน... AND (s.inst_id, s.sid) in ( (:id1, :sid1), (:id2, :sid2), ... )
คอนโซลการตรวจสอบขององค์กร Oracles แสดงข้อมูลทั้งหมดที่เกี่ยวกับข้อความค้นหาของ SQL ที่ใช้ CPU สูงสุด, คอขวด, กิจกรรมยอดนิยมในฐานข้อมูล, บล็อก SQLs และอื่น ๆ
สำหรับแนวทางในอดีตคุณสามารถใช้รายงานAWRของ Oracle เพื่อระบุจุดที่เกี่ยวข้องกับคุณ
นอกจากนี้คุณยังสามารถใช้V$SQL
มีคอลัมน์ที่น่าสนใจมากมายRUNTIME_MEM, EXECUTIONS, DISK_READS, SORTS, ELAPSED_TIME, SQL_FULLTEXT
ฯลฯ
สิ่งนี้จะให้คำสั่ง 10 อันดับแรกของคุณโดยการอ่านดิสก์ (หมายเหตุ - นี่คือยอดสะสมสำหรับการประมวลผลทั้งหมด):
select sql_id,child_number from
(
select sql_id,child_number from v$sql
order by disk_reads desc
)
where rownum<11
หากคำสั่งยังอยู่ในV$SQL_PLAN
นั้นคุณจะได้รับแผนอธิบายจริงสำหรับแบบสอบถาม:
select * from table(dbms_xplan.display_cursor('sql_id',child_number));
ฉันชอบที่จะใช้V$SQL_PLAN
เพราะมันมีข้อมูลที่ดี หากคุณสามารถใช้statistics_level=ALL
V$SQL_PLAN_STATISTICS
สำหรับ SQL ล่าสุด:
select * from v$sql
สำหรับประวัติ:
select * from dba_hist_sqltext