Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3 4 5   вперед  Ctrl      все
 кто блокирует исходник хранимки?  [new]
GrigoriyFomin
Member

Откуда:
Сообщений: 65
Всем спасибо за предыдущие ответы на мои вопрошалки - очень помогли, и главное - оперативно, в течение пары часов.
Радует активность файрбердовского русскоязычного коммьюнити.
Пользуясь таким отношением есть еще одна вопрошалка. Скорее академическая, нежели практическая.
Пишу сервис на дельфе, сервис при старте открывает коннект к моей базе на файрберде. и держит его открытым. Периодически, сервис вызывает селект из вьюхи. уже и создал 2 транзацкции - читающую и пишущую, уже и вручную стартую читающую транзакцию и по окончанию отработки запроса делаю ей коммит. Все равно, при попытке изменить исходник вьюхи, пишет, что вьюха в использовании (in use) и не дает ее перекомпилить. Я так понимаю, что моя читающая транзакция после коммита не отпускает вьюху? Что я делаю не так? Помогает только рестарт сервиса (соотв реконнект).
Жить мне это не мешает, но, боюсь, я неправильно работаю с транзакцией ,а это уже потенциальные грабли.
4 окт 19, 23:27    [21987182]     Ответить | Цитировать Сообщить модератору
 Re: кто блокирует исходник хранимки?  [new]
GrigoriyFomin
Member

Откуда:
Сообщений: 65
хранимка или вьюха в данном вопросе непринципиально, проблема и там, и там возникает
4 окт 19, 23:28    [21987184]     Ответить | Цитировать Сообщить модератору
 Re: кто блокирует исходник хранимки?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48674

Во-первых, изменять что вьюху, что хранимку - плохая идея сама по себе.
Во-вторых, делать это надо в wait транзакции.

Posted via ActualForum NNTP Server 1.5

5 окт 19, 00:28    [21987198]     Ответить | Цитировать Сообщить модератору
 Re: кто блокирует исходник хранимки?  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 28333
GrigoriyFomin
сервис при старте открывает коннект к моей базе на файрберде. и держит его открытым.

зачем?
нормальный робот должен по таймеру - коннект, выполнил работу, дисконнект. И ждать дальше.
В чем смысл роботу висеть не просто с открытым коннектом, но еще и с активной транзакцией, пусть и ридонли?
5 окт 19, 13:29    [21987315]     Ответить | Цитировать Сообщить модератору
 Re: кто блокирует исходник хранимки?  [new]
GrigoriyFomin
Member

Откуда:
Сообщений: 65
kdv,

ну сервис отрабатывает запросы из вне, которые могут идти с разной периодичностью . Разве есть смысл каждый раз передергивать коннект? А транзакцию читающую завершаю после отработки запроса от клиента.
5 окт 19, 22:10    [21987463]     Ответить | Цитировать Сообщить модератору
 Re: кто блокирует исходник хранимки?  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 28333
GrigoriyFomin
Разве есть смысл каждый раз передергивать коннект? А транзакцию читающую завершаю после отработки запроса от клиента.

есть смысл НЕ держать постоянно коннект и активную транзакцию.

Блин, уже сколько народу на эти грабли наступает, и всё равно проблема с прикладными решениями.
Сначала пишут роботов, которые постоянно держат коннект и транзакцию, потом пишут скрипты, которые эти коннекты или самих роботов убивают каждые пару часов. Ну вот зачем это надо? Карму себе портить?
5 окт 19, 22:55    [21987496]     Ответить | Цитировать Сообщить модератору
 Re: кто блокирует исходник хранимки?  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 28333
GrigoriyFomin,

ну вот например. Я когда писал монитор транзакций IBTM, который каждую минуту стартовал коннект, транзакцию, и тут же это завершал, был обеспокоен - вдруг дофига транзакций стартует, и всё такое.
Оказалось, что
- в сутках 1440 минут. Старт и коммит 1440 транзакций в сутки - это ни о чем.
- старт нового коннекта каждую минуту, даже при 200-400 активных коннектах, это тоже ни о чем.

