powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Пул соединений
25 сообщений из 29, страница 1 из 2
Пул соединений
    #39468266
Фотография Щиче
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Известно, что Firebird позволяет иметь несколько транзакций в соединении. Но вопрос, а если эти разные транзакции имеют каждая свою процессорную нить? Транзакции независимы друг от друга.
Применительно к Firebird 3.0 будет ли работать корректно?
...
Рейтинг: 0 / 0
Пул соединений
    #39468268
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Щиче,

Непонятен смысл вопроса. В корректности чего вы сомневаетесь?

Работающим с Firebird использование множества транзакций одновременно - обыденность.
У меня как правило на каждой форме создается по 1-2 своей транзакции, что бы вообще не думать о пересечении разных функций в одной транзакции.
...
Рейтинг: 0 / 0
Пул соединений
    #39468273
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже вопрос возник из-за многопоточности клиента. У меня однопоточное, посему я с этим вопросом не сталкивался.
...
Рейтинг: 0 / 0
Пул соединений
    #39468280
Фотография Щиче
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraksПохоже вопрос возник из-за многопоточности клиента. У меня однопоточное, посему я с этим вопросом не сталкивался.
Да, именно так. Web-приложение. Вопрос встал потому, что пул имеет конечное число соединений. А, допустим, нагрузка возросла и соединений стало недостаточно. Тогда имеет смысл пустить транзакцию в имеющемся соединении рядом с другой.
...
Рейтинг: 0 / 0
Пул соединений
    #39468314
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЩичеВопрос встал потому, что пул имеет конечное число соединений. А, допустим, нагрузка возросла и соединений стало недостаточно. Тогда имеет смысл пустить транзакцию в имеющемся соединении рядом с другой.Не имеет. Один коннект - один поток управления в движке.
...
Рейтинг: 0 / 0
Пул соединений
    #39468315
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЩичеТогда имеет смысл пустить транзакцию в имеющемся соединении рядом с другой.спорный вопрос, я бы так не стал делать. Одно дело когда в один коннект пихается куча транзакций одного потока, все ясно и понятно, а тут мне видится, что встанет оно в "клинч".

"Много" соединений - это сколько в штуках?

Для отдельных нитей (отчетов, например) поднимаю отдельные коннекты, мне так как-то спокойней. К тому же они частенько уходят на вспомогательный сервер.
...
Рейтинг: 0 / 0
Пул соединений
    #39468322
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Щиче, ответ здесь: 17581937
...
Рейтинг: 0 / 0
Пул соединений
    #39468325
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЩичеИзвестно, что Firebird позволяет иметь несколько транзакций в соединении. Но вопрос, а если эти разные транзакции имеют каждая свою процессорную нить? Транзакции независимы друг от друга.
Применительно к Firebird 3.0 будет ли работать корректно?

Путаете транзакции и соединения (подключения).

Одно подключение - один поток.

В каждом подключении произвольное кол-во транзакций. Ноль. Или тысяча.
Транзакции могут не делать ничего. Вообще. Только стартовать, например.
...
Рейтинг: 0 / 0
Пул соединений
    #39468326
Фотография Щиче
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devЩиче, ответ здесь: 17581937
Спасибо
...
Рейтинг: 0 / 0
Пул соединений
    #39468335
Фотография Щиче
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_PisarevskyЩичеТогда имеет смысл пустить транзакцию в имеющемся соединении рядом с другой.спорный вопрос, я бы так не стал делать. Одно дело когда в один коннект пихается куча транзакций одного потока, все ясно и понятно, а тут мне видится, что встанет оно в "клинч".

"Много" соединений - это сколько в штуках?

Для отдельных нитей (отчетов, например) поднимаю отдельные коннекты, мне так как-то спокойней. К тому же они частенько уходят на вспомогательный сервер.

Зависит от конкретного процессора. Имеем одну нить обрабатывающую поток запросов от клиентов. Допустим 100 их одновременно.
Запрос требует обращения к БД. Отстреливаем нить для обращения. Отработает - вернет данные основной нити. Проц четырехъядерный (пример). Следовательно, разводить сто соединений к БД становится абсурдом. Надо 4-5. Но что делать, когда клиенты навалились большой толпой и все соединения заняты? В очередь ставить или пустить параллельно с уже работающими?
Вот этот вопрос меня волнует.
...
Рейтинг: 0 / 0
Пул соединений
    #39468339
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЩичеВот этот вопрос меня волнует.
Придется тестировать. Вариантов море.
Может база в основном будет использоваться для чтения и при этом она вся влазит в оперативку.
...
Рейтинг: 0 / 0
Пул соединений
    #39468340
