|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
При высокочастотной ставки записей в базе имеет ли смысл кроме коннектов держать еще открытые транзакции и может препаренные запросы в каждом флаконе? Инсерты однородные, редко может понадобится еще дополнителные ставки. Коммит(Рет) нужно после каждой. Если при работе сервиса оборвалось связь с FB, можно как-то ловить это в реале, кроме фэйла уже при вызове isc_start_transaction итп? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2015, 20:31 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
Dorin MarcociПри высокочастотной ставки записей в базе имеет ли смысл кроме коннектов держать еще открытые транзакции и может препаренные запросы в каждом флаконе? Инсерты однородные, редко может понадобится еще дополнителные ставки. Коммит(Рет) нужно после каждой. Dorin Marcoci, всё зависит от характера хранящихся данных. Телеметрия? Dorin MarcociЕсли при работе сервиса оборвалось связь с FB, можно как-то ловить это в реале, кроме фэйла уже при вызове isc_start_transaction итп? Для этого вам понадобиться нечто большее, чем просто "клиент" и "сервер". Возможно, придется написать некую промежуточную службу, работающую на том же сервере, что и Firebird, через которую будут осуществляться вставки данных и контролироваться транзакции. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2015, 20:41 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
Dorin Marcoci> держать еще открытые транзакции и может Dorin Marcoci> препаренные запросы в каждом флаконе? Dorin Marcoci> Коммит(Рет) нужно после каждой. Коммит и открытые транзакции плохо совместимы. Хотя с retaining-ом можно, но этот вопрос уже столько раз обсуждался, просто почитай. А вот отпрепаренные запросы легко переживают коммит, их повторно препарить не нужно, только параметры меняй и повторно Exec-Commit. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2015, 21:09 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
Dorin MarcociПри высокочастотной ставки записей в базе имеет ли смысл кроме коннектов держать еще открытые транзакции и может препаренные запросы в каждом флаконе? Инсерты однородные, редко может понадобится еще дополнителные ставки. Коммит(Рет) нужно после каждой. Если при работе сервиса оборвалось связь с FB, можно как-то ловить это в реале, кроме фэйла уже при вызове isc_start_transaction итп? 1. Подготовленные запросы - имхо, держать хорошо. Но вы не сказали, сколько у вас клиентов параллельно пишут в базу. 2. Состояние сервера можно контролировать периодическим "пинг-понгом" простых запросов в фоновой нити. 3. Есть библиотечка ZeroMQ , которая позволяет несложным образом реализовать буферизацию сообщений как на приеме, так и на передаче (и задавать объем буферов), реализовано автоматическое восстановление соединения при обрыве и т.п. Контроль за состоянием коннекта выполняется методом посылки - отправки служебных сообщений (когда нет других сообщений) в отдельной нити. Организуйте работу через такую прослойку - будет проще обеспечить работу FB под непрерывной нагрузкой, особенно если входной поток данных неравномерный, и источник данных не может долго ждать, пока сервер завершит операцию вставки. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2015, 21:24 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
Dorin MarcociКоммит(Рет) нужно после каждой. Дисковую систему расширяй. Она сляжет первой. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2015, 22:20 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
Dorin MarcociКоммит(Рет) нужно после каждой. commit retaining не нужен никогда. пул - сколько угодно. пул транзакций - имеет смысл только для read read_committed rec_version. Остальные транзакции д.б. короткими. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2015, 22:37 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
kdvcommit retaining не нужен никогда. Вообще-то лично у меня ему применение нашлось. Но это скорее экзотика. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2015, 22:42 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, опять же, я следую принципу - если человек не понимает, то лучше ему сказать, что пользоваться фичей Х нельзя, совсем. Если ему интересно, почему "нельзя", он разберется сам (или найдет статьи на ibase.ru о том, почему retaining - не очень хорошо). Если же ему похер, то он и спрашивать не будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2015, 22:47 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
kdvон разберется сам Если бы он был в состоянии разобраться сам, то не валил бы в одну мутную кучу пул коннектов, транзакции и препарированные запросы. Ибо это всё же перпендикулярные вещи. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2015, 22:56 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
kdv> опять же, я следую принципу Вот и признался. А я тебе давно говорил, что этот принцип неправильный и ущербный. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2015, 23:50 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
Спасибо всем кто откликнулись и изложили мысли. Оставил вопрос вчера к концу рабочего дня и только сегодня взглянул. Данные приходят по сетке (tcp/udp) с каждого девйса где-то раз в 30сек, практически равномерно/рандомно распределенные. Принимаю пакеты серверами Indy (TIdTcpServer, TIdUdpServer). Выделяется поток где обрабатывается каждый входящий пакет. Хотелсь бы обслуживание хотяб 1000 клиентов на одном ноде (это примерно 33 ставок в секунду). Щас работает, но нагрузка маленькая. Есть пул коннектов. При обработке стартует транзакция, запрос ставки и коммит. Вот и пришла и идея повышения марсштбируемости путем добавения в пула еще и по долгой ридкоммитед транзакции и препаренного запроса для каждого коннекта. И после обработки пакета делать коммит ритэйн. Плохо ли? Можно в принципе раз там на 1000 ритэйн коммитов делать и коммит и заново стартовать транзакцию и препарить запрос. Про ZeroMQ, спасибо учту, но пока думаю если в случае перенакопления можно необработанные пакеты в локальном стэке держать пока все потоки-обработчики заняты. Но лимит на количество потоках пока нету, создаются сколько надо. Или держать всегда готовые потоки-обработчики как workerы в apache? Насчет обрыва связи с ФБ сервером, скорее в продакшине будет локально, но хотелось обработать и потеря коннекта, когда было отключения сокета, попытатся восстановить связь. Есть в fbclient-е такой колбэк? Щас могу ловить при старте транзакции/запрса по коду ошибки статуса. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2015, 18:18 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
Dorin MarcociВот и пришла и идея повышения марсштбируемости путем добавения в пула еще и по долгой ридкоммитед транзакции и препаренного запроса для каждого коннекта. И после обработки пакета делать коммит ритэйн. Плохо ли? Можно в принципе раз там на 1000 ритэйн коммитов делать и коммит и заново стартовать транзакцию и препарить запрос. Идея бредовая. Во-первых, потому что препарированные запросы не привязаны к транзакции и коммит их не уничтожает. Во-вторых, потому что старт транзакции (в отличии от установки коннекта) - операция лёгкая. Dorin MarcociЩас могу ловить при старте транзакции/запрса по коду ошибки статуса. А следует - при каждом вызове API. Ибо соединение может разорваться когда угодно. PS: И сдаётся мне, что СУБД для задачи таки выбрана неверно. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2015, 18:29 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
препарированные запросы не привязаны к транзакции и коммит их не уничтожает хм... вот спасибо. а я думал что они дестроится... СУБД для задачи таки выбрана неверно на чем знаем, на том и пишем :) Дмитрий вроди делал тесты: http://www.ibase.ru/devinfo/instest.htm Результаты неплохие. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2015, 18:57 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
Dorin Marcoci И после обработки пакета делать коммит ритэйн. зачем тебе вообще нужен commitRetaining??? и, как уже сказал DS, препарированный запрос может выполняться в любой транзакции, prepare к транзакции не привязан. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2015, 18:58 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
kdvDorin Marcoci И после обработки пакета делать коммит ритэйн. зачем тебе вообще нужен commitRetaining??? ... Да он просто глумится... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2015, 19:05 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
Dorin MarcociДмитрий вроди делал тесты: http://www.ibase.ru/devinfo/instest.htm Результаты неплохие. Да с вашими жалкими 33 записями в секунду вы в принципе близко к лимиту быстродействия не подойдёте. Сомнение вызывает что вы вообще собираетесь потом делать с напиханными в БД сырыми данными. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2015, 19:09 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
Dorin MarcociДмитрий вроди делал тесты: http://www.ibase.ru/devinfo/instest.htm Результаты неплохие. этому тесту уже 17 лет. Ковязин для семинара в июне 2015 делал тест вставки, там в таблицу без индексов 1млн записей вставляется 2.6 секунд, в таблицу с числовым ПК - 7.6 секунд, в таблицу с пк varchar 35 секунд. Таблоид тоже недавно делал тест параллельной вставки для ФБ 3.0, там 1млн записей в таблицу с числовым ПК вставляется 24 секунды. То есть, в худшем случае это 20 тысяч записей в секунду. Без всяких пулов. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2015, 19:18 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
kdvТо есть, в худшем случае это 20 тысяч записей в секунду. Без всяких пулов. Вы просто не добрались до худшего варианта с отдельной транзакцией на каждую запись. Я же говорил, что дисковая подсистема ляжет первой... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2015, 19:22 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
Dorin MarcociНо лимит на количество потоках пока нету, создаются сколько надо. еще добавлю. что по тестам того же Таблоида, никакого смысла в распараллеливании вставки в одну таблицу по разным коннектам нет, совершенно. Более того, производительность вставки, идентичную ОДНОМУ коннекту, можно получить в нескольких коннектах только на суперсервере. На классике и суперклассике при вставке будет борьба за блокирование страницы, и производительность будет по любому хуже (причем чем больше страница, тем хуже). ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2015, 19:26 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovВы просто не добрались до худшего варианта с отдельной транзакцией на каждую запись. такой задачи не было :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2015, 19:27 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
kdvзачем тебе вообще нужен commitRetaining??? Дмитрий, я думал что можно выиграть в производительности если делать только CommitRetaining вместо Commit;Start; при обработке пакета. Буду переделывать на пул коннекшинов + препаренные запросы + кототкиу транзакции: старт/ставка/коммит. Так лучше? kdvеще добавлю. что по тестам того же Таблоида, никакого смысла в распараллеливании вставки в одну таблицу по разным коннектам нет, совершенно. Тогда лучше наверное в общий стэк копить пакеты, и раз в секунду инсертить накопленные... запутался уже... ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2015, 12:22 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
Dorin Marcociя думал что можно выиграть в производительности если делать только CommitRetaining вместо Commit; интересно, откуда появилась мысль про "производительность" commitretaining? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2015, 12:24 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
Hello, Kdv! You wrote on 21 декабря 2015 г. 12:29:38: Kdv> интересно, откуда появилась мысль про "производительность" commitretaining? имхо, автор смотрит через кривую призму дельфийских компонентов... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2015, 12:30 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
kdvDorin MarcociНо лимит на количество потоках пока нету, создаются сколько надо. еще добавлю. что по тестам того же Таблоида, никакого смысла в распараллеливании вставки в одну таблицу по разным коннектам нет, совершенно. Более того, производительность вставки, идентичную ОДНОМУ коннекту, можно получить в нескольких коннектах только на суперсервере. На классике и суперклассике при вставке будет борьба за блокирование страницы, и производительность будет по любому хуже (причем чем больше страница, тем хуже). Все вышесказанное имеет смысл только для локального подключения. Если сервер БД - одно, а сервер телеметрии - другое, то смысл распараллеливать есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2015, 12:41 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
kdv"производительность" commitretaining Так будет только фиксация изменений без старта другой транзакции (что я думал непростая операция). Помню Еманов говорил к релизу 2.0 или 2.5 что были сделаны оптимизации по CommitRetaining и что можно держать сколько угодно транзакцию открытой. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2015, 12:42 |
|
|
start [/forum/topic.php?fid=40&msg=39132603&tid=1562439]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
39ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
others: | 252ms |
total: | 392ms |
0 / 0 |