Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 кто забивает TEMP?  [new]
TEMP?
Guest
начинают вылетать все программы при самых безобидных SQL из за невозможности расширить TEMP-tablespace. Увеличиваем его - и через пару часов все начинается снова. Что/где можно посмотреть, кто его засиоряет?
17 авг 11, 13:03    [11132406]     Ответить | Цитировать Сообщить модератору
 Re: кто забивает TEMP?  [new]
pravednik
Member

Откуда: Jacksonville, FL
Сообщений: 16268
v$tempseg_usage
17 авг 11, 13:09    [11132469]     Ответить | Цитировать Сообщить модератору
 Re: кто забивает TEMP?  [new]
Viewer
Member

Откуда: Самара
Сообщений: 5369
SELECT s.sid || ',' || s.serial# sid_serial,
         s.username,  s.osuser, p.spid, s.module, p.program,
         SUM (t.blocks) * tbs.block_size/1024/1024 mb_used,
         t.tablespace, COUNT (*) statements
    FROM v$sort_usage t, v$session s, dba_tablespaces tbs, v$process p
   WHERE t.session_addr = s.saddr
         AND s.paddr = p.addr
         AND t.tablespace = tbs.tablespace_name
GROUP BY s.sid, s.serial#, s.username,
         s.osuser, p.spid, s.module,
         p.program, tbs.block_size, t.tablespace
ORDER BY mb_used DESC;
17 авг 11, 14:18    [11133119]     Ответить | Цитировать Сообщить модератору
 Re: кто забивает TEMP?  [new]
TEMP?
Guest
Viewer
SELECT ...


хороший SQL, спасибо, надо записать..

ходил пока смотреть v$tempseg_usage (pravednik -отдельный сэнкс) и беседовать с коллегами. v$tempseg_usage не возвращал ничего. Наконец выяснилось, что дело было только в одном зловредном запросе, им сейчас занимаются.

Попутно возник такой вопрос: хотя в v$tempseg_usage ничего, в v$temp_space_header стоит bytes_free = 0. Может такое быть, что это ни о чем не говорит? Вот нарыл в форуме v$sort_segment, там стоит used_extents=used_blocks=0, что больше соотвестствует истине - в настоящий момент. Или я просто неправильно интерпретирую v$temp_space_header?
17 авг 11, 14:40    [11133353]     Ответить | Цитировать Сообщить модератору
 Re: кто забивает TEMP?  [new]
TEMP?
Guest
TEMP?
Попутно возник такой вопрос: хотя в v$tempseg_usage ничего, в v$temp_space_header стоит bytes_free = 0...
v$sort_segment, там стоит used_extents=used_blocks=0, что больше соотвестствует истине - в настоящий момент


Хотя проблема и решена, но теоретические непонятки с этими вьюхами - особенно с v$temp_space_header - в плане bytes_free остаются. Может кто-нибудь обьяснить?
17 авг 11, 17:36    [11135056]     Ответить | Цитировать Сообщить модератору
 Re: кто забивает TEMP?  [new]
temp_seg
Guest
Операции пожирающие TEMP
select
*
from
  v$sql_workarea_active w,
  v$session s
where
 w.sid = s.sid and
 tempseg_size>0
17 авг 11, 18:19    [11135367]     Ответить | Цитировать Сообщить модератору
 Re: кто забивает TEMP?  [new]
wurdu
Member

Откуда: Владивосток
Сообщений: 4441
TEMP?
TEMP?
Попутно возник такой вопрос: хотя в v$tempseg_usage ничего, в v$temp_space_header стоит bytes_free = 0...
v$sort_segment, там стоит used_extents=used_blocks=0, что больше соотвестствует истине - в настоящий момент


Хотя проблема и решена, но теоретические непонятки с этими вьюхами - особенно с v$temp_space_header - в плане bytes_free остаются. Может кто-нибудь обьяснить?
Пример:
SQL> CREATE TEMPORARY TABLESPACE TEMP2 TEMPFILE '/home/oracle/tmp1' SIZE 1G AUTOEXTEND OFF;

Tablespace created.

SQL> host ls -lh /home/oracle/tmp1;
-rw-r----- 1 oracle dba 1.1G Aug 18 10:55 /home/oracle/tmp1

SQL> host du -h /home/oracle/tmp1;
1.1M    /home/oracle/tmp1

SQL> select tablespace_name, bytes_used, bytes_free from v$temp_space_header where tablespace_name = 'TEMP2';

TABLESPACE_NAME                BYTES_USED BYTES_FREE
------------------------------ ---------- ----------
TEMP2                             1048576 1072693248

SQL> create global temporary table test.t1 (name varchar2(1000));

Table created.

SQL> insert /*+ append */ into test.t1 select lpad('q',1000,'q') name from dual connect by level <= 500000;

500000 rows created.

SQL>  host du -h /home/oracle/tmp1;
560M   /home/oracle/tmp1

SQL> select tablespace_name, bytes_used, bytes_free from v$temp_space_header where tablespace_name = 'TEMP2';

TABLESPACE_NAME                BYTES_USED BYTES_FREE
------------------------------ ---------- ----------
TEMP2                           587202560  486539264

SQL> select tablespace, blocks * 8192 from v$tempseg_usage where tablespace = 'TEMP2';

TABLESPACE                      BLOCKS*8192
------------------------------- -----------
TEMP2                             586153984

18 авг 11, 04:27    [11136859]     Ответить | Цитировать Сообщить модератору
 Re: кто забивает TEMP?  [new]
TEMP?
Guest
wurdu
Пример:



правильно я понял, что файл увеличивается по мере необходимости и bytes_free в v$temp_space_header показывают просто сколько еще осталось до максимального размера и ничего не говорят о степени использования?
18 авг 11, 13:29    [11139327]     Ответить | Цитировать Сообщить модератору
 Re: кто забивает TEMP?  [new]
wurdu
Member

Откуда: Владивосток
Сообщений: 4441
TEMP?
wurdu
Пример:



правильно я понял, что файл увеличивается по мере необходимости и bytes_free в v$temp_space_header показывают просто сколько еще осталось до максимального размера и ничего не говорят о степени использования?
Из моих тестов следует, что да. Т.е. создается sparse файл и v$temp_space_header отражает его реальную заполненность. Естественно, назад место не забирается.
18 авг 11, 14:06    [11139636]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить