จะค้นหาคำสั่ง SQL ล่าสุดในฐานข้อมูลได้อย่างไร?


25

ฉันต้องการรับงบที่ดำเนินการล่าสุดในฐานข้อมูลของฉันพร้อมกับตัวบ่งชี้ประสิทธิภาพ

ฉันชอบที่จะรู้ว่าคำสั่ง SQL ใดที่ใช้ CPU / DISK มากที่สุด


คำตอบ:


17

นี่คือ 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 และอินสแตนซ์หลายรายการที่ส่งคืน ดังนั้นมันขึ้นอยู่กับทางเลือกของผู้ใช้ในการใช้ข้อมูลนี้ในเว็บอินเตอร์เฟส ฯลฯ


ทราบเพียงเล็กน้อย: Oracle รองรับผู้ดำเนินการ (ไม่ทราบรุ่นใด) ที่inมีสิ่งอันดับดังนั้นจากตัวอย่างด้านบน... AND (s.inst_id, s.sid) in ( (:id1, :sid1), (:id2, :sid2), ... )
Betlista

1
'inst_id' หมายถึง Id ของอินสแตนซ์ไม่ใช่รหัสการติดตั้ง
miracle173

13

คอนโซลการตรวจสอบขององค์กร Oracles แสดงข้อมูลทั้งหมดที่เกี่ยวกับข้อความค้นหาของ SQL ที่ใช้ CPU สูงสุด, คอขวด, กิจกรรมยอดนิยมในฐานข้อมูล, บล็อก SQLs และอื่น ๆ

สำหรับแนวทางในอดีตคุณสามารถใช้รายงานAWRของ Oracle เพื่อระบุจุดที่เกี่ยวข้องกับคุณ

ข้อความแสดงแทน

ป้อนคำอธิบายรูปภาพที่นี่


1
หมดความอยากรู้ - AWR เป็นเครื่องมือสำหรับใบอนุญาต Oracle ทั้งหมดและฉันสามารถใช้ผ่านทางบรรทัดคำสั่งเท่านั้นหรือไม่
เซบาสเตียนโรท

2
ขออภัยฉันควรจะได้กล่าวถึงมัน - จากสิ่งที่ฉันรู้ AWR ต้องมีใบอนุญาตแยกต่างหาก - The ออราเคิลปรับแต่งและวินิจฉัยแพ็ค ฉันต้องการใช้ AWR จากคอนโซล Enterprise Manager - ฉันได้รับสิทธิ์พิเศษ (!) เพื่อใช้คอนโซล Enterprise Manager ฉันยังพบว่าคุณสามารถใช้ SQL Developer เพื่อตรวจสอบ SQLs แต่ต้องมีสิทธิ์ใช้งานข้างต้น
Sathyajith Bhat

1
Oracle Enterprise Manager (OEM) นั้นดีมาก เราสามารถตรวจสอบสถานะฐานข้อมูลของเราในแบบเรียลไทม์ด้วยกราฟรีเฟรชอัตโนมัติ เรามีจอภาพขนาดใหญ่แขวนอยู่บนกำแพงซึ่งแสดง OEM สำหรับฐานข้อมูลหลักของเราตลอด 24 ชั่วโมงทุกวันและมีประโยชน์อย่างมากในการระบุปัญหาที่เกิดขึ้น
ScottCher

4

นอกจากนี้คุณยังสามารถใช้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=ALLV$SQL_PLAN_STATISTICS


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.