| Начало » Использование СУБД » Firebird, HQbird, InterBase » Релиз Firebird 5.0 Переход к форуму:
	|  |  
	|  |  
	| 
		
			| Re: Релиз Firebird 5.0 [сообщение #4218 является ответом на сообщение #4216] | Wed, 24 January 2024 15:59   |  
			| 
				
				
					|  ggreggory Сообщений: 85
 Зарегистрирован: July 2022
 | Member |  |  |  
	| hvlad писал(а) Wed, 24 January 2024 15:58 Размером управлять можно, это есть в документации.sim_84 писал(а) Wed, 24 January 2024 15:53Но тест не годится, т.к. механизм EXEC STMT имеет свой встроенный небольшой (16шт) кеш препарированных запросов.
 
 ggreggory, ты какую хрень проверяешь. Содержимое кеша подготовленных запросов надо смотреть в 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 Сообщений: 355
 Зарегистрирован: June 2022
 | Senior Member |  |  |  
	| Вообще-то в кое-чём лучше. Текст запроса лишний раз на сервер не посылается, метаданные на клиента лишний раз не тянутся. В остальном да, ничем не лучше. И даже как сказал Влад серверный кеш лучше, хотя бы тем, что не "блокирует" DDL. Да и приложение меньше памяти требует.
 
 Моё мнение такое. Кеш препарированных запросов на стороне клиента не нужен. Держать подготовленными надо только запросы которые часто используются.
 То есть если подготовленный запрос поработал, и закончил свою работу, и потом хрен знает когда опять использоваться будет (может через 5 минут,, может через час), то
 не фиг держать его в каком-то кеше на клиенте. Пусть сервер с ним разбирается, он хотя бы может выкинуть его из кеша когда-нибудь.
 |  
	|  |  |  
	| 
		
			| Re: Релиз Firebird 5.0 [сообщение #4237 является ответом на сообщение #4236] | Thu, 25 January 2024 09:59   |  
			| 
				
				
					|  pastor Сообщений: 100
 Зарегистрирован: June 2022
 Географическое положение: Калуга
 | Senior 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 Сообщений: 355
 Зарегистрирован: 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 Сообщений: 85
 Зарегистрирован: 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   |  
			| 
				
				
					|   Сообщений: 204
 Зарегистрирован: 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 Сообщений: 381
 Зарегистрирован: August 2022
 | Senior Member |  |  |  
	| sim_84 писал(а) Thu, 25 January 2024 08:43 Моё мнение такое. Кеш препарированных запросов на стороне клиента не нужен. Держать подготовленными надо только запросы которые часто используются.Ты говоришь об "обычных" GUI приложениях, где частота выполнения запросов обычно зависит от способности пользователя давить клаву.То есть если подготовленный запрос поработал, и закончил свою работу, и потом хрен знает когда опять использоваться будет (может через 5 минут,, может через час), то
 не фиг держать его в каком-то кеше на клиенте. Пусть сервер с ним разбирается, он хотя бы может выкинуть его из кеша когда-нибудь.
 Но есть и другие виды приложений. И некоторые написаны с использованием клиентского пула коннектов в парадигме - взял коннект из пула,
 выполнил запрос, вернул коннект в пул. Такие приложения не могут организовать собственный набор препарированных запросов. В принципе,
 это можно организовать на уровне используемого фреймворка, который реализует пул коннектов, но я про такие не слышал (может они и есть).
 Так вот - для таких приложений кеш запросов на сервере очень даже может помочь. И реально помогает.
 
 
 |  
	|  |  |  
	|  |  
	|  |  
	|  |  
	| 
		
			| Re: Релиз Firebird 5.0 [сообщение #4257 является ответом на сообщение #4255] | Fri, 26 January 2024 13:37   |  
			| 
				
				
					|  hvlad Сообщений: 381
 Зарегистрирован: August 2022
 | Senior Member |  |  |  
	| avp писал(а) Fri, 26 January 2024 12:02 hvlad писал(а) Fri, 26 January 2024 11:51Моё мнение - кешировать имеет смысл те запросы, время на подготовку (prepare) которых составляет заметную часть времени выполнения. Такие приложения не могут организовать собственный набор препарированных запросов. В принципе, Тут ещё вопрос какие запросы вообще имеет смысл кэшировать. Нужно ли это делать для простых select/update/insert/delete? Каков будет для такого профит?это можно организовать на уровне используемого фреймворка, который реализует пул коннектов, но я про такие не слышал (может они и есть).
 Так вот - для таких приложений кеш запросов на сервере очень даже может помочь. И реально помогает.
 
 
 
 Например, я знаю случай, когда элементарный INSERT препарировался менее чем 1 мс в монопольном коннекте, а под хорошей нагрузкой (десятки
 параллельных потоков) - уже более 6 мс. И кеширование этого запроса очень заметно повлияло на масштабируемость всего приложения.
 
 |  
	|  |  |  
	|  |  
	|  |  
	|  |  
	| 
		
			| Re: Релиз Firebird 5.0 [сообщение #4291 является ответом на сообщение #4289] | Tue, 30 January 2024 14:12   |  
			| 
				
				
					|  hvlad Сообщений: 381
 Зарегистрирован: August 2022
 | Senior Member |  |  |  
	| avp писал(а) Tue, 30 January 2024 12:57 hvlad писал(а) Fri, 26 January 2024 13:37Я выше писал про приложения с пулом коннектов.Не совсем понятно что за случай такой. Если инсертов много, то программист должен сам использовать препарированные запросы.Моё мнение - кешировать имеет смысл те запросы, время на подготовку (prepare) которых составляет заметную часть времени выполнения.
 Например, я знаю случай, когда элементарный INSERT препарировался менее чем 1 мс в монопольном коннекте, а под хорошей нагрузкой (десятки
 параллельных потоков) - уже более 6 мс. И кеширование этого запроса очень заметно повлияло на масштабируемость всего приложения.
 
 Если инсертов мало, то и кешировать их нет смысла.
 Если сервер очень сильно загружен, то кэширование это паллиатив.
 
 
 |  
	|  |  |  
	|  |  
	|  |  
	|  |  
	| 
		
			| Re: Релиз Firebird 5.0 [сообщение #4559 является ответом на сообщение #4298] | Wed, 28 February 2024 18:19   |  
			| 
				
				
					|  SergeyKNP Сообщений: 92
 Зарегистрирован: 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, по-прежнему рассматриваются как сингелтоны.
 |  
	|  |  |  
	|  |  
	|  |  
	|  | 
 
 
 Текущее время: Fri Oct 31 09:24:55 GMT+3 2025 
 Общее время, затраченное на создание страницы: 0.01955 секунд |