2011-11-28 38 views

Trả lời

3

Bạn có thể truy vấn trực tiếp các bảng AWR, đó có thể là cách đơn giản nhất. Hoặc, một kỹ thuật đơn giản mà tôi từng sử dụng trên Oracle 8i không có số liệu thống kê được kích hoạt, là chọn SQL có bộ đệm cao nhất được tính đến tỷ lệ thực thi từ v $ sql. Bạn có thể chơi với truy vấn này để chỉ tìm kiếm cho các truy vấn số thực cao, hoặc những người làm IO vật lý cao, vv

Các AWR và ASH bảng sẽ cung cấp thông tin tốt hơn, nhưng điều này có thể là một bước đầu tiên rất đơn giản:

select a.sql_id, a.ratio, a.executions 
from 
(
    select sql_id, buffer_gets/executions ratio, executions 
    from v$sql 
    where executions > 10 
    order by 2 desc 
) a 
where rownum <= 10 
+0

Thx để phát lại. Bạn có thể chỉ cho tôi truy vấn nào tôi phải sử dụng để lấy dữ liệu từ AWR không? Câu lệnh sql đắt nhất .. Giống như trên hình này: http://docs.oracle.com/cd/B19306_01/server.102/b28051/tdppt_sqlid.htm#BABECDJG? BTW. Làm thế nào về v $ sqlarea xem? – Marshall

+0

Rất nhiều các số liệu thống kê thời gian thực đến từ các bảng ASH. Nếu bạn đã bắt đầu quản lý doanh nghiệp, bạn có thể theo dõi phiên của nó và xem những gì SQL nó đang thực hiện để tạo ra những biểu đồ. Hãy xem v $ active_session_history và xem những gì bạn có thể tìm ra. –

1

Để nhanh chóng tìm thấy nếu bạn từ lâu đã chạy quá trình chiếm tài nguyên của bạn nhìn vào v $ sesson_long_ops:

SELECT * FROM v$session_longops 

see: http://docs.oracle.com/cd/B19306_01/server.102/b14237/dynviews_2092.htm

tôi sẽ tư vấn cho bạn để có một cái nhìn lúc này quá: http://docs.oracle.com/cd/B28359_01/server.111/b28274/instance_tune.htm

Sau đó bạn có thể lấy sid để tìm sql đang chạy:

SELECT sql_text FROM v$session s 
LEFT JOIN v$sqlarea sa ON s.sql_hash_value=sa.hash_value AND s.sql_address=sa.address 
WHERE sid=&sid 

Nếu bạn đang chạy unix Bạn cũng có thể có một cái nhìn tại các top lệnh (top10 hoặc topas trên hương vị khác nhau unix) sau đó bạn có thể lấy id quá trình của các truy vấn tiêu thụ cpu nhất sau đó sử dụng sau đây để có được sql vi phạm.

SELECT 
    s.username, 
    sa.sql_text 
FROM v$process p 
INNER JOIN v$session s ON p.addr=s.paddr 
LEFT JOIN v$sqlarea sa ON s.sql_hash_value=sa.hash_value AND s.sql_address=sa.address 
WHERE s.username IS NOT NULL AND p.spid=&SPID 
Các vấn đề liên quan