powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / IBE: если дёрнуть fetch all в snapshot-транзакции, то почему нельзя затем commit ?
23 сообщений из 23, страница 1 из 1
IBE: если дёрнуть fetch all в snapshot-транзакции, то почему нельзя затем commit ?
    #38483623
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hi all

Объясните, плз, почему нельзя в приложении (например, в ИБЭ) автоматически сделать коммит транзакции после того, как случится сабж. Или это только в ИБЭ так ?
(вопрос навеян необходимостью постоянно делать commit в sql editor'e после просмотра грида, если далее надо выполнить пересоздание таблиц, участвовавших в запросе)
...
Рейтинг: 0 / 0
IBE: если дёрнуть fetch all в snapshot-транзакции, то почему нельзя затем commit ?
    #38483631
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидОбъясните, плз, почему нельзя в приложении (например, в ИБЭ) автоматически
сделать коммит транзакции после того, как случится сабж. Или это только в ИБЭ так ?
Это только в тех приложениях, которые пользуются компонентами производными от FIBC и
сбрасывают локальный кэш датасета при закрытии транзакции.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
IBE: если дёрнуть fetch all в snapshot-транзакции, то почему нельзя затем commit ?
    #38483634
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

якобы датасет потеряет "видимость" записей. Датасеты так в дельфях для ИБ устроены, провоцируют на длинные транзакции. По уму - да, после fetchall надо вообще грузить все в clientdataset и транзакцию завершать.
Но - fetchall опасен на миллионо-миллиардных выборках, или на тяжелых группировках-сортировках, особенно с plan ... order index, а такое разработчики весьма любят запускать в SQL Editor.
...
Рейтинг: 0 / 0
IBE: если дёрнуть fetch all в snapshot-транзакции, то почему нельзя затем commit ?
    #38483635
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

Дык по коммиту ведь данные в DataSet пропадают, курсоры закрываются. Ты же не хочешь выполнить SELECT не увидев его результата.
...
Рейтинг: 0 / 0
IBE: если дёрнуть fetch all в snapshot-транзакции, то почему нельзя затем commit ?
    #38483642
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисДык по коммиту ведь данные в DataSet пропадают, курсоры закрываются.
данные в датасете после закрытия курсора пропадают только по злой воле Грегори Дица, автора FreeIBComponents, которые за базу взяты в IBX, FIBPlus, и т.д.
Датасет все равно сам по себе кэширующий, после Fetchall у него все записи в кэше, и закрытие курсора ему должно быть до лампочки. Но нет, увы.
Проблема была бы только у UniDirectional = False датасетов, они "забывают" начально отфетченные данные.
...
Рейтинг: 0 / 0
IBE: если дёрнуть fetch all в snapshot-транзакции, то почему нельзя затем commit ?
    #38483643
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

обычно при многомиллиардных выборках они fetchall не нажимают
...
Рейтинг: 0 / 0
IBE: если дёрнуть fetch all в snapshot-транзакции, то почему нельзя затем commit ?
    #38483660
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисДык по коммиту ведь данные в DataSet пропадают, курсоры закрываются. Ты же не хочешь выполнить SELECT не увидев его результата.я не знаю, отчего они должны "пропасть" в датасете, если случится коммит. Оченно хочется, чтобы grid был был отстёгнут и жил сам по себе, как только отфетчатся все записи и TIL (snapshot!) исключает обновление строк грида.
ИБЭ по умолчанию НЕ делает фетч всех, это "постараться" надо, в настройки полезть. Так что если я ткну, а там 100500 млрд строк, то буду ССЗБ. И то, срубить элементарно через delete from mon$statements where mon$attach_id = curr_conn.
...
Рейтинг: 0 / 0
IBE: если дёрнуть fetch all в snapshot-транзакции, то почему нельзя затем commit ?
    #38483665
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvСимонов ДенисДык по коммиту ведь данные в DataSet пропадают, курсоры закрываются.
данные в датасете после закрытия курсора пропадают только по злой воле Грегори Дица, автора FreeIBComponents, которые за базу взяты в IBX, FIBPlus, и т.д.
Датасет все равно сам по себе кэширующий, после Fetchall у него все записи в кэше, и закрытие курсора ему должно быть до лампочки. Но нет, увы.
Проблема была бы только у UniDirectional = False датасетов, они "забывают" начально отфетченные данные.Почему он решил ТАК делать ? Это намеренно сделано или просто недочёт какой-то ? (я про пропадание данных)
...
Рейтинг: 0 / 0
IBE: если дёрнуть fetch all в snapshot-транзакции, то почему нельзя затем commit ?
    #38483681
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидПочему он решил ТАК делать ?
ну, в BDE так было сделано. Наверное, по образу и подобию. И ClientDataSet тогда или не был популярен, или вообще не существовал.
Последний FIB был выпущен в 1999 году, а первая версия появилась наверняка еще раньше, через некоторое время после того как в Дельфи (вроде версия 3) появился CustomDataSet.
...
Рейтинг: 0 / 0
IBE: если дёрнуть fetch all в snapshot-транзакции, то почему нельзя затем commit ?
    #38483707
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CustomDataSet появился в двойке.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
IBE: если дёрнуть fetch all в snapshot-транзакции, то почему нельзя затем commit ?
    #38483717
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидТак что если я ткну, а там 100500 млрд строк, то буду ССЗБ. И то, срубить элементарно через delete from mon$statements where mon$attach_id = curr_conn.(мечтательно...) а еще был бы кайф, если бы ИБЭ позволял сам срубить тугодумные запросы, т.е. выполнял их в отдельном потоке.
Хотя и SQL Server Studio Management (m$ sql) или SQL Developer (ora) - полный ацтой по ср. с ИБЭ по удобству, но вот в этом вопросе они рулят: всё крутится в отдельных потоках, всегда срубить можно.
...
Рейтинг: 0 / 0
IBE: если дёрнуть fetch all в snapshot-транзакции, то почему нельзя затем commit ?
    #38483723
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Таблоид!
You wrote on 29 ноября 2013 г. 16:50:57:

Таблоид> если бы ИБЭ позволял сам срубить тугодумные запросы,
> т.е. выполнял их в отдельном потоке.
разуй глаза.
там это есть.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
IBE: если дёрнуть fetch all в snapshot-транзакции, то почему нельзя затем commit ?
    #38483727
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

Да это было бы хорошо. По идее во время выполнения запроса надо запускать отдельное окошко с кнопкой Cancel, которое не блокировалось бы и из него можно было асинхронно отменить запрос. А сделать так чтобы каждый отдельный запрос выполнялся асинхронно будет крайне проблематично, да и не правильно наверное.
...
Рейтинг: 0 / 0
IBE: если дёрнуть fetch all в snapshot-транзакции, то почему нельзя затем commit ?
    #38483730
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а, тьфу... точно.
...
Рейтинг: 0 / 0
IBE: если дёрнуть fetch all в snapshot-транзакции, то почему нельзя затем commit ?
    #38483732
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
упс. Точно там ведь есть кнопочка "выполнить в фоне"
...
Рейтинг: 0 / 0
IBE: если дёрнуть fetch all в snapshot-транзакции, то почему нельзя затем commit ?
    #38483734
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, нет, "не полностью" есть: можно только одну вкладку затолкать на выполнение. Остальные - фигу.
...
Рейтинг: 0 / 0
IBE: если дёрнуть fetch all в snapshot-транзакции, то почему нельзя затем commit ?
    #38484185
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис и из него можно было асинхронно отменить запрос.
ну вы же понимаете, что "абортирование" тут возможно только в момент фетчей, а не самого запроса (execute). Если это груп бай, который на 10 выходных строк пыжится минут 20 - никакой аборт из ИБЕ не поможет. Разве что действительно параллельный запуск, и в конкуретном окне sql editor убить тот аттачмент. Нет никакой магии.
...
Рейтинг: 0 / 0
IBE: если дёрнуть fetch all в snapshot-транзакции, то почему нельзя затем commit ?
    #38484200
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvЕсли это груп бай, который на 10 выходных строк пыжится минут 20 - никакой аборт из ИБЕ не поможет.По моим наблюдениям, "прослушка" mon$-таблиц на необходимость отрубания отсутствует только при операциях с блобами (и то вроде одна - similar to). А групп бай - слетит.
...
Рейтинг: 0 / 0
IBE: если дёрнуть fetch all в snapshot-транзакции, то почему нельзя затем commit ?
    #38484201
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗЫ. Рисунок добавить хотел к следующему посту, а он влез поперёд паровоза :-)
Я к тому, что в мозилле здорово сделано с отрубанием. Крестик ткнул - и вкладка закроется, чего бы там не происходило "внутри".
...
Рейтинг: 0 / 0
IBE: если дёрнуть fetch all в snapshot-транзакции, то почему нельзя затем commit ?
    #38484202