В результате, получилось, что такая тулза абсолютно никак на производительность даже нагруженного сервера не влияет.
Зато не держит ни открытых коннектов, ни активных транзакций.
5 окт 19, 22:58    [21987497]     Ответить | Цитировать Сообщить модератору
 Re: кто блокирует исходник хранимки?  [new]
Старый плюшевый мишка
Member

Откуда:
Сообщений: 654
kdv
Зато не держит ни открытых коннектов, ни активных транзакций.


Насчёт метаданных тут что-то тоньшее. Я когда-то разобрался, но уже забыл. Отправная точка была - для Эксперта альтеремая процедура in use, а для isql - никаких проблем.
5 окт 19, 23:04    [21987498]     Ответить | Цитировать Сообщить модератору
 Re: кто блокирует исходник хранимки?  [new]
GrigoriyFomin
Member

Откуда:
Сообщений: 65
kdv
GrigoriyFomin
Разве есть смысл каждый раз передергивать коннект? А транзакцию читающую завершаю после отработки запроса от клиента.

есть смысл НЕ держать постоянно коннект и активную транзакцию.

Я ж писал, что транзакцию активную сразу после чтения коммитчу. То есть просто висит коннект из-за того, что я алертером ловлю нужные мне изменения в базе. Так бы наверное и не держал коннект.
Дабы не создавать новый топик - на форме 2 транзакции - пишущая и читающая, подключены к коннекту соответствующе. Стартую читающую, выполняю селект через FDQuery - все хорошо. После чтения, не трогая читающую, стартую пишущую транзакцию и через connection.ExecSQL выполняю UPDATE команду. И вуаля - ругань, [FireDAC][Phys][FB]attempted update during read-only transaction. То есть апдейт происходит в читающей транзакции, а в коннекте updateTransaction прописана верная. Как обойти сие недоразумение? как указать ExecSQL коннекта, что его надо выполнять через пишущую транзакцию?
6 окт 19, 00:19    [21987505]     Ответить | Цитировать Сообщить модератору
 Re: кто блокирует исходник хранимки?  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 28333
GrigoriyFomin,

кто такой connection.execsql? у него, наверное, есть своя defaulttransaction.
Вот не надо этой лабуды, когда update выполняется в контексте фиг знает какой транзакции.
В Дельфи, кстати, есть отладчик, в котором можно всё найти.
GrigoriyFomin
на форме 2 транзакции - пишущая и читающая, подключены к коннекту соответствующе.

да пофиг, куда они подключены. Понятно что транзакции могут быть только в контексте конкретного коннекта.
А для выполнения оператора надо указывать конкретную транзакцию. Например, если к коннекту подключены 2 транзакции, то откуда оно узнает, в какой транзакции надо выполнять connection.execsql?
Ну что-то прям совсем элементарные вопросы.
6 окт 19, 01:54    [21987519]     Ответить | Цитировать Сообщить модератору
 Re: кто блокирует исходник хранимки?  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 28333
GrigoriyFomin
Я ж писал, что транзакцию активную сразу после чтения коммитчу.

ну ок. а тогда что этот робот высиживает в коннекте без транзакций? Это экономия чего, собственно? Зачем вообще нужен активный коннект без выполнения в нём чего-либо?
Если убрать "активный коннект", робот что, будет долбиться к серверу 60 раз в минуту, например?
У вас же калькулятор есть, или Excel, можно примерно посчитать, сколько раз в сутки/час/минуту робот будет лезть на сервер с новым коннектом и транзакцией.

Я бы понимал, если вы собираетесь долбить сервер 20 раз в минуту, например. Тогда да, открывать-закрывать коннект в этом случае как-то нехорошо, это похоже на ddos-атаку. Но вы ж так и не сказали, насколько часто вам надо некие действия на сервере выполнять.
6 окт 19, 01:59    [21987520]     Ответить | Цитировать Сообщить модератору
 Re: кто блокирует исходник хранимки?  [new]
GrigoriyFomin
Member

