|
кто блокирует исходник хранимки?
|
|||
---|---|---|---|
#18+
Всем спасибо за предыдущие ответы на мои вопрошалки - очень помогли, и главное - оперативно, в течение пары часов. Радует активность файрбердовского русскоязычного коммьюнити. Пользуясь таким отношением есть еще одна вопрошалка. Скорее академическая, нежели практическая. Пишу сервис на дельфе, сервис при старте открывает коннект к моей базе на файрберде. и держит его открытым. Периодически, сервис вызывает селект из вьюхи. уже и создал 2 транзацкции - читающую и пишущую, уже и вручную стартую читающую транзакцию и по окончанию отработки запроса делаю ей коммит. Все равно, при попытке изменить исходник вьюхи, пишет, что вьюха в использовании (in use) и не дает ее перекомпилить. Я так понимаю, что моя читающая транзакция после коммита не отпускает вьюху? Что я делаю не так? Помогает только рестарт сервиса (соотв реконнект). Жить мне это не мешает, но, боюсь, я неправильно работаю с транзакцией ,а это уже потенциальные грабли. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2019, 23:27 |
|
кто блокирует исходник хранимки?
|
|||
---|---|---|---|
#18+
хранимка или вьюха в данном вопросе непринципиально, проблема и там, и там возникает ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2019, 23:28 |
|
кто блокирует исходник хранимки?
|
|||
---|---|---|---|
#18+
Во-первых, изменять что вьюху, что хранимку - плохая идея сама по себе. Во-вторых, делать это надо в wait транзакции. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2019, 00:28 |
|
кто блокирует исходник хранимки?
|
|||
---|---|---|---|
#18+
GrigoriyFominсервис при старте открывает коннект к моей базе на файрберде. и держит его открытым. зачем? нормальный робот должен по таймеру - коннект, выполнил работу, дисконнект. И ждать дальше. В чем смысл роботу висеть не просто с открытым коннектом, но еще и с активной транзакцией, пусть и ридонли? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2019, 13:29 |
|
кто блокирует исходник хранимки?
|
|||
---|---|---|---|
#18+
kdv, ну сервис отрабатывает запросы из вне, которые могут идти с разной периодичностью . Разве есть смысл каждый раз передергивать коннект? А транзакцию читающую завершаю после отработки запроса от клиента. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2019, 22:10 |
|
кто блокирует исходник хранимки?
|
|||
---|---|---|---|
#18+
GrigoriyFominРазве есть смысл каждый раз передергивать коннект? А транзакцию читающую завершаю после отработки запроса от клиента. есть смысл НЕ держать постоянно коннект и активную транзакцию. Блин, уже сколько народу на эти грабли наступает, и всё равно проблема с прикладными решениями. Сначала пишут роботов, которые постоянно держат коннект и транзакцию, потом пишут скрипты, которые эти коннекты или самих роботов убивают каждые пару часов. Ну вот зачем это надо? Карму себе портить? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2019, 22:55 |
|
кто блокирует исходник хранимки?
|
|||
---|---|---|---|
#18+
GrigoriyFomin, ну вот например. Я когда писал монитор транзакций IBTM, который каждую минуту стартовал коннект, транзакцию, и тут же это завершал, был обеспокоен - вдруг дофига транзакций стартует, и всё такое. Оказалось, что - в сутках 1440 минут. Старт и коммит 1440 транзакций в сутки - это ни о чем. - старт нового коннекта каждую минуту, даже при 200-400 активных коннектах, это тоже ни о чем. В результате, получилось, что такая тулза абсолютно никак на производительность даже нагруженного сервера не влияет. Зато не держит ни открытых коннектов, ни активных транзакций. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2019, 22:58 |
|
кто блокирует исходник хранимки?
|
|||
---|---|---|---|
#18+
kdvЗато не держит ни открытых коннектов, ни активных транзакций. Насчёт метаданных тут что-то тоньшее. Я когда-то разобрался, но уже забыл. Отправная точка была - для Эксперта альтеремая процедура in use, а для isql - никаких проблем. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2019, 23:04 |
|
кто блокирует исходник хранимки?
|
|||
---|---|---|---|
#18+
kdvGrigoriyFominРазве есть смысл каждый раз передергивать коннект? А транзакцию читающую завершаю после отработки запроса от клиента. есть смысл НЕ держать постоянно коннект и активную транзакцию. Я ж писал, что транзакцию активную сразу после чтения коммитчу. То есть просто висит коннект из-за того, что я алертером ловлю нужные мне изменения в базе. Так бы наверное и не держал коннект. Дабы не создавать новый топик - на форме 2 транзакции - пишущая и читающая, подключены к коннекту соответствующе. Стартую читающую, выполняю селект через FDQuery - все хорошо. После чтения, не трогая читающую, стартую пишущую транзакцию и через connection.ExecSQL выполняю UPDATE команду. И вуаля - ругань, [FireDAC][Phys][FB]attempted update during read-only transaction. То есть апдейт происходит в читающей транзакции, а в коннекте updateTransaction прописана верная. Как обойти сие недоразумение? как указать ExecSQL коннекта, что его надо выполнять через пишущую транзакцию? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2019, 00:19 |
|
кто блокирует исходник хранимки?
|
|||
---|---|---|---|
#18+
GrigoriyFomin, кто такой connection.execsql? у него, наверное, есть своя defaulttransaction. Вот не надо этой лабуды, когда update выполняется в контексте фиг знает какой транзакции. В Дельфи, кстати, есть отладчик, в котором можно всё найти. GrigoriyFominна форме 2 транзакции - пишущая и читающая, подключены к коннекту соответствующе. да пофиг, куда они подключены. Понятно что транзакции могут быть только в контексте конкретного коннекта. А для выполнения оператора надо указывать конкретную транзакцию. Например, если к коннекту подключены 2 транзакции, то откуда оно узнает, в какой транзакции надо выполнять connection.execsql? Ну что-то прям совсем элементарные вопросы. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2019, 01:54 |
|
кто блокирует исходник хранимки?
|
|||
---|---|---|---|
#18+
GrigoriyFominЯ ж писал, что транзакцию активную сразу после чтения коммитчу. ну ок. а тогда что этот робот высиживает в коннекте без транзакций? Это экономия чего, собственно? Зачем вообще нужен активный коннект без выполнения в нём чего-либо? Если убрать "активный коннект", робот что, будет долбиться к серверу 60 раз в минуту, например? У вас же калькулятор есть, или Excel, можно примерно посчитать, сколько раз в сутки/час/минуту робот будет лезть на сервер с новым коннектом и транзакцией. Я бы понимал, если вы собираетесь долбить сервер 20 раз в минуту, например. Тогда да, открывать-закрывать коннект в этом случае как-то нехорошо, это похоже на ddos-атаку. Но вы ж так и не сказали, насколько часто вам надо некие действия на сервере выполнять. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2019, 01:59 |
|
кто блокирует исходник хранимки?
|
|||
---|---|---|---|
#18+
kdvGrigoriyFominЯ ж писал, что транзакцию активную сразу после чтения коммитчу. ну ок. а тогда что этот робот высиживает в коннекте без транзакций? Это экономия чего, собственно? Зачем вообще нужен активный коннект без выполнения в нём чего-либо? Активный коннект нужен, чтоб принимать сообщения от файрберда - в триггерах есть post_event, которые всегда готов обработать мой сервис. connection.ExecSQL - это способ простого выполнения SQL-команды без создания лишних компонентов посредством самого коннекшена. Вот как конкретно для ExecSQL указать какую транзакцию задействовать? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2019, 11:03 |
|
кто блокирует исходник хранимки?
|
|||
---|---|---|---|
#18+
GrigoriyFomin, Экономика должна быть экономной. (с) Л.И. Брежнев. Никак,. Делай отдельный TQuery, и у для него уже указывай конкретную транзакцию. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2019, 11:34 |
|
кто блокирует исходник хранимки?
|
|||
---|---|---|---|
#18+
Старый плюшевый мишкаНасчёт метаданных тут что-то тоньшее. Я когда-то разобрался, но уже забыл. Отправная точка была - для Эксперта альтеремая процедура in use, а для isql - никаких проблем.dimitr тут ликбез проводил, с обстоятельным объяснением "тонких материй", навскидку пост не попался, но если совсем кратко, то волшебное слово "wait". GrigoriyFominАктивный коннект нужен, чтоб принимать сообщения от файрберда - в триггерах есть post_event, которые всегда готов обработать мой сервис.Далеко не факт, что серверу легче разослать эвенты, чем регулярно отвечать на вопросы "нет ли чего новенького?". Это как дилемма: работа периферийного устройства по прерываниям, либо его регулярный опрос процом. Под нагрузкой оказывается дешевле опрашивать. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2019, 11:35 |
|
кто блокирует исходник хранимки?
|
|||
---|---|---|---|
#18+
Vlad FНикак,. Делай отдельный TQuery, и у для него уже указывай конкретную транзакцию. В итоге так и сделал, не нашел где там указать транзакцию ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2019, 12:48 |
|
кто блокирует исходник хранимки?
|
|||
---|---|---|---|
#18+
GrigoriyFomin, Вот с этого и надо было начинать, - компоненты доступа какие? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2019, 13:13 |
|
кто блокирует исходник хранимки?
|
|||
---|---|---|---|
#18+
Vlad Fкомпоненты доступа какие? FireDAC ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2019, 13:21 |
|
кто блокирует исходник хранимки?
|
|||
---|---|---|---|
#18+
GrigoriyFominVlad FНикак,. Делай отдельный TQuery, и у для него уже указывай конкретную транзакцию. В итоге так и сделал, не нашел где там указать транзакцию Значит, плохо искал. http://docwiki.embarcadero.com/Libraries/Rio/en/FireDAC.Comp.Client.TFDRdbmsDataSet.Transaction ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2019, 15:16 |
|
кто блокирует исходник хранимки?
|
|||
---|---|---|---|
#18+
kdvзачем? нормальный робот должен по таймеру - коннект, выполнил работу, дисконнект. И ждать дальше. к чему такая категоричность? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2019, 16:14 |
|
кто блокирует исходник хранимки?
|
|||
---|---|---|---|
#18+
GrigoriyFominв триггерах есть post_event, которые всегда готов обработать мой сервис. эвенты, конечно, это волшебно и прикольно, но лучше без них, особенно роботу. Дегтярев Евгенийк чему такая категоричность? к тому, что я этих ваших роботов с длинными коннектами и длинными транзакциями наблюдаю в промышленных системах регулярно. И с ними (и с длинными транзакциями и длинными коннектами) впоследствии идет борьба. К примеру, что делать с роботом, если нужно отрубить все коннекты? Пользователям еще как-то можно это сказать, а роботу - обычно нет. Приходится робота убивать. А зачем тогда писать такой софт, который при maintenance надо терминировать? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2019, 17:14 |
|
кто блокирует исходник хранимки?
|
|||
---|---|---|---|
#18+
kdvэвенты, конечно, это волшебно и прикольно, но лучше без них, особенно роботу. Вот роботу-то они как раз годятся лучше, чем какому-нибудь приложению, которое начнёт автоматически обновлять датасеты. И таки нет, проблемы с длинными коннектами кончились ещё в районе полуторки-двойки. Если ты знаешь какую-то проблему, то лучше назови её имя. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2019, 17:32 |
|
кто блокирует исходник хранимки?
|
|||
---|---|---|---|
#18+
kdvк тому, что я этих ваших роботов с длинными коннектами и длинными транзакциями наблюдаю в промышленных системах регулярно. И с ними (и с длинными транзакциями и длинными коннектами) впоследствии идет борьба. из этого не следует что одного коннекта в минуту достаточно всем ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2019, 19:03 |
|
кто блокирует исходник хранимки?
|
|||
---|---|---|---|
#18+
Vlad FGrigoriyFominпропущено... В итоге так и сделал, не нашел где там указать транзакцию Значит, плохо искал. http://docwiki.embarcadero.com/Libraries/Rio/en/FireDAC.Comp.Client.TFDRdbmsDataSet.Transaction Прочитал, ничего нового не нашел. я ж писал - у меня 2 транзакции - читающая и пишущая, заданы в коннекте соотв как Transaction и UpdateTransaction. Вопрос был - как сказать Connection исполнить код ExecSQL в пишущей транзакции? Я полагал, что ExecSQL умеет сам поределить тип команды и в этой зависимости выполняться в читающей либо пишущей транзакции. на лету менять в коннекшене транзакции не комильфо - часть запросов уже выполняются в читающей транзакции. Хотя, учитывая, что я пришел к использованию коротких как пишущей, так и читающей транзакций, как вариант было держать только 1 пишущую и через нее делать все манипуляции. А у кого-то есть опыт нагрузки на сервер при коннекте/дисконнекте? Стоит ли держать коннект в простое закрытым? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2019, 19:08 |
|
кто блокирует исходник хранимки?
|
|||
---|---|---|---|
#18+
GrigoriyFomin, О, боги. Да заведи, наконец, уже два TFDQuery. Всего ДВА. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2019, 19:25 |
|
|
start [/forum/topic.php?fid=40&msg=39872127&tid=1560553]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
190ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 265ms |
total: | 549ms |
0 / 0 |