Фотография PEAKTOP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоидя не знаю, отчего они должны "пропасть" в датасете, если случится коммит. Оченно хочется, чтобы grid был был отстёгнут и жил сам по себе, как только отфетчатся все записи..........

Это делается фракенштейном из FIB/IBX/FIBPlus и какого-нибудь MemDataSet.

К примеру, я пользую активно DBGridEh, в котором есть TMemTableEh. Во время FetchAll данные пумпятся в MemTableEh, а затем первая ступень в виде TIBQuery отбрасывается.
Параллельно убивается второй заяц: прикольные фильтры набора данных в нулевой строке грида a-la M$ Excel.
----------------------------------
в FIB/IBX/FIBPlus удерживание транзакции и SQL открытыми - это часть философии и политики партии. Типа, если коннекшн отвалился, то закономерно, что набора данных не будет. Когда это проектировалось, все затачивалсиь на LAN ничуть не подумав, что сервак вообще может быть где-то в инете. Скоростей тогда таких еще не было.

Да и вообще: глянте на те же демки из среды разработки, которую здесь никто не знает. Кидается на форму TIBDataBase, Active проставляется еще в дизайн-тайме, в течение всего цикла работы приложения держится активными 1) само подключения, 2) все транзакции и 3) наборы данных. Зачем это все? Один раз прописали в настройках логин и пассворд (или скешировали введенный пользователем при старте). нужен набор данных - подключились, выполнили запрос, скачали результат - отключились. Всё. Зачем держать транзакции, НД открытыми?
...
Рейтинг: 0 / 0
IBE: если дёрнуть fetch all в snapshot-транзакции, то почему нельзя затем commit ?
    #38484205
