Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Закрытие неявного курсора в Оракле [D7]


Страницы:   1 2

Сатир ©   (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]


> Если же они не закрываются по причинам кэширования, то на
> лимит открытых это никак не будет влиять.

Вчера прочитал в книжке по Ораклу, что открытие неявных курсоров тоже вносит свой вклад на достижение предельного количества открытых курсоров, устанавливаемого системой.
Так что, неявные курсоры тоже нужно закрывать.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо