|
|
|
Количество транзакций на DataBase?
|
|||
|---|---|---|---|
|
#18+
Привет всем! Пытался искать, но так и не нашел следующую информацию: сколько можно запускать транзакций на один DataBase используя IBX (BCB6, FireBird 1.5)? Если, скажем, у меня будет 10 клиентов, но каждый "коннектится" к базе используя 6-8 транзакций, то как отработает сервер? Это для него 10 клиентов или 10х6 клиентов? Транзакции разноплановые, одни всегда открыты на чтение, другие кратковременные для записи и т.д. Интересует в общем плане, можно ли так делать или стоит бросить эту идею. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2004, 11:27 |
|
||
|
Количество транзакций на DataBase?
|
|||
|---|---|---|---|
|
#18+
Делай, только старайся транзакции делать покороче... Если есть транзакции на select делай им CommitRetain сразу после select'а. А транзакции на запись открывай перед непосредственным обращением к БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2004, 11:41 |
|
||
|
Количество транзакций на DataBase?
|
|||
|---|---|---|---|
|
#18+
Где то здесь попадался код, открывающий за 4 часа 2 миллиона с копейками транзакций. И ничего. IMHO 10х6 это сущие пустяки, если конечно СУБД стоит на более менее нормальной машинке с достаточным количеством мозгов и метров/гектаров HDD. Однако Kull Damned дело говорит, несмотря на казалось бы немерянное количство ресурса, лучше писАть следуя его советам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2004, 11:51 |
|
||
|
Количество транзакций на DataBase?
|
|||
|---|---|---|---|
|
#18+
>zahodun Это у тебя триды или ... Как так 6-8 одновременно работающих транзакций? В любом случае это не проблема :) ------------------------ С уважением, Denis Uskov ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2004, 12:00 |
|
||
|
Количество транзакций на DataBase?
|
|||
|---|---|---|---|
|
#18+
ЗЫЖ Читать 6-8 одновременно работающих транзакций? как 6-8 одновременно работающих транзакций в одной программе? А то тут некоторые к словам придираются :( ------------------------ С уважением, Denis Uskov ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2004, 12:02 |
|
||
|
Количество транзакций на DataBase?
|
|||
|---|---|---|---|
|
#18+
Машинку хочу поставить P4 2ГГц, 512 ОЗУ, но дело в том, что у меня еще не было реальных проектов с использованием InterBase. Поэтому о необходимой производительности я могу узнать только в конференциях. Работать клиетские приложения будут весьма интесивно. Например, одна из задумок, когда будет некая таблица, в которую одно из приложений постоянно пишет данные, а у других эта таблица всегда открыта с read_commited (только на чтение) и они выгребают оттуда только те записи, которые нужны им. Таблица небольшая, но скорость заливки туда данных немаленькая (может доходить до 100 записей в сек). Т.е. одно приложение постоянно модифицирует таблицу, а десяток других должны постоянно мониторить изменения. И таких таблиц может быть несколько. Причем, другое приложение само "заполняет" следующую таблицу которую "мониторит" первое. Короче, ИБ-сервер используется как некий буфер между приложениями, посредством которого им нужно обмениваться информацией. Кроме того, есть и "классические" таблицы содержащие медленно изменяющиеся данные, но достаточно больших объемов... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2004, 12:13 |
|
||
|
Количество транзакций на DataBase?
|
|||
|---|---|---|---|
|
#18+
:) читать 6-8 транзакций в одной программе. В заголовке ведь первый вопрос: "Количество транзакций на DataBase?" Т.е. хотел бы узнать есть ограничение на количество используемых транзакций при использовании одного DataBase. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2004, 12:17 |
|
||
|
Количество транзакций на DataBase?
|
|||
|---|---|---|---|
|
#18+
Слушай сюда. У TIBDataBase , список тринзакций хранится в поле FTransactions: TList; Вместимость TList составляет MaxListSize = Maxint div 16; . Для Delphi-5 это 134 217 727. Хватит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2004, 12:33 |
|
||
|
Количество транзакций на DataBase?
|
|||
|---|---|---|---|
|
#18+
Короче, ИБ-сервер используется как некий буфер между приложениями, посредством которого им нужно обмениваться информацией. %) А просто на сокетах не лучше такое нарисовать??? Я бы поглядел в сторону бродкаста, скажем по UDP ежели сетка TCP/IP, да что там поглядел, именно так и нарисовано в одной из программок. В твоем же случае придется постоянно дергать базу (по таймеру или вообще в отдельном треде), что IMHO не ГУД. По поводу же количества транзакций посмотри например http://www.ibase.ru/devinfo/lotoftrans.htm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2004, 12:37 |
|
||
|
Количество транзакций на DataBase?
|
|||
|---|---|---|---|
|
#18+
.......... А просто на сокетах не лучше такое нарисовать??? Я бы поглядел в сторону бродкаста, скажем по UDP ежели сетка TCP/IP, да что там поглядел, именно так и нарисовано в одной из программок. В твоем же случае придется постоянно дергать базу (по таймеру или вообще в отдельном треде), что IMHO не ГУД. .............. Спасибо за ссылку. А на сокетах у меня сечас сделано, но меня не очень устраивает. Все дело в структуре программы. Если организовывать обмен на сокетах, то иной раз придется делать так: читаем запись из базы одним клиентом, что-то с ней делаем, а потом передаем её через сокет другому клиенту? А зачем тогда SQL-сервер? Сейчас именно так и происходит. Иногда передаются данные, иногда части данных, иногда ссылки на поля в таблицах, только это слишком запутано. Поддерживать два канала передачи слишком муторно. Вобще, система такая: существует два сервера, один InterBase, а другой IP сервер, который с помощью данных по сокетам координирует обмен, выставляет "свои" данные, полученные по другим каналам. Но уже практически реализовав это дело, я понял что идея не очень хорошая. Теперь я хочу "свой" сервер на равных с клиентами подключать к серверу SQL, чтобы он производил координацию через таблицы в базе, а от сокетов совсем отказаться. Сейчас я анализирую ситуацию, делаю тесты, чтобы понять имеет ли смысл это делать и возможно ли реализовать это практически. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2004, 12:51 |
|
||
|
Количество транзакций на DataBase?
|
|||
|---|---|---|---|
|
#18+
Мимоходящему: размерность intrger я и сам знаю. Просил подсказать знающих людей, сколько _реально_ можно подключать, может быть кто-нибудь уже наступал на какие-то грабли, а ты про "134 217 727" :((( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2004, 12:55 |
|
||
|
Количество транзакций на DataBase?
|
|||
|---|---|---|---|
|
#18+
zahodunПросил подсказать знающих людей, сколько _реально_ можно подключать А " подключать " можно именно столько, сколько я сказал ;) Ибо ты можешь "подключить" мульён транзакций, но не стартовать их. В отношении ограничения на количество активных транзакций на сервере, тебе дали ссылочку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2004, 13:09 |
|
||
|
Количество транзакций на DataBase?
|
|||
|---|---|---|---|
|
#18+
Тогда посмотри в сторону POST_EVENT Просто и со вкусом :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2004, 13:10 |
|
||
|
Количество транзакций на DataBase?
|
|||
|---|---|---|---|
|
#18+
Это я про то, чтоб не юзать сокеты, а стандартные средства СУБД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2004, 13:13 |
|
||
|
Количество транзакций на DataBase?
|
|||
|---|---|---|---|
|
#18+
POST_EVENT штука хорошая, правда жалко, что с параметрами пока не работает... ВОзможно придется использовать именно этот механизм. У меня возник еще один вопрос, например, я делаю следующий запрос select * from test_table транзакция с параметрами: read read_committed rec_version nowait так вот, пока транзакция активна, подразумевается ли что данные в запросе будут автоматически обновляться при изменении их в таблице другим приложением или нет? Или единственный путь быть "в курсе последних изменения" перезапускать транзакцию по event'у который генерируется по update в базе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2004, 13:58 |
|
||
|
Количество транзакций на DataBase?
|
|||
|---|---|---|---|
|
#18+
Попробую рассказать "на пальцах" ;) Стартуем Tr1. select * from... Начинаем тащить данные на клиента: 1-я строка 2-я строка ................ Стартуем Tr2. update ... set ... where ... Коммитим Tr2. Продолжаем тащить данные: 23-я строка 24-я строка Опаньки! 25-я то оказывается уже модифицирована! Усёк? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2004, 14:16 |
|
||
|
Количество транзакций на DataBase?
|
|||
|---|---|---|---|
|
#18+
2Мимопроходящий у него транзакция только для чтения. 2zahodun уровень read committed подразкмевает, что транзакция видит утвержденные записи. Так что чтобы увидеть изменения, достаточно перечитать данные, транзакцию можно не переоткрывать. Кстати, в Firebird 1.5 именно "read read_committed rec_version" транзакции на самом деле физически нет, данные читаются напрямую, поэтому, имхо, она может висеть сколько угодно. И commit retain не нужен совсем. А вот курсоры рекомендую все же закрывать за ненадобностью. Кстати, транзакций на одно соединение может быть сколько угодно, в разумных пределах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2004, 14:26 |
|
||
|
Количество транзакций на DataBase?
|
|||
|---|---|---|---|
|
#18+
Roman Ignatiev2Мимопроходящий у него транзакция только для чтения. И? Roman Ignatiev2zahodun уровень read committed подразкмевает, что транзакция видит утвержденные записи. Так что чтобы увидеть изменения, достаточно перечитать данные, транзакцию можно не переоткрывать. Поддерживаю :) Но! Я показал пример, в котором при "длинном" фетче, для read committed транзакции, в результирующий набор могут попасть данные, модифицированные в другой транзакции, после того, как запрос был отправлен на сервер, но до того, как был получен EOF Roman IgnatievКстати, в Firebird 1.5 именно "read read_committed rec_version" транзакции на самом деле физически нет, данные читаются напрямую, Чушь, полная! Не обижайся :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2004, 14:39 |
|
||
|
Количество транзакций на DataBase?
|
|||
|---|---|---|---|
|
#18+
2Мимопроходящий Не полная :) http://www.ibase.ru/devinfo/ibtrans.htm можно найти строки: "в Firebird, Yaffil и InterBase 6.5 транзакции read_committed read (read only) стартуют сразу в состоянии committed, поэтому не удерживают мусорные записи. Т.е. такая транзакция может длиться часами без ущерба для производительности сервера. Наиболее характерный пример использования - работа со справочниками." Чуток ошибся, это и в FB1.0 есть. А вот насчет "только для чтения" - эт я лоханулся, надо внимательнее посты читать, сорри... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2004, 14:49 |
|
||
|
Количество транзакций на DataBase?
|
|||
|---|---|---|---|
|
#18+
2zahodun: > POST_EVENT штука хорошая, правда жалко, > что с параметрами пока не работает... Если бы в текущем виде заработала с параметрами, то ты первый назвал бы ее очень плохой штукой ;-) Не рассчитан этот механизм на передачу больших пакетов данных. > так вот, пока транзакция активна, подразумевается > ли что данные в запросе будут автоматически обновляться > при изменении их в таблице другим приложением или нет? Что есть "данные в запросе"? Они могут частично обновляться прямо в процессе чтения, как уже отмечено Мимопроходящим. А можешь и просто перезапустить читающий запрос и получить измененные данные. Перезапуск транзакции абсолютно излишен. 2Мимопроходящий: > Опаньки! > 25-я то оказывается уже модифицирована! А это зависит от плана читающего запроса... ;-) 2Roman Ignatiev: > Кстати, в Firebird 1.5 именно "read read_committed rec_version" Начиная с FB 1.0. >> транзакции на самом деле физически нет, данные читаются >> напрямую, Транзакция есть. Но она создается в состоянии pre-committed, т.е. для конкурирующих транзакций она никогда не бывает активной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2004, 14:54 |
|
||
|
Количество транзакций на DataBase?
|
|||
|---|---|---|---|
|
#18+
В общем как было сделано у меня. Правда не под FB, но это не важно. На табличку вешается триггера на AI AU AD из триггеров вызывается ХП, которая отправляет посредством вызываемой dll по UDP бродкастом ID записи и название таблички. В FB можно эту dll написАть как UDF... В клиентах слушается UDP и по получению сообщения перечитывают табличку если это надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2004, 14:57 |
|
||
|
Количество транзакций на DataBase?
|
|||
|---|---|---|---|
|
#18+
Roman Ignatiev 2zahodun уровень read committed подразкмевает, что транзакция видит утвержденные записи. Так что чтобы увидеть изменения, достаточно перечитать данные, транзакцию можно не переоткрывать. Вот оно! Вот что мне нужно было узнать. Эххх. Пока сам поймешь чего тебе надо... :( В голове проясняется, уже тестовое приложение написал. Вроде работает, теперь надо нагрузку эмулировать и посмотреть как это жить будет. Правда, есть еще один непонятный для меня глюк. У меня сейчас два компьютера. На одном EVENT-ы с базы прекрасно ловятся, а другой их в упор не видит. Причем IB-server ставил на оба и раньше на обоих нормально работало. Потом с какого-то момента на одном как ножом отрезало. Я вот думаю, может для евентов другой порт используется, а у меня его какое-нибудь приложение "закрыло"? Какая еще может причина быть? Приложение одно и то же при переносе с одной машины на другую просто не реагирует на Евенты. :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2004, 14:59 |
|
||
|
Количество транзакций на DataBase?
|
|||
|---|---|---|---|
|
#18+
автор2Мимопроходящий Не полная :) Полная, полная ;) авторhttp://www.ibase.ru/devinfo/ibtrans.htm можно найти строки: "в Firebird, Yaffil и InterBase 6.5 транзакции read_committed read (read only) стартуют сразу в состоянии committed, поэтому не удерживают мусорные записи. "Поднимите мне веки". Я не вижу здесь "... транзакции на самом деле физически нет, данные читаются напрямую " Или нужно читать между строк? ;) ЗЫ: тебя наверное ввело в заблуждение слово committed . Не обращай внимания. Просто Дима когда говорил об этом, имел в виду состояние транзакции с точки зрения ядра сервера. Это не значит, что транзакции нет, или что она завершена. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2004, 15:00 |
|
||
|
Количество транзакций на DataBase?
|
|||
|---|---|---|---|
|
#18+
2Мимопроходящий Ээээ... Хм... Плевать, главное, что не нагружает и висеть может :) На самом деле, действительно неподумавши сказал... 2zahodun Вот с эвентами у меня такое было через BDE, а IBX работает вроде нормально, ничего сказать не могу. А эта станция со стороны сервера пингуется? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2004, 15:20 |
|
||
|
Количество транзакций на DataBase?
|
|||
|---|---|---|---|
|
#18+
Станция не только пингуется, с неё читаются все данные. Проблема только в клиенте. Ситуация такая. Есть два компьютера А и Б. Firebird я поставил на обе машины. Базы идиентичные. Теперь делаю вот что: на А запускаю сервер, потом на А запускаю клиент и на Б запускаю клиент - все работает. На А выключаю сервер. На Б запускаю сервер, на Б запускаю клиент, на А запускаю клиент. Так вот клиент на А ловит Евенты с Б, а клиент на Б их не ловит. Пробовал подключать клиента на Б и как localhost и как 127.0.0.1 и с указанием реального IP и с указанием сетевого имени машины. Нифига! Хотя рядом стоит комп и прекрасно эти евенты регистрирует. Впечатление такое, что проблема именно в _получении_ клиентом пакетов. Сервер переставлял несколько раз - эффект нулевой :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2004, 15:33 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=32386351&tid=1579339]: |
0ms |
get settings: |
10ms |
get forum list: |
22ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
68ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
80ms |
get tp. blocked users: |
2ms |
| others: | 246ms |
| total: | 450ms |

| 0 / 0 |
