![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Закрытие неявного курсора в Оракле [D7]
Сатир © (2006-10-24 17:13:00)Как закрыть неявный курсор в Оракле, после закрытия связанного с ним датасета?
в оракле есть пакет, из которого вызывается такая процедура
Procedure P_Get_Dict(
p_Sql_Id In Number,
p_Sql_Par In Clob,
p_Sql Out TRef_Cursor
);
где Type TRef_Cursor is Ref Cursor;
В Delphi на форме установлен TOracleDataSet, в котором вызывается эта процедура:
begin
-- call procedure
ERP.PKG_APPLICATION.P_Get_Dict(:P_SQL_Id,:P_SQL_PAR, P_SQL =>:CUR);
end;
после закрытия этого датасета
если выполнить запрос на предмет открытых курсоров
Select *
From V$open_Cursor t
Where upper(t.sql_text) Like upper('%v_shop%')
то получим наш открытый курсор.
Вопрос: как его можно закрыть?
Сатир (2006-11-01 12:39:00) [1]
> как его закрыть, можно узнать только из документации по
> Вашим компонентам доступа
Уже узнал.
Для компонентов типа TOracleDataSet из пакета DOA нужно вызывать метод CloseAll. Он-то и закрывает связанный с данным датасетом открытый неявный курсор. А вот метод Close просто закрывает датасет, а сам курсор оставляет открытым.
evvcom (2006-10-30 08:41:00) [2]у... боюсь... >(8-o)
ладно, остынь...
А то, что база тормозит, значит вина разработчика, это % на 99 согласен. Я в таких случаях никогда на наших админов не грешу.
Petr V.Abramov (2006-10-27 21:36:00) [3]пардон за эмоциональность
Petr V.Abramov (2006-10-27 21:36:00) [4]Удалено модератором
Примечание: Эмоциональность приведет к бану
evvcom (2006-10-27 14:11:00) [5]> [17] Sergey13 © (27.10.06 09:21)
> [19] Petr V.Abramov (27.10.06 10:51)
Ну пусть будет так. В админские дебри я пока особо не залазил. :)
Petr V.Abramov (2006-10-27 10:51:00) [6]> evvcom © (27.10.06 09:08) [16]
текст тоже
хеш-то он на то и хеш, что по определению дает неоднозначное совпадение, хоть и "примерно хорошее"
> Текст запроса записывается системой в таблицу
не записывается :))) V$-представления основаны неких x$-таблицах, а они являются отображением структур памяти инстанса, нету их даже в словаре
evvcom (2006-10-27 09:31:00) [7]> [17] Sergey13 © (27.10.06 09:21)
Любой запрос берет данные из таблиц. Текст запроса записывается системой в таблицу, но это вовсе не означает, что он (текст) также остается и в кеше. В кеше остаются ключи, тот же хеш, например. Я не настаиваю на верности того, что сказал, потому и писал AFAIK. В общих чертах об этом говорили мне на курсах, что-то я домыслил сам. Про хранение текста в кеше не помню, чтобы говорили, но про вычисление и хранение хеша точно было.
Sergey13 (2006-10-27 09:21:00) [8]> [16] evvcom © (27.10.06 09:08)
> А текст ли? AFAIK, вычисляется хеш запроса, и текст больше
> не хранится.
Тогда что я вижу, глядя на вывод запроса (например)
SELECT sql_text FROM v$open_cursor
?
evvcom (2006-10-27 09:08:00) [9]> [15] Petr V.Abramov (26.10.06 22:20)
> кешируется текст запросов и
А текст ли? AFAIK, вычисляется хеш запроса, и текст больше не хранится. У новых запросов опять вычисляется хеш и сравнивается с уже посчитанными ранее. Если есть такой хеш, то берется уже известный план, если нет такого хеша, строится план для этого нового запроса.
Petr V.Abramov (2006-10-26 22:20:00) [10]курсоры надо за собой закрывать, так же, как закрывать за собой файлы и дергать ручку унитаза в определенных ситуациях
> Сатир (24.10.06 17:13)
как его закрыть, можно узнать только из документации по Вашим компонентам доступа
проблема в том, что init-ora у всех свой, если база не уникально-корпоративная
> Desdechado © (24.10.06 17:27) [1]
кешируется текст запросов и план, и совсем в другом месте, чем отжираетсся память на открытые курсоры (не зря ж параметр max_open_cursors придуман)
Reindeer Moss Eater (2006-10-26 17:03:00) [11]а почему уже тогда сразу не покупкой нового сервера?(ещё одного, чтобы распределить нагрузку)
Можно сразу и сервера.
Отчего ограничение на открытые курсоры?
От жадности что ли?
Нет.
От того, что нехватает ресурсов.
А почему не хватает имеющихся ресурсов?
Потому что активность клиентов высокая.
Какой вывод?
Sergey13 (2006-10-26 16:27:00) [12]2 [10] Сатир (26.10.06 16:04)
> ты предлагаешь увеличить допустимое количество открытых курсоров?;)
Можно еще юзеров отсекать или ограничивать их активность. 8-)
Каждый запрос рождает неявный курсор.
Сатир (2006-10-26 16:14:00) [13]
> решается покупкой памяти для сервера.
а почему уже тогда сразу не покупкой нового сервера?(ещё одного, чтобы распределить нагрузку)
Reindeer Moss Eater (2006-10-26 16:08:00) [14]а у моего руководства эта проблемма имела номер приоритета 1 в списке решаемых проблем.)
Проблема эта, если она имеет такой приоритет, решается покупкой памяти для сервера.
Сатир (2006-10-26 16:04:00) [15]
> Это проблема твоего руководства. 8-)
некоторые проблеммы моего руководства - мои проблеммы, пока я работаю под началом этого руководства.:)
> open_cursors как нетрудно догадаться. 8-)
ты предлагаешь увеличить допустимое количество открытых курсоров?;)
> Уж больно продвинутое у вас руководство!
на этом вся продвинутость и заканчивается. гг
evvcom (2006-10-26 15:58:00) [16]> [7] Сатир (26.10.06 15:49)
> а у моего руководства эта проблемма имела номер приоритета 1
Интересно, а что руководство выполняло запрос
> [0] Сатир (24.10.06 17:13)
> Select *
> From V$open_Cursor t
> Where upper(t.sql_text) Like upper('%v_shop%')
??? Уж больно продвинутое у вас руководство!
Sergey13 (2006-10-26 15:57:00) [17]> [7] Сатир (26.10.06 15:49)
> а у моего руководства эта проблемма имела номер приоритета 1 в списке решаемых проблем.)
Это проблема твоего руководства. 8-)
> может тогда подскажешь имя этого параметра, раз уж заикнулся?
open_cursors как нетрудно догадаться. 8-)
Сатир (2006-10-26 15:49:00) [18]
> эта проблема имеет номер приоритета 216 в списке решаемых
> проблем
а у моего руководства эта проблемма имела номер приоритета 1 в списке решаемых проблем.)
> И решается она сменой параметра в ini файле.
может тогда подскажешь имя этого параметра, раз уж заикнулся?
Sergey13 (2006-10-25 11:10:00) [19]> [5] Сатир (25.10.06 11:07)
ИМХО, эта проблема имеет номер приоритета 216 в списке решаемых проблем. И решается она сменой параметра в ini файле.
Сатир (2006-10-25 11:07:00) [20]
> Если же они не закрываются по причинам кэширования, то на
> лимит открытых это никак не будет влиять.
Вчера прочитал в книжке по Ораклу, что открытие неявных курсоров тоже вносит свой вклад на достижение предельного количества открытых курсоров, устанавливаемого системой.
Так что, неявные курсоры тоже нужно закрывать.