powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вопрос по prepared запросам
25 сообщений из 47, страница 1 из 2
Вопрос по prepared запросам
    #39016461
Фотография tanyxa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем здравствуйте. Ткните носом если этот вопрос уже обсуждался.

Картина следующая - имеется Firebird 2.5 в архитектуре CS и приложение из пары окон ввода данных. Все пишущие транзации короткие - стартуют вручную и завершаются жестким коммитом. Читающая транзация стартует в состоянии pre-commited. И вроде бы все хорошо, но в MON$STATEMENTS регулярно остаются записи я так понимаю подготовленных запросов вот такого вида:


В приложении эта инструкция выполняется компонентой IBSQL. Если после ExecSQL выполнить Unprepare, то запись в MON$STATEMENTS не остается. Непонятно почему сохраняются только некоторые из таких инструкций - все они одинкаово формируются, все параметризированны, все выполняются по одной схеме - старт транзации - выполнение инструкции - коммит. Получается что для некоторых курсор освебождается автоматически, а для некоторых только после уничтожения коннекта?
...
Рейтинг: 0 / 0
Вопрос по prepared запросам
    #39016557
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanyxaПолучается что для некоторых курсор освебождается автоматически, а для
некоторых только после уничтожения коннекта?
Препарированный запрос принадлежит коннекту, а не транзакции. И без явного его
освобождения всегда освобождается только с концом коннекта.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вопрос по prepared запросам
    #39016614
Фотография tanyxa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но почему тогда я вижу только некоторые? Явного освобождения не делаю нигде
...
Рейтинг: 0 / 0
Вопрос по prepared запросам
    #39016631
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanyxaНо почему тогда я вижу только некоторые? Явного освобождения не делаю нигде

Значит, твоя программа работает совсем не так как ты о ней думаешь.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вопрос по prepared запросам
    #39016684
Фотография tanyxa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovЗначит, твоя программа работает совсем не так как ты о ней думаешь.

Спасибо
....
У меня-то формы уничтожаются по закрытию, а раз так - то вызывается деструктор TIBSQL, а раз вызывается - значит выполняется Unprepared в InternalFreeHandle. Вот и все объяснение.
...
Рейтинг: 0 / 0
Вопрос по prepared запросам
    #39017207
Фотография tanyxa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тут подумала немножко и у меня назрело еще вопросов.

Если выполнять запрос в isql то после коммита подготовленные запросы исчезают. Хотя соединение остается активным. То же касается выполнения запросов в IBExpert. При коммите из клиентского приложения подготовленный запрос сохраняется либо до уничтожения компонента, связаного с ним, либо до разрыва соединения.

Я так понимаю что освобождение происходит при вызове isc_dsql_free_statement. По крайней мере судя по наблюдению в SQL мониторе. В трекере FB есть ссылка где разработчики говорят о том что в версии 2.5 добавлена специальная константа DSQL_unprepare, которая позволяет не только уничтожить сам дескриптор стэйтмента, но и сделать SQL инструкцию unprepared. Поковырявшись в исходниках IBX TIBSQL.pas (у меня версия 16.16 Delphi XE2) я не обнаружила нигде передачи этого параметра в вызов isc_dsql_free_statement. Только DSQL_close или DSQL_drop, причем передача DSQL_drop выполняется только в деструкторе и соответственно если явно не вызывать метод Unprepare - то это и даст наблюдаемую мной картину.

Так что я подозреваю что при работе isql и IBExpert вызывают isc_dsql_free_statement(DSQL_close|DSQL_unprepare) или isc_dsql_free_statement(DSQL_drop|DSQL_unprepare) что позволяет сразу освободить подготовленные запросы, в то время как IBX выполняет isc_dsql_free_statement(DSQL_close) и isc_dsql_free_statement(DSQL_drop).

Хотелось бы понять в правильную сторону ли я думаю?
...
Рейтинг: 0 / 0
Вопрос по prepared запросам
    #39017210
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanyxa,

в IBE компоненты доступа сильно допилены
...
Рейтинг: 0 / 0
Вопрос по prepared запросам
    #39017213
Фотография tanyxa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На сегодяшний момент это лучший из бесплатных вариантов. Я особых претензий не высказываю им - просто хочу понимать - правильно ли я понимаю как это работает?
...
Рейтинг: 0 / 0
Вопрос по prepared запросам
    #39017214
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanyxa> Хотелось бы понять в правильную сторону ли я думаю?

Надо уметь задавать правильные вопросы.
Правильный вопрос в данном случае -
нахера оно тебе? Задай тот вопрос или
озвучь ту проблему, от которой исходила.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вопрос по prepared запросам
    #39017215
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanyxa,

isql не использует DSQL_unprepare. И я сильно сомневаюсь, что IBE его использует.

В чём проблема-то ? Вызвать Unprepare сложно\не хочется ? А зачем ?
...
Рейтинг: 0 / 0
Вопрос по prepared запросам
    #39017217