Фотография Щиче
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. требуется понимание, стоит ли разным клиентам/нитям пользоваться одним соединением, чтобы сервер их сам там поставил в очередь/распараллелил или у себя в случае нехватки соединений поставить запросы в очередь.
...
Рейтинг: 0 / 0
Пул соединений
    #39468347
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Щиче,

количество потоков вовсе не обязано соответствовать количеству ядер процессора. ОСь сама разберётся кому и сколько квантов времени дать. Сделайте на уровне конфигурации параметр начальное количество коннектов в пуле, например 5. И ещё пул можно реализовать несколько иначе, например если у вас в пуле нет коннектов (все заняты) можно создавать новый по требованию.

ЩичеДа, именно так. Web-приложение. Вопрос встал потому, что пул имеет конечное число соединений. А, допустим, нагрузка возросла и соединений стало недостаточно. Тогда имеет смысл пустить транзакцию в имеющемся соединении рядом с другой.

На чём таком вы пишите Web приложение? Вы что пул коннектов самостоятельно реализуете. Насколько мне известно пул что в Java, что в .NET не позволит использовать в другом потоке соединение которое не было возвращено в пул.
...
Рейтинг: 0 / 0
Пул соединений
    #39468356
Фотография Щиче
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Щиче
На чём таком вы пишите Web приложение? Вы что пул коннектов самостоятельно реализуете. Насколько мне известно пул что в Java, что в .NET не позволит использовать в другом потоке соединение которое не было возвращено в пул.

Есть язык программирования D. У него есть только Postgres драйвера, а стандартизованного обращения к СУБД нет совсем. Поскольку мне с ФБ расставаться не хочется - пишу собственную реализацию.
...
Рейтинг: 0 / 0
Пул соединений
    #39468363
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Щиче,

тогда я бы посоветовал посмотреть как пул реализован в драйвере Postgres. Я вообще не уверен что пул на уровне драйвера сделан, а не в более высокоуровневой обёртке.
...
Рейтинг: 0 / 0
Пул соединений
    #39468370
D_nub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЩичеЕсть язык программирования D. У него есть только Postgres драйвера, а стандартизованного обращения к СУБД нет совсем. Поскольку мне с ФБ расставаться не хочется - пишу собственную реализацию.


Оно того стоит? Учить D, писать для него драйвера...
...
Рейтинг: 0 / 0
Пул соединений
    #39468379
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Щиче,

и вообще ограничивать количество коннектов в пуле какой-то малой величиной (<100) не имеет смысла, хотя бы потому что сервер БД может находится где угодно и клиентское приложение ничего не знает о количестве ядер на севере. Пусть там ось и Firebird сами разбираются. Делайте пул как я сказал: если в пуле нет коннектов, то создаётся новый. Обычно у неактивных коннектов есть ещё время жизни, например 60 сек, после которого коннект удалятся из пула. Почитайте как работают пул в Java или .NET.
...
Рейтинг: 0 / 0
Пул соединений
    #39468390
Фотография Щиче
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисЩиче,

и вообще ограничивать количество коннектов в пуле какой-то малой величиной (<100) не имеет смысла, хотя бы потому что сервер БД может находится где угодно и клиентское приложение ничего не знает о количестве ядер на севере. Пусть там ось и Firebird сами разбираются. Делайте пул как я сказал: если в пуле нет коннектов, то создаётся новый. Обычно у неактивных коннектов есть ещё время жизни, например 60 сек, после которого коннект удалятся из пула. Почитайте как работают пул в Java или .NET.

Принято. Действительно надо заняться самообразованием.

D_nub, за всю Одессу не скажу, но мне нравится. Я вырос из Дельфи, потом ушел на Java. В этом языке есть почти все из того, что мне нравится в одном языке и отсутствует в другом. Тему предпочитаю не развивать здесь, чтобы не провоцировать холивар.
...
Рейтинг: 0 / 0
Пул соединений
    #39468429
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЩичеПроц четырехъядерный (пример). Следовательно, разводить сто соединений к БД становится абсурдом. Надо 4-5.Почему абсурдно? у нас на пару шестиядерников пара сотен коннектов. Коннект ведь необязательно напрягает проц-память-диск-сеть по полной. Кто-то передает данные, кто-то ждет пока клиент соизволит сфетчить хвост данных, кто-то ждет дискового ИО, кто-то сетевого ИО, что-то читает из кэша, кто-то сортирует через темп и т.п.

Как по мне, так абсурд делать кол-во коннектов не более чем процовых ядер, обычно раньше всех исчерпываются ресурсы дискового ИО, потом размер ОЗу и только потом процы. Даже если каждый коннект активно что-то делает и то можно множить кол-во ядер на 10, а если они малоактивные, то и на 100.
...
Рейтинг: 0 / 0
Пул соединений
    #39468449
