|
Как бороться с зависшими соединениями?
|
|||
---|---|---|---|
#18+
Люди! Подскажите как бороться с зависшими соединениями. Что реально происходит: Юзера работают, работают, создают всякие отчеты (простые и сложные), затем случайно запускается одновременно несколько тяжелых задач. Естественно все начинает тормозить. Дольше кто-то из юзеров не выдерживает пытки ожиданием и через CTRL-ALT-DEL вырубает свою программу. В большинстве случаем соединение этого пользователя (со статусом ACTIVE) самостоятельно дорабатывает до конца и благополучно отстреливается. Но некоторые продолжают жить со статусом ACTIVE бог знает сколько времени. Хотя реально процедуры рабатуют макимум 5 мин. Как правило подвисает на следующем операторе: INSERT INTO tbl SELECT ... Причем никаких блокировок для этого соединения вроде бы нет. В ручную эти соединения убить можно (добрые люди подсказали через ORAKILL, а то ALTER SYSTEM KILL SESSION только помечает на удаление ). Подскажите что надо настроить на сервере, чтобы такие соединения отстреливать автоматом (параметр sqlnet.expire_time = 1)? PS: не знаю важно ли это, но вставка строк идет во временную таблицу (CREATE GLOBAL TEMPORARY TABLE tbl(...) ON COMMIT PRESERVE ROWS) Заранее благодарен. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2002, 09:36 |
|
Как бороться с зависшими соединениями?
|
|||
---|---|---|---|
#18+
Подскажите пож. что такое ORAKILL в вашем сообщении ? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2002, 09:05 |
|
Как бороться с зависшими соединениями?
|
|||
---|---|---|---|
#18+
OraKill.exe програмка (в NT находится в каталоге BIN оракла). Позволяет грохать все процессы (соединения) оракла по ID процесса. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2002, 09:12 |
|
Как бороться с зависшими соединениями?
|
|||
---|---|---|---|
#18+
INSERT INTO tbl SELECT Сия конструкция на языке Оракла называеться DIRECT LOAD INSERT. И она обладает, если не ошибаюсь, определенной спецификой. Допустим, вовсе не обязательно что, результат этого "дайрект-лоада" будет соответствовать тому, если вы откроете курсор, потом все "выфетьчеете оттуда", последовательно по записи всавите в tbl а потом "коммтните" транзакцию. Советую подетельнее ознакомиться с доками /Oracle8i Server, Release 8.1.x/Oracle8i Concepts/Direct-Load INSERT/. Хотя это все додумки, которые могут ничего не дать. Но все равно удачи вам mmoroz, the oracle processes slayes! ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2002, 14:29 |
|
Как бороться с зависшими соединениями?
|
|||
---|---|---|---|
#18+
Вот копался и обнаружил такую штуку: -при просмотре v$transaction я увидел, что на зависшую сессию приходятся ДВЕ ТРАНЗАКЦИИ!!! Как это такое может быть (какова рашифровка по v$transaction)? PS:Сервак 2*CPU на всякий случай привожу результат SELECTA из V$TRANSACTION (для зависшей сессии) \nADDR XIDUSN XIDSLOT XIDSQN UBAFIL UBABLK -------- ------ ------- ------ ------ ------ 041469F0 2 37 10157 2 593 04146D60 2 16 10155 2 595 UBASQN UBAREC STATUS START_SCNB START_SCNW ------ ------ ------ ---------- ---------- 16204 5 ACTIVE 14130236 0 16204 1 ACTIVE 14130237 0 START_UEXT START_UBAFIL START_UBABLK START_UBASQN ---------- ------------ ------------ ------------ 97 2 592 16204 97 2 594 16204 START_UBAREC SES_ADDR FLAG SPA REC NOU PTX ------------ -------- -------- --- --- --- --- 4 03EB0BF0 7683 NO NO NO NO 1 03EB0BF0 67112483 NO YES NO NO PRV_XIDUSN PRV_XIDSLT PRV_XIDSQN PTX_XIDUSN ---------- ---------- ---------- ---------- 0 0 0 0 2 37 10157 0 PTX_XIDSLT DSCN-B DSCN-W USED_UBLK USED_UREC ---------- -------- ------ --------- --------- 0 14129634 0 2 12 0 14129634 0 2 2 LOG_IO PHY_IO CR_GET CR_CHANGE --------- ------ ------ --------- 194701402 97 1088 59908176 194701332 0 2 59908099 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2002, 10:10 |
|
Как бороться с зависшими соединениями?
|
|||
---|---|---|---|
#18+
Не вдаваясь в подробности всего этого аутпута скажу, что в одной сессии могут преспокойно жить теоретически неограниченное ко-во транзакций. Называеться эта вещь автономные транзакции (Autonomous Transactions). Читаеться тут: PL/SQL User's Guide and Reference /Interaction with Oracle/Using Autonomous Transactions ну и чегото там еще написано в оракл-концептсах. Идея их в том, что из одной транзакции можно открыть другую, из этой другой еще одну и тд. Мэйн транзакции приостанавливает свою работу пока не завершиться дочерняя (автономная) транзакция. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2002, 12:08 |
|
Как бороться с зависшими соединениями?
|
|||
---|---|---|---|
#18+
В данном случае автономные транзакции не используются. А по поводу вывода к таблице v$transaction насторожила следующая штука: -в столбце REC (рекурсивная транзакция) для одной транзакции стоит YES, а для другой NO, причем из v$session ссылка идет только одну из этих транзакций, вторая делает непонятно, что!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2002, 12:34 |
|
Как бороться с зависшими соединениями?
|
|||
---|---|---|---|
#18+
Наконец, то добил эту гадину!!! Итак обнаружил следующую вещь: -как только я с временных таблиц, в которые производится insert, убрал все constraints, так сразу зависания insert пропали (уже 5 дней работает) При constaraint зависания происходили (1 в 2 дня) Вот вопрос: это у меня Oracle8i так глючит (8.1.5 на NT2000) или это такая особенность временных таблиц? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2002, 09:21 |
|
|
start [/forum/topic.php?fid=52&fpage=2849&tid=1993376]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
74ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
3ms |
others: | 283ms |
total: | 455ms |
0 / 0 |