![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
IBX, prepare & транзакции. [D6, IB 7.5]
asail © (2007-11-06 23:15:00)Здрасте Все!
Вопрос такой:
Как долго хранится на сервере откомпилированный запрос?
На протяжении времени жизни транзакции, коннекта клиента к БД или еще как?
Т.е. если я выполнил prepare для запроса, закрыл транзакцию, открыл новую - надо ли снова выполнять prepare или нет?
Аналогично если отключиться и снова подключиться к БД?
Спасибо.
DrPass (2007-11-07 15:04:00) [1]
> Сервис может бежать дни, а то и недели/месяцы и держать
> все это время коннект к БД не есть хорошо...
В смысле, не хорошо? Соединение - не трусы, резинкой нигде не натрет. Сделай постоянное соединение и не морочь ни себе голову, ни машине процессорв
Johnmen (2007-11-07 14:45:00) [2]>asail
Не зацикливайся на ловле блох.
Johnmen (2007-11-07 14:44:00) [3]
> Sergey13 © (07.11.07 13:44) [13]
> В конце концов что мешает просто с секундомером сравнить 2 варианта.
Цена деления :)
Sergey13 (2007-11-07 13:44:00) [4]> [11] asail (07.11.07 13:38)
У тебя какая то проблема конкретная по производительности в наличии? ИМХО будет производительнее решать конкретно ее. Много на оптимизации препарирования не выиграешь. В конце концов что мешает просто с секундомером сравнить 2 варианта.
Desdechado (2007-11-07 13:43:00) [5]Время соединения может на порядки превышать время выполнения одиночного запроса INSERT.
Так что держи постоянное подключение и фиксируй транзакции.
asail (2007-11-07 13:38:00) [6]
> Запросы параметрические?
Ессесно...
> что тебе мешает приделать к твоему сервису постоянное соединение
Сервис может бежать дни, а то и недели/месяцы и держать все это время коннект к БД не есть хорошо...
Ну да бог с ним с коннекшеном, но хотя бы в разных транзакциях внутри одного коннекта держать подготовленные запросы помогло бы сильно...
Просто сейчас в этом сервисе порядка 300 различных запросов (на DataModuls) которым при каждом коннекте к БД делаю prepare. А внутри каждого коннекта запускается X транзакций, работающих с этими запросами. Вопрос в том, на сколько такой механизм эффективен и есть ли тут что оптимизировать?
DrPass (2007-11-07 13:26:00) [7]
> Поясню:
> Есть некий сервис который бежит и время от времени получает
> извне некие данные, которые надо определенным образом раскидать
> по БД.
> Только при получении этих данных сервис коннектится к БД,
> открывает транзакцию и выполняет набор запросов.
> Вопрос, в какой момент припэрить будет оптимальнее.
В таком случае - ни в какой. Я не знаю, сколько подготовленный запрос сидит в буфере, и относится ли буфер к транзакции или ко всему коннекшену (думаю, все-таки к коннекшену). Но однозначно при прекращении сессии все ее буферы уничтожаются. Какого-либо глобального кеша запросов у птички нет.
Если оптимизация так важна - что тебе мешает приделать к твоему сервису постоянное соединение?
Sergey13 (2007-11-07 13:08:00) [8]> [8] asail (07.11.07 13:01)
> Вопрос, в какой момент припэрить будет оптимальнее.
А как много ты надеешься на этом съэкономить? Запросы параметрические?
asail (2007-11-07 13:01:00) [9]Поясню:
Есть некий сервис который бежит и время от времени получает извне некие данные, которые надо определенным образом раскидать по БД.
Только при получении этих данных сервис коннектится к БД, открывает транзакцию и выполняет набор запросов.
Вопрос, в какой момент припэрить будет оптимальнее.
Johnmen (2007-11-07 12:23:00) [10]
> Ну законектился, выполнил запрос, отконектился. И так несколько
> (много) раз...
Это специально так, чтобы помедленнее было? :)
Правильный_Вася (2007-11-07 12:02:00) [11]
> Ну законектился, выполнил запрос, отконектился. И так несколько
> (много) раз.
довольно странная (если не сказать жестче) арзитектура
asail (2007-11-07 11:46:00) [12]
> Откуда несколько коннектов?
Ну законектился, выполнил запрос, отконектился. И так несколько (много) раз... Вопрос если при первом коннекте к БД выполнить prepare, то окажет ли это влияние на все остальные разы?
Правильный_Вася (2007-11-07 10:45:00) [13]AFAIK, на время жизни сессии
Johnmen (2007-11-07 09:56:00) [14]
> нескольких коннектов к БД?
Откуда несколько коннектов?
asail (2007-11-07 09:39:00) [15]
> Можно вообще не препарировать. Это делается в любом случае
> неявно.
Это я как раз понимаю. Вопрос в том, как добиться максимальной производительности при многократномвызове одного и того же запроса, но в контексте разных транзакций и нескольких коннектов к БД?
Johnmen (2007-11-07 09:27:00) [16]Можно вообще не препарировать. Это делается в любом случае неявно.
Про остальное www.ibase.ru