Фотография PEAKTOP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PEAKTOP,

а сама идея проектирования приложений с использованием TDataModule - это вообще феерия угара и разврата, которая сводит на нет все преимущества SQL-сервера версионника. И речь не только о Firebird, мне как-то Павел Голубь о тех же самых проблемах у DAC для слонопотама рассказывал.
Здесь, ИМХО, как раз тот уникальный случай, когда ошибка в консерватории.
...
Рейтинг: 0 / 0
IBE: если дёрнуть fetch all в snapshot-транзакции, то почему нельзя затем commit ?
    #38484208
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PEAKTOPЗдесь, ИМХО, как раз тот уникальный случай, когда ошибка в консерватории.

Во-первых, случай далеко не уникальный. Просто самый известный.
Во-вторых, именно поэтому когда я был молод и горяч, то взял исходники тогда ещё
свободного FIB+ и из них создал FIB- с отбитым неестественным интеллектом, включая то
самое закрытие НД по концу транзакции.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
IBE: если дёрнуть fetch all в snapshot-транзакции, то почему нельзя затем commit ?
    #38484240
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидПо моим наблюдениям, "прослушка" mon$-таблиц на необходимость отрубания отсутствует только при операциях с блобами (и то вроде одна - similar to). А групп бай - слетит.
а что, IBE умеет "из себя" отрубать собственный коннект? Тем более, что тут речь идет про прерывание ЗАПРОСА, а не коннекта.
Не надо перескакивать между запросом и коннектом, mon$ и обрубанием Fetch в IBE.
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / IBE: если дёрнуть fetch all в snapshot-транзакции, то почему нельзя затем commit ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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