Начало » Использование СУБД » Firebird, HQbird, InterBase » Релиз Firebird 5.0
|
|
Re: Релиз Firebird 5.0 [сообщение #4218 является ответом на сообщение #4216] |
Wed, 24 January 2024 15:59 |
ggreggory
Сообщений: 77 Зарегистрирован: July 2022
|
Member |
|
|
hvlad писал(а) Wed, 24 January 2024 15:58Размером управлять можно, это есть в документации.
Но тест не годится, т.к. механизм EXEC STMT имеет свой встроенный небольшой (16шт) кеш препарированных запросов.
sim_84 писал(а) Wed, 24 January 2024 15:53ggreggory, ты какую хрень проверяешь. Содержимое кеша подготовленных запросов надо смотреть в MON$COMPILED_STATEMENTS, а не в MON$STATEMENTS
Понял, спасибо!
[Обновления: Wed, 24 January 2024 16:00] Известить модератора
|
|
|
|
|
|
|
Re: Релиз Firebird 5.0 [сообщение #4236 является ответом на сообщение #4234] |
Thu, 25 January 2024 09:43 |
sim_84
Сообщений: 332 Зарегистрирован: June 2022
|
Senior Member |
|
|
Вообще-то в кое-чём лучше. Текст запроса лишний раз на сервер не посылается, метаданные на клиента лишний раз не тянутся.
В остальном да, ничем не лучше. И даже как сказал Влад серверный кеш лучше, хотя бы тем, что не "блокирует" DDL. Да и приложение меньше памяти требует.
Моё мнение такое. Кеш препарированных запросов на стороне клиента не нужен. Держать подготовленными надо только запросы которые часто используются.
То есть если подготовленный запрос поработал, и закончил свою работу, и потом хрен знает когда опять использоваться будет (может через 5 минут,, может через час), то
не фиг держать его в каком-то кеше на клиенте. Пусть сервер с ним разбирается, он хотя бы может выкинуть его из кеша когда-нибудь.
|
|
|
Re: Релиз Firebird 5.0 [сообщение #4237 является ответом на сообщение #4236] |
Thu, 25 January 2024 09:59 |
pastor
Сообщений: 83 Зарегистрирован: June 2022 Географическое положение: Калуга
|
Member |
|
|
sim_84 писал(а) Thu, 25 January 2024 09:43
Моё мнение такое. Кеш препарированных запросов на стороне клиента не нужен. Держать подготовленными надо только запросы которые часто используются.
То есть если подготовленный запрос поработал, и закончил свою работу, и потом хрен знает когда опять использоваться будет (может через 5 минут,, может через час), то
не фиг держать его в каком-то кеше на клиенте. Пусть сервер с ним разбирается, он хотя бы может выкинуть его из кеша когда-нибудь.
и на сервере тоже
там где мне нужно, я сделаю prepare
где не нужно, за меня его теперь сделает противоестественный интеллект. т.к. накладные небольшие - пусть его.
единственое место, где не получится его сделать - execute statement
|
|
|
Re: Релиз Firebird 5.0 [сообщение #4239 является ответом на сообщение #4237] |
Thu, 25 January 2024 11:13 |
sim_84
Сообщений: 332 Зарегистрирован: June 2022
|
Senior Member |
|
|
Prepare ты сделаешь в любом случае. А вот будет ли подготовленный запрос висеть в памяти после своего завершения уже зависит от разработчика. К примеру у тебя в приложении формочка, где используется некоторый запрос.
Вот он поработал в этой формочке, а потом умер когда форму закрыли. Можно конечно его где-то кешировать, но это сильно усложнит архитектуру приложения, ибо такой кеш должен быть глобальным и привязан к коннекту.
Да и держать на клиенте подготовленным запрос, который возможно больше никогда не потребуется тоже не хорошо.
На сервере накладные расходы на этот кеш не большие. К тому же он сделан с прицелом на будущее, когда в SS он будет общим, польза от него сильно увеличится.
Другой плюс эти подготовленные запросы (и PSQL модули) можно смотреть в MON$COMPILED_STATEMENTS. Минус в том, что Адриано не прислушался к совету Влада и не стал добавлять в эту таблицу MON$ATTACHMENT_ID (мол потом кеш будет общим).
В результате сейчас в этой табличке куча повторяющихся подготовленных запросов и не понятно кому они принадлежат.
Другое дело, что в текущем виде для некоторых приложений он бесполезен. Например на PHP. Коннект всё равно помрёт после выполнения PHP скрипта, а значит и его кеш.
Как известно в PHP нет пула коннектов к БД, а использование альтернативы в виде pconnect ни к чему хорошему не приведёт.
|
|
|
|
Re: Релиз Firebird 5.0 [сообщение #4242 является ответом на сообщение #4239] |
Thu, 25 January 2024 14:36 |
ggreggory
Сообщений: 77 Зарегистрирован: July 2022
|
Member |
|
|
sim_84 писал(а) Thu, 25 January 2024 11:13Можно конечно его где-то кешировать, но это сильно усложнит архитектуру приложения, ибо такой кеш должен быть глобальным и привязан к коннекту.
В фибах это базовый и отлаженный функционал, никакого усложнения. Но лично я его в свое время чуть-чуть допилил. Добавил ограничение на размер, а при переполнении чистку с учетом фактора частоты использования запроса. И еще по таймеру грохает запросы, не используемые 10 минут и более. До допиливания были проблемы с потреблением памяти.
sim_84 писал(а) Thu, 25 January 2024 11:13
К тому же он сделан с прицелом на будущее, когда в SS он будет общим, польза от него сильно увеличится.
Вот когда будет общим - тогда в таком кэше действительно будет польза.
И еще когда кэш execute statement объединят с кэшем обычных запросов. Это тоже важно.
sim_84 писал(а) Thu, 25 January 2024 11:13Другое дело, что в текущем виде для некоторых приложений он бесполезен. Например на PHP. Коннект всё равно помрёт после выполнения PHP скрипта, а значит и его кеш.
Как известно в PHP нет пула коннектов к БД, а использование альтернативы в виде pconnect ни к чему хорошему не приведёт.
Если запись в кэше будет жить еще какое-то время с момента отключения и сможет быть использована при повторном подключении - польза будет.
|
|
|
|
Re: Релиз Firebird 5.0 [сообщение #4245 является ответом на сообщение #4244] |
Thu, 25 January 2024 15:20 |
Сообщений: 198 Зарегистрирован: September 2022
|
Senior Member |
|
|
avp писал(а) Thu, 25 January 2024 14:48...
На практике кэширование крайне редко имеет смысл.
В нынешнем виде (кэш в рамках коннекта, т.е. FB 5.0 или ФИБы) - пользы, наверное, и нет.
Ибо, как разработчик, обычно всегда знаешь, каким должно быть время жизни / область видимости запроса. Ну да, можно придумать особые случаи, но навскидку ничего, кроме кривых ручек программиста или ректально-вычурной архитектуры клиентского приложения, на ум и не приходит.
Возможно, польза для разработчиков как промежуточный этап на пути к общему кэшу SS.
Маркетинговая фича да - и для фиб, и для FB 5.0. Тоже дело хорошее.
|
|
|
|
|
Re: Релиз Firebird 5.0 [сообщение #4253 является ответом на сообщение #4236] |
Fri, 26 January 2024 11:51 |
hvlad
Сообщений: 364 Зарегистрирован: August 2022
|
Senior Member |
|
|
sim_84 писал(а) Thu, 25 January 2024 08:43Моё мнение такое. Кеш препарированных запросов на стороне клиента не нужен. Держать подготовленными надо только запросы которые часто используются.
То есть если подготовленный запрос поработал, и закончил свою работу, и потом хрен знает когда опять использоваться будет (может через 5 минут,, может через час), то
не фиг держать его в каком-то кеше на клиенте. Пусть сервер с ним разбирается, он хотя бы может выкинуть его из кеша когда-нибудь. Ты говоришь об "обычных" GUI приложениях, где частота выполнения запросов обычно зависит от способности пользователя давить клаву.
Но есть и другие виды приложений. И некоторые написаны с использованием клиентского пула коннектов в парадигме - взял коннект из пула,
выполнил запрос, вернул коннект в пул. Такие приложения не могут организовать собственный набор препарированных запросов. В принципе,
это можно организовать на уровне используемого фреймворка, который реализует пул коннектов, но я про такие не слышал (может они и есть).
Так вот - для таких приложений кеш запросов на сервере очень даже может помочь. И реально помогает.
|
|
|
|
|
|
Re: Релиз Firebird 5.0 [сообщение #4257 является ответом на сообщение #4255] |
Fri, 26 January 2024 13:37 |
hvlad
Сообщений: 364 Зарегистрирован: August 2022
|
Senior Member |
|
|
avp писал(а) Fri, 26 January 2024 12:02hvlad писал(а) Fri, 26 January 2024 11:51 Такие приложения не могут организовать собственный набор препарированных запросов. В принципе,
это можно организовать на уровне используемого фреймворка, который реализует пул коннектов, но я про такие не слышал (может они и есть).
Так вот - для таких приложений кеш запросов на сервере очень даже может помочь. И реально помогает.
Тут ещё вопрос какие запросы вообще имеет смысл кэшировать. Нужно ли это делать для простых select/update/insert/delete? Каков будет для такого профит?
Моё мнение - кешировать имеет смысл те запросы, время на подготовку (prepare) которых составляет заметную часть времени выполнения.
Например, я знаю случай, когда элементарный INSERT препарировался менее чем 1 мс в монопольном коннекте, а под хорошей нагрузкой (десятки
параллельных потоков) - уже более 6 мс. И кеширование этого запроса очень заметно повлияло на масштабируемость всего приложения.
|
|
|
|
|
|
Re: Релиз Firebird 5.0 [сообщение #4291 является ответом на сообщение #4289] |
Tue, 30 January 2024 14:12 |
hvlad
Сообщений: 364 Зарегистрирован: August 2022
|
Senior Member |
|
|
avp писал(а) Tue, 30 January 2024 12:57hvlad писал(а) Fri, 26 January 2024 13:37
Моё мнение - кешировать имеет смысл те запросы, время на подготовку (prepare) которых составляет заметную часть времени выполнения.
Например, я знаю случай, когда элементарный INSERT препарировался менее чем 1 мс в монопольном коннекте, а под хорошей нагрузкой (десятки
параллельных потоков) - уже более 6 мс. И кеширование этого запроса очень заметно повлияло на масштабируемость всего приложения.
Не совсем понятно что за случай такой. Если инсертов много, то программист должен сам использовать препарированные запросы.
Если инсертов мало, то и кешировать их нет смысла.
Если сервер очень сильно загружен, то кэширование это паллиатив.
Я выше писал про приложения с пулом коннектов.
|
|
|
|
|
|
Re: Релиз Firebird 5.0 [сообщение #4559 является ответом на сообщение #4298] |
Wed, 28 February 2024 18:19 |
SergeyKNP
Сообщений: 87 Зарегистрирован: October 2022
|
Member |
|
|
Привет всем.
Народ, подскажите, плиз, как теперь использовать RETURNING в FD в В12 ?
вот выдержка из "Firebird_5_0_What_New_SQL.pdf", только что поправить в проекте, чтобы заработало D12 не понятно.
----------------------------------------------------------
Поддержка возврата множества записей операторами с RETURNING
Начиная с Firebird 5.0 клиентские модифицирующие операторы INSERT .. SELECT, UPDATE,
DELETE, UPDATE OR INSERT и MERGE, содержащие предложение RETURNING возвращают курсор, то
Новые возможности в языке SQL
7
есть они способны вернуть множество записей вместо выдачи ошибки "multiple rows in
singleton select", как это происходило ранее.
Теперь эти запросы во время подготовки описываются как isc_info_sql_stmt_select, тогда
как в предыдущих версии они были описаны как isc_info_sql_stmt_exec_procedure.
Сингелтон-операторы INSERT .. VALUES, а также позиционированные операторы UPDATE и
DELETE (то есть, которые содержат предложение WHERE CURRENT OF) сохраняют существующее
поведение и описываются как isc_info_sql_stmt_exec_procedure.
Однако все эти запросы, если они используются в PSQL и применяется предложение
RETURNING, по-прежнему рассматриваются как сингелтоны.
|
|
|
|
|
|
Переход к форуму:
Текущее время: Sun Dec 22 05:01:30 GMT+3 2024
Общее время, затраченное на создание страницы: 0.02158 секунд
|