Откуда:
Сообщений: 65
kdv
GrigoriyFomin
Я ж писал, что транзакцию активную сразу после чтения коммитчу.

ну ок. а тогда что этот робот высиживает в коннекте без транзакций? Это экономия чего, собственно? Зачем вообще нужен активный коннект без выполнения в нём чего-либо?

Активный коннект нужен, чтоб принимать сообщения от файрберда - в триггерах есть post_event, которые всегда готов обработать мой сервис.

connection.ExecSQL - это способ простого выполнения SQL-команды без создания лишних компонентов посредством самого коннекшена. Вот как конкретно для ExecSQL указать какую транзакцию задействовать?
6 окт 19, 11:03    [21987550]     Ответить | Цитировать Сообщить модератору
 Re: кто блокирует исходник хранимки?  [new]
Vlad F
Member

Откуда:
Сообщений: 1008
GrigoriyFomin,

Экономика должна быть экономной. (с) Л.И. Брежнев.
Никак,. Делай отдельный TQuery, и у для него уже указывай конкретную транзакцию.
6 окт 19, 11:34    [21987555]     Ответить | Цитировать Сообщить модератору
 Re: кто блокирует исходник хранимки?  [new]
Ivan_Pisarevsky
Member

Откуда: НН
Сообщений: 8409
Старый плюшевый мишка
Насчёт метаданных тут что-то тоньшее. Я когда-то разобрался, но уже забыл. Отправная точка была - для Эксперта альтеремая процедура in use, а для isql - никаких проблем.
dimitr тут ликбез проводил, с обстоятельным объяснением "тонких материй", навскидку пост не попался, но если совсем кратко, то волшебное слово "wait".

GrigoriyFomin
Активный коннект нужен, чтоб принимать сообщения от файрберда - в триггерах есть post_event, которые всегда готов обработать мой сервис.
Далеко не факт, что серверу легче разослать эвенты, чем регулярно отвечать на вопросы "нет ли чего новенького?". Это как дилемма: работа периферийного устройства по прерываниям, либо его регулярный опрос процом. Под нагрузкой оказывается дешевле опрашивать.
6 окт 19, 11:35    [21987556]     Ответить | Цитировать Сообщить модератору
 Re: кто блокирует исходник хранимки?  [new]
GrigoriyFomin
Member

Откуда:
Сообщений: 65
Vlad F
Никак,. Делай отдельный TQuery, и у для него уже указывай конкретную транзакцию.

В итоге так и сделал, не нашел где там указать транзакцию
6 окт 19, 12:48    [21987585]     Ответить | Цитировать Сообщить модератору
 Re: кто блокирует исходник хранимки?  [new]
Vlad F
Member

Откуда:
Сообщений: 1008
GrigoriyFomin,

Вот с этого и надо было начинать, - компоненты доступа какие?
6 окт 19, 13:13    [21987601]     Ответить | Цитировать Сообщить модератору
 Re: кто блокирует исходник хранимки?  [new]
GrigoriyFomin
Member

Откуда:
Сообщений: 65
Vlad F
компоненты доступа какие?

FireDAC
6 окт 19, 13:21    [21987607]     Ответить | Цитировать Сообщить модератору
 Re: кто блокирует исходник хранимки?  [new]
Vlad F
Member

Откуда:
Сообщений: 1008
GrigoriyFomin
Vlad F
Никак,. Делай отдельный TQuery, и у для него уже указывай конкретную транзакцию.

В итоге так и сделал, не нашел где там указать транзакцию

Значит, плохо искал.
http://docwiki.embarcadero.com/Libraries/Rio/en/FireDAC.Comp.Client.TFDRdbmsDataSet.Transaction
6 окт 19, 15:16    [21987638]     Ответить | Цитировать Сообщить модератору
 Re: кто блокирует исходник хранимки?  [new]
Дегтярев Евгений
Member

Откуда: Барнаул
Сообщений: 1711
kdv
зачем?
нормальный робот должен по таймеру - коннект, выполнил работу, дисконнект. И ждать дальше.

