Подтвердить что ты не робот

Как проверить базу данных Oracle на длительные запросы

Мое приложение, использующее базу данных Oracle, работает медленно или, кажется, полностью остановилось.

Как узнать, какие запросы наиболее дороги, поэтому я могу продолжить исследование?

4b9b3361

Ответ 1

Здесь показан SQL, который в настоящее время "АКТИВНО": -

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
/

Здесь отображаются блокировки. Иногда все идет медленно, но это потому, что он заблокирован в ожидании блокировки:

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
/

Это хорошо подходит для поиска длительных операций (например, полного сканирования таблицы). Если это из-за большого количества коротких операций, ничего не появится.

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
/

Ответ 2

Попробуйте это, он даст вам запросы в настоящее время более 60 секунд. Обратите внимание, что он печатает несколько строк для каждого запроса, если SQL имеет несколько строк. Посмотрите на sid, serial #, чтобы увидеть, что принадлежит вместе.

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

Ответ 3

v $ SESSION_LONGOPS

Если вы ищете sofar! = Totalwork, вы увидите те, которые не были завершены, но записи не удаляются после завершения операции, так что вы также можете увидеть там много истории.

Ответ 4

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;

Ответ 5

Вы можете создать отчет AWR (автоматический репозиторий рабочей нагрузки) из базы данных.

Запустите из командной строки SQL * Plus:

SQL> @$ORACLE_HOME/rdbms/admin/awrrpt.sql

Прочитайте документ, связанный с тем, как создать и понять отчет AWR. Это даст полное представление о производительности базы данных и проблемах с ресурсами. Как только мы ознакомимся с отчетом AWR, будет полезно найти Top SQL, который потребляет ресурсы.

Кроме того, в пользовательском интерфейсе 12C EM Express мы можем генерировать AWR.

Ответ 6

Вы можете проверить детали длительных запросов, такие как% выполненных и оставшееся время, используя следующий запрос:

 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;

Полный список действий по устранению неполадок вы можете проверить здесь: Устранение неполадок при длительных сеансах