Ứng dụng của tôi, sử dụng cơ sở dữ liệu Oracle, chạy chậm hoặc có vẻ như đã dừng hoàn toàn.
Làm cách nào để biết truy vấn nào đắt nhất, để tôi có thể điều tra thêm?
Ứng dụng của tôi, sử dụng cơ sở dữ liệu Oracle, chạy chậm hoặc có vẻ như đã dừng hoàn toàn.
Làm cách nào để biết truy vấn nào đắt nhất, để tôi có thể điều tra thêm?
Câu trả lời:
Cái này hiển thị SQL hiện là "ACTIVE": -
select S.USERNAME, s.sid, s.osuser, t.sql_id, sql_text
from v$sqltext_with_newlines t,V$SESSION s
where t.address =s.sql_address
and t.hash_value = s.sql_hash_value
and s.status = 'ACTIVE'
and s.username <> 'SYSTEM'
order by s.sid,t.piece
/
Điều này cho thấy ổ khóa. Đôi khi mọi thứ diễn ra chậm, nhưng đó là do nó bị chặn khi chờ khóa:
select
object_name,
object_type,
session_id,
type, -- Type or system/user lock
lmode, -- lock mode in which session holds lock
request,
block,
ctime -- Time since current mode was granted
from
v$locked_object, all_objects, v$lock
where
v$locked_object.object_id = all_objects.object_id AND
v$lock.id1 = all_objects.object_id AND
v$lock.sid = v$locked_object.session_id
order by
session_id, ctime desc, object_name
/
Đây là cách tốt để tìm các thao tác dài (ví dụ như quét toàn bộ bảng). Nếu đó là do nhiều thao tác ngắn, không có gì sẽ hiển thị.
COLUMN percent FORMAT 999.99
SELECT sid, to_char(start_time,'hh24:mi:ss') stime,
message,( sofar/totalwork)* 100 percent
FROM v$session_longops
WHERE sofar/totalwork < 1
/
alter system kill session
như được mô tả tại đây: docs.oracle.com/cd/B28359_01/server.111/b28310/…
Hãy thử điều này, nó sẽ cung cấp cho bạn các truy vấn hiện đang chạy trong hơn 60 giây. Lưu ý rằng nó in nhiều dòng cho mỗi truy vấn đang chạy nếu SQL có nhiều dòng. Nhìn vào sid, serial # để xem những gì thuộc về nhau.
select s.username,s.sid,s.serial#,s.last_call_et/60 mins_running,q.sql_text from v$session s
join v$sqltext_with_newlines q
on s.sql_address = q.address
where status='ACTIVE'
and type <>'BACKGROUND'
and last_call_et> 60
order by sid,serial#,q.piece
v $ session_longops
Nếu bạn tìm kiếm sofar! = Totalwork, bạn sẽ thấy những cái chưa hoàn thành, nhưng các mục nhập sẽ không bị xóa khi hoạt động hoàn thành nên bạn cũng có thể xem nhiều lịch sử ở đó.
Step 1:Execute the query
column username format 'a10'
column osuser format 'a10'
column module format 'a16'
column program_name format 'a20'
column program format 'a20'
column machine format 'a20'
column action format 'a20'
column sid format '9999'
column serial# format '99999'
column spid format '99999'
set linesize 200
set pagesize 30
select
a.sid,a.serial#,a.username,a.osuser,c.start_time,
b.spid,a.status,a.machine,
a.action,a.module,a.program
from
v$session a, v$process b, v$transaction c,
v$sqlarea s
Where
a.paddr = b.addr
and a.saddr = c.ses_addr
and a.sql_address = s.address (+)
and to_date(c.start_time,'mm/dd/yy hh24:mi:ss') <= sysdate - (15/1440) -- running for 15 minutes
order by c.start_time
/
Step 2: desc v$session
Step 3:select sid, serial#,SQL_ADDRESS, status,PREV_SQL_ADDR from v$session where sid='xxxx' //(enter the sid value)
Step 4: select sql_text from v$sqltext where address='XXXXXXXX';
Step 5: select piece, sql_text from v$sqltext where address='XXXXXX' order by piece;
Bạn có thể tạo báo cáo AWR (kho lưu trữ khối lượng công việc tự động) từ cơ sở dữ liệu.
Chạy từ dòng lệnh SQL * Plus:
SQL> @$ORACLE_HOME/rdbms/admin/awrrpt.sql
Đọc tài liệu liên quan đến cách tạo và hiểu báo cáo AWR. Nó sẽ cung cấp một cái nhìn đầy đủ về hiệu suất cơ sở dữ liệu và các vấn đề tài nguyên. Khi chúng ta đã quen thuộc với báo cáo AWR, sẽ rất hữu ích nếu tìm thấy SQL hàng đầu đang tiêu tốn tài nguyên.
Ngoài ra, trong giao diện người dùng EM Express 12C, chúng tôi có thể tạo AWR.
Bạn có thể kiểm tra các chi tiết truy vấn dài hạn như% đã hoàn thành và thời gian còn lại bằng cách sử dụng truy vấn dưới đây:
SELECT SID, SERIAL#, OPNAME, CONTEXT, SOFAR,
TOTALWORK,ROUND(SOFAR/TOTALWORK*100,2) "%_COMPLETE"
FROM V$SESSION_LONGOPS
WHERE OPNAME NOT LIKE '%aggregate%'
AND TOTALWORK != 0
AND SOFAR <> TOTALWORK;
Để biết danh sách đầy đủ các bước khắc phục sự cố, bạn có thể xem tại đây: Khắc phục sự cố các phiên chạy dài