к чему такая категоричность?
6 окт 19, 16:14    [21987648]     Ответить | Цитировать Сообщить модератору
 Re: кто блокирует исходник хранимки?  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 28333
GrigoriyFomin
в триггерах есть post_event, которые всегда готов обработать мой сервис.

эвенты, конечно, это волшебно и прикольно, но лучше без них, особенно роботу.
Дегтярев Евгений
к чему такая категоричность?

к тому, что я этих ваших роботов с длинными коннектами и длинными транзакциями наблюдаю в промышленных системах регулярно.
И с ними (и с длинными транзакциями и длинными коннектами) впоследствии идет борьба.

К примеру, что делать с роботом, если нужно отрубить все коннекты? Пользователям еще как-то можно это сказать, а роботу - обычно нет. Приходится робота убивать. А зачем тогда писать такой софт, который при maintenance надо терминировать?
6 окт 19, 17:14    [21987667]     Ответить | Цитировать Сообщить модератору
 Re: кто блокирует исходник хранимки?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48674

kdv
эвенты, конечно, это волшебно и прикольно, но лучше без них, особенно роботу.

Вот роботу-то они как раз годятся лучше, чем какому-нибудь приложению, которое начнёт
автоматически обновлять датасеты.

И таки нет, проблемы с длинными коннектами кончились ещё в районе полуторки-двойки. Если
ты знаешь какую-то проблему, то лучше назови её имя.

Posted via ActualForum NNTP Server 1.5

6 окт 19, 17:32    [21987671]     Ответить | Цитировать Сообщить модератору
 Re: кто блокирует исходник хранимки?  [new]
Дегтярев Евгений
Member

Откуда: Барнаул
Сообщений: 1711
kdv
к тому, что я этих ваших роботов с длинными коннектами и длинными транзакциями наблюдаю в промышленных системах регулярно.
И с ними (и с длинными транзакциями и длинными коннектами) впоследствии идет борьба.

из этого не следует что одного коннекта в минуту достаточно всем
6 окт 19, 19:03    [21987698]     Ответить | Цитировать Сообщить модератору
 Re: кто блокирует исходник хранимки?  [new]
GrigoriyFomin
Member

Откуда:
Сообщений: 65
Vlad F
GrigoriyFomin
пропущено...

В итоге так и сделал, не нашел где там указать транзакцию

Значит, плохо искал.
http://docwiki.embarcadero.com/Libraries/Rio/en/FireDAC.Comp.Client.TFDRdbmsDataSet.Transaction

Прочитал, ничего нового не нашел.
я ж писал - у меня 2 транзакции - читающая и пишущая, заданы в коннекте соотв как Transaction и UpdateTransaction.
Вопрос был - как сказать Connection исполнить код ExecSQL в пишущей транзакции? Я полагал, что ExecSQL умеет сам поределить тип команды и в этой зависимости выполняться в читающей либо пишущей транзакции. на лету менять в коннекшене транзакции не комильфо - часть запросов уже выполняются в читающей транзакции.
Хотя, учитывая, что я пришел к использованию коротких как пишущей, так и читающей транзакций, как вариант было держать только 1 пишущую и через нее делать все манипуляции.
А у кого-то есть опыт нагрузки на сервер при коннекте/дисконнекте? Стоит ли держать коннект в простое закрытым?
6 окт 19, 19:08    [21987700]     Ответить | Цитировать Сообщить модератору
 Re: кто блокирует исходник хранимки?  [new]
Vlad F
Member

Откуда:
Сообщений: 1008
GrigoriyFomin,

О, боги. Да заведи, наконец, уже два TFDQuery. Всего ДВА.
6 окт 19, 19:25    [21987709]     Ответить | Цитировать Сообщить модератору
 Re: кто блокирует исходник хранимки?  [new]
Vlad F
Member

Откуда:
Сообщений: 1008
Каждый со своей специфической транзакцией.
6 окт 19, 19:26    [21987710]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4 5   вперед  Ctrl      все
Все форумы / Firebird, InterBase Ответить