Фотография tanyxa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам, вопрос в том почему при выполнении запросов через IBExpert и isql подготовленные запросы освобождаются, а при работе через IBX - без явного Unprepare - нет? Собственно и все получается
...
Рейтинг: 0 / 0
Вопрос по prepared запросам
    #39017218
Фотография tanyxa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad, не сложно конечно. Весь мучающий меня вопрос в 17942742
...
Рейтинг: 0 / 0
Вопрос по prepared запросам
    #39017220
Фотография tanyxa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanyxahvlad, не сложно конечно. Весь мучающий меня вопрос в 17942742
Футы.. на ночь глядя уже не то пишу. Вопрос в 17942752
...
Рейтинг: 0 / 0
Вопрос по prepared запросам
    #39017224
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanyxa,

isql выполняет запросы, используя один и тот же хендл запроса.
Соответственно, если не делать commit\rollback, то в мониторинге должен быть виден последний выполнявшийся запрос.
Если выполнить commit\rollback, то isql его тоже выполняет с помощью isc_dsql_execute (а не isc_commit\rollback). Используя всё тот же хендл запроса.
Соответственно, предыдущий запрос уничтожается сервером (в момент prepare нового запроса commit\rollback), а нового "запроса" в мониторинге не видно т.к. у таких запросов нет "тела"
которое движок может выполнить и он о них "не знает" (на самом деле там кухня с запросами чуть
сложнее)
...
Рейтинг: 0 / 0
Вопрос по prepared запросам
    #39017228
Фотография tanyxa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот оно что. Спасибо большое за ответ. Я и не знала что isc_dsql_execute может так использоваться. В моем представлении сначала должен быть isc_dsql_execute ..... и потом в конце isc_commit_transaction
...
Рейтинг: 0 / 0
Вопрос по prepared запросам
    #39017231
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanyxa> Я и не знала что isc_dsql_execute может так использоваться

Это тараканы isql. IBE (кроме скриптера) так не работает.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вопрос по prepared запросам
    #39017232
Фотография tanyxa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А еще совсем глупый вопрос - очень ли плохо если этих запросов много кэшируется? Например для одного коннекта их может быть 80-90 шт. А соединений таких около полусотни. Влияет ли это как-то на работу базы?
...
Рейтинг: 0 / 0
Вопрос по prepared запросам
    #39017235
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanyxa> для одного коннекта их может быть 80-90 шт.
tanyxa> А соединений таких около полусотни.
tanyxa> Влияет ли это как-то на работу базы?

Господи, девушка, не смешите людей.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вопрос по prepared запросам
    #39017237
Фотография tanyxa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустамtanyxa> Я и не знала что isc_dsql_execute может так использоваться

Это тараканы isql. IBE (кроме скриптера) так не работает.

Но ведет себя похоже ))) Наверное использует DSQL_drop, судя по тому что каждый раз при выполнении запроса заново делает prepare
...
Рейтинг: 0 / 0
Вопрос по prepared запросам
    #39017238
Фотография tanyxa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустамtanyxa> для одного коннекта их может быть 80-90 шт.
tanyxa> А соединений таких около полусотни.
tanyxa> Влияет ли это как-то на работу базы?

Господи, девушка, не смешите людей.

Я постараюсь :)
...
Рейтинг: 0 / 0
Вопрос по prepared запросам
    #39017240
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanyxaочень ли плохо если этих запросов много кэшируется?Они жрут память.
...
Рейтинг: 0 / 0
Вопрос по prepared запросам
    #39017241
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanyxaНаверное использует DSQL_drop, судя по тому что каждый раз при выполнении запроса заново делает prepareДля того, чтобы сделать prepare, не нужно делать DSQL_drop.
...
Рейтинг: 0 / 0
Вопрос по prepared запросам
    #39017243
Фотография tanyxa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladtanyxaочень ли плохо если этих запросов много кэшируется?Они жрут память.
Я думала что если сам запрос уже выполнен, значит клиент уже получил запрошенные данные и это не более чем сохраненный текст в метаданных
...
Рейтинг: 0 / 0
Вопрос по prepared запросам
    #39017244
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanyxa> Но ведет себя похоже

Да, пожалуй. Но не в части обработки commit и т.п.
Т.е., IIRC, IBE их честно и корректно обрабатывает,
но идиотов, которые так используют IBE я не знаю
(хотя не удивлюсь). А вот при коммите он честно
освобождает ненужные запросы.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вопрос по prepared запросам
    #39017245
Фотография tanyxa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladtanyxaНаверное использует DSQL_drop, судя по тому что каждый раз при выполнении запроса заново делает prepareДля того, чтобы сделать prepare, не нужно делать DSQL_drop.
Извините, может косноязычно выражаюсь - я говорю о том что при выполнении запроса и последующего коммита - подготовленый запрос освобождается.
...
Рейтинг: 0 / 0
25 сообщений из 47, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вопрос по prepared запросам
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]