Фотография Щиче
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_PisarevskyПочему абсурдно? у нас на пару шестиядерников пара сотен коннектов. Коннект ведь необязательно напрягает проц-память-диск-сеть по полной. Кто-то передает данные, кто-то ждет пока клиент соизволит сфетчить хвост данных, кто-то ждет дискового ИО, кто-то сетевого ИО, что-то читает из кэша, кто-то сортирует через темп и т.п.

Как по мне, так абсурд делать кол-во коннектов не более чем процовых ядер, обычно раньше всех исчерпываются ресурсы дискового ИО, потом размер ОЗу и только потом процы. Даже если каждый коннект активно что-то делает и то можно множить кол-во ядер на 10, а если они малоактивные, то и на 100.

Давайте представим, что такое коннект. Это всегда выделение памяти. Раз. На классике отстреливается полноценный процесс, на суперсервере нить, два.
Далее, у нас пошел пик подхода клиентов. 100 коннектов разом. И все активны! В самом дохлом месте, на обращении к дисковому ИО. ОЗУ тоже может кончится, значит пойдет своп. Т.е. все сто повиснут. Ладно, отработали. Теперь у нас сто соединений неактивных. А обращения в этот момент упали до 10-15. Но они все равно будут медленными, потому что у нас вся ОЗУ сервера СУБД загажена мусором, который остался от предыдущего ажиотажа.
В документации к любой СУБД написано, что лишние соединения открывать нежелательно! Поэтому пулы имеют верхний предел. Обычно 16-32 по умолчанию.
...
Рейтинг: 0 / 0
Пул соединений
    #39468455
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЩичеА обращения в этот момент упали до 10-15. Но они все равно будут медленными, потому что у нас вся ОЗУ сервера СУБД загажена мусором, который остался от предыдущего ажиотажа.Не понял логики, если коннект уже вернулся в пул, значит там уже ничего не должно быть лишнего, никакого мусора, или тот кто управляет таким пулом полный бездарь. Пустой же коннект не такое дорогое удовольствие.

ЩичеОЗУ тоже может кончится, значит пойдет своп.тут можно вполне прикинуть "столбиком", сколько коннектов не свалят сервер в своп, зная на своем опыте сколько обычно съедает один.
...
Рейтинг: 0 / 0
Пул соединений
    #39468460
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Щиче,

1. на 3.0 классик работает медленнее суперсервера. Так что суперсервер тут в самый раз.
2. суперсервер сам держит пул тредов для коннектов. Так что число коннектов не обязательно равно числу тредов.
3. в клиент-серверных приложениях никаких проблем с 500 коннектов при 24 ядрах процессора нет. Даже на классике, когда с утра сотни пользователей ломятся к базе.

Собственно, основной ответ уже дан - в одном коннекте разные транзакции распараллеливаться не будут. Так что пул с таким псевдо-распараллеливанием практического смысла не имеет.
...
Рейтинг: 0 / 0
Пул соединений
    #39468466
Фотография Щиче
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_PisarevskyНе понял логики, если коннект уже вернулся в пул, значит там уже ничего не должно быть лишнего, никакого мусора, или тот кто управляет таким пулом полный бездарь. Пустой же коннект не такое дорогое удовольствие.
Коннект не зависит от того, вернулся он в пул или нет. Он либо работает, либо нет. 100 коннектов работают одновременно == мы накрылись.

Ivan_Pisarevskyтут можно вполне прикинуть "столбиком", сколько коннектов не свалят сервер в своп, зная на своем опыте сколько обычно съедает один.

А меня как раз интересует ситуация, когда я столбиком посчитал n коннектов, а у меня в определенный момент времени 2*n, а то и n^2 запросов. При том, что в следующий заход может быть n/10, n и вообще 1. В другой снова n+m. Такое в Web вполне может быть. Их однозначно надо ставить в очередь при превышении n . Вопрос как это сделать.
Java пул ограничен сверху по числу соединений именно по этой логике.
...
Рейтинг: 0 / 0
Пул соединений
    #39468472
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЩичеВ документации к любой СУБД написано, что лишние соединения открывать нежелательно!

Не видео такого ни в документации к MS SQL, ни к Оракулу. Похоже, "любые СУБД" у вас
ограничиваются каким-нибудь хилым MySQL.

ЩичеПоэтому пулы имеют верхний предел. Обычно 16-32 по умолчанию.
Безумно низкое число. Очевидно, держится где-нибудь с середины прошлого века, когда в
сетевом модуле использовался select() и тупой перебор всех хэндлов. Нынче вменяемым
значением будет пара сотен.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Пул соединений
    #39468476
Фотография Щиче
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov, как раз Oracle :)
...
Рейтинг: 0 / 0
25 сообщений из 29, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Пул соединений
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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