Узнайте, какой процесс/запрос использует табличное пространство oracle temp

#oracle #debugging #performance #statistics #oracleinternals

Вопрос:

Oracle FAQ определяет временное табличное пространство следующим образом:

Временные табличные пространства используются для управления пространством для операций сортировки базы данных и для хранения глобальных временных таблиц. Например, если вы соединяете две большие таблицы, а Oracle не может выполнить сортировку в памяти, для выполнения операции сортировки во временном табличном пространстве будет выделено место.

Это здорово, но мне нужно больше подробностей о том, что именно использует пространство. Из-за особенностей дизайна приложения большинство запросов выполняют некоторую сортировку, поэтому мне нужно сузить ее до клиентского исполняемого файла, целевой таблицы или инструкции SQL.

По сути, я ищу подсказки, которые могли бы более точно сказать мне, что может быть не так с этим (довольно большим приложением). Любая подсказка может быть полезна, если она более точна, чем «сортировка».

Ответ №1:

Я не уверен, какую именно информацию вы уже должны предоставить, но с помощью следующего запроса вы укажете, какие программы/пользователи/сеансы и т. Д. В настоящее время используют ваше временное пространство.

 SELECT   b.TABLESPACE
       , b.segfile#
       , b.segblk#
       , ROUND (  (  ( b.blocks * p.VALUE ) / 1024 / 1024 ), 2 ) size_mb
       , a.SID
       , a.serial#
       , a.username
       , a.osuser
       , a.program
       , a.status
    FROM v$session a
       , v$sort_usage b
       , v$process c
       , v$parameter p
   WHERE p.NAME = 'db_block_size'
     AND a.saddr = b.session_addr
     AND a.paddr = c.addr
ORDER BY b.TABLESPACE
       , b.segfile#
       , b.segblk#
       , b.blocks;
 

Как только вы выясните, какой сеанс наносит ущерб, затем посмотрите на выполняемый SQL, и вы должны быть на правильном пути.

Ответ №2:

Спасибо Майклу Оше за его ответ ,

но в случае , если у вас несколько экземпляров Oracle RAC, вам это понадобится …

 SELECT   b.TABLESPACE
       , b.segfile#
       , b.segblk#
       , ROUND (  (  ( b.blocks * p.VALUE ) / 1024 / 1024 ), 2 ) size_mb
       , a.inst_ID
       , a.SID
       , a.serial#
       , a.username
       , a.osuser
       , a.program
       , a.status
    FROM gv$session a
       , gv$sort_usage b
       , gv$process c
       , gv$parameter p
   WHERE p.NAME = 'db_block_size'
     AND a.saddr = b.session_addr
     AND a.paddr = c.addr
     -- AND b.TABLESPACE='TEMP2'
ORDER BY a.inst_ID , b.TABLESPACE
       , b.segfile#
       , b.segblk#
       , b.blocks;
 

и это скрипт для генерации инструкций kill:
Пожалуйста, просмотрите, какие сеансы вы будете убивать …

 SELECT  b.TABLESPACE, a.username , a.osuser , a.program , a.status ,
       'ALTER SYSTEM KILL SESSION '''||a.SID||','||a.SERIAL#||',@'||a.inst_ID||''' IMMEDIATE;'
    FROM gv$session a
       , gv$sort_usage b
       , gv$process c
       , gv$parameter p
   WHERE p.NAME = 'db_block_size'
     AND a.saddr = b.session_addr
     AND a.paddr = c.addr
     -- AND b.TABLESPACE='TEMP'
ORDER BY a.inst_ID , b.TABLESPACE
       , b.segfile#
       , b.segblk#
       , b.blocks;
 

Комментарии:

1. Это золото. Спасибо!

2. нет соединения по идентификатору экземпляра, и это приводит к умножению записей

Ответ №3:

Одно эмпирическое правило состоит в том, что почти любой запрос, который занимает более секунды, вероятно, использует некоторое временное пространство, и это не только те, которые связаны с ПОРЯДКОМ, но и:

  1. ПО ГРУППАМ (СОРТИРОВКА по ГРУППАМ до 10.2 и ХЭШИРОВАНИЕ по ГРУППАМ с 10.2 и далее)
  2. ХЭШ-соединения или объединения СЛИЯНИЕМ
  3. Глобальные временные таблицы (очевидно)
  4. Перестроение индекса

Иногда используемое пространство в временных табличных пространствах не освобождается Oracle (ошибка/причуда), поэтому вам нужно вручную удалить файл из табличного пространства, удалить его из файловой системы и создать другой.

Комментарии:

1. Будет ли все это записано в$sort_usage?

2. Согласно документам Oracle, V$TEMPSEG_USAGE содержит все различные операции, для которых требуется временное пространство.