|
TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?
|
|||
---|---|---|---|
#18+
Есть один запрос, вроде бы примитивный, который отрабатывает успешно в IBExpert (FIB+) и падает c Invalid BLOB ID в аппликухе (Delphi XE2 / dbExpress). Первая библиотека коммерческая, вторая и вовсе без исходников. Попытался задействовать Trace - https://sourceforge.net/projects/fbprofiler К сожалению, показывает только начало и окончание выполнения запроса. README.tracе_services из FB 2.5.9 тоже вроде показывает только это. Пока версия, что FIB+ вычитывает все блобы непосредственно после каждой строки, а dbExpress сначала вычитывает сколько-то строк (типа, на целый экран таблицы, хотя там никакой визуальщины в этом месте нет), а потом уже пытается вычитать все блобы за послние n строк - а они уже перестали существовать. Получить извне программ и библиотек (у dbx нет исходников в принципе) последовательности вычитывания rows и blobs на FB25 возможно? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2019, 18:00 |
|
TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?
|
|||
---|---|---|---|
#18+
Трассировки операций с блобами нет, увы. Invalid blob id может быть в результате чтения временного блоба после завершения тр-ции, в которой он был создан (т.е. баг в приложении), или (нужно уметь на это наступить) из-за сборки мусора, если блоб читается в read committed тр-ции. Во втором случае уровень изоляции snapshot должен помочь. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2019, 18:05 |
|
TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?
|
|||
---|---|---|---|
#18+
Нет вообще, или нет в FB2 ? Вроде ещё в 2012 собирались - 13036447 Нет, там не то что транзакция, там даже statement ещё не завершился! В том и прикол, что в IBE все было оттестировано, а аппликуха посыпалась. Прям хоть каким-нибудь WireShark'ом смотреть и учить wire protocol...... P.S. БД, если что, прошла B&R. Перезапуск FB service и т.д. Проверялись варианты FB 2.1.7 win32: backup & restore & application FB 2.1.7 win32: backup & restore; FB 2.5.9 Win64 application FB 2.1.7 win32: backup FB 2.5.9 Win64 restore & application ---- Любопытное в трейсе для DBX, окончания выполнения выглядит как exec-stmt-finish -> commit -> close cursor -> free-stmt Я как-то думал, что курсоры живут внутри транзакций и закрываться должны перед закрытием транзакции, но DBX думает иначе... Надеюсь, серверу от этого не хуже. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2019, 18:37 |
|
TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?
|
|||
---|---|---|---|
#18+
AriochНет вообще, или нет в FB2 ? Вроде ещё в 2012 собирались - 13036447 Кто собирался ? Кто вообще об этом с тех пор вспоминал ? Кому оно было реально нужно всё это время ? AriochНет, там не то что транзакция, там даже statement ещё не завершился! В том и прикол, что в IBE все было оттестировано, а аппликуха посыпалась.Тогда пробуй поднять уровень изоляции тр-ции. Или заблокировать сборку мусора на время операции. AriochПроверялись варианты...Т.е. оно легко воспроизводится ? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2019, 18:59 |
|
TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?
|
|||
---|---|---|---|
#18+
Кстати, а такие функции, как COALESCE и NULLIF - это тоже просто другая форма CASE или как-то иначе? hvladТ.е. оно легко воспроизводится ? Как оказалось, да. http://tracker.firebirdsql.org/browse/CORE-6119 hvladКто собирался ? Кто вообще об этом с тех пор вспоминал ? мониторинг запросов извне программ? да регулярно вспоминался. В том числе обсуждались подменные fbclient.dll с логированием запросов - и жаль, что таких нет в составе FB, вам казалось бы проще всего такую сделать спец-сборку... Ты ещё учти, что вам хоть напоминай - хоть нет. Если вам это sexy, ну типа убить Оракл и завоевать мир Большого Железа - то вы будете это делать. Нет - нет. http://tracker.firebirdsql.org/secure/IssueNavigator.jspa?reset=true&reporterSelect=specificuser&reporter=arioch ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2019, 00:17 |
|
TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?
|
|||
---|---|---|---|
#18+
AriochЕсли вам это sexy, ну типа убить Оракл и завоевать мир Большого Железа - то вы будете это делать. Нет - нет. http://tracker.firebirdsql.org/secure/IssueNavigator.jspa?reset=true&reporterSelect=specificuser&reporter=arioch Не смеши! Тут "секси" не печь очевидно выгодные плюшки, а выпекать стандартные кирпичи из ржаной муки в соответствии со стандартом, сочинённым флагманами отрасли. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2019, 09:08 |
|
TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?
|
|||
---|---|---|---|
#18+
AriochhvladКто собирался ? Кто вообще об этом с тех пор вспоминал ? мониторинг запросов извне программ? да регулярно вспоминался.Нет. Мониторинг блобов. Мониторинг запросов уже лет 10 как есть. AriochТы ещё учти, что вам хоть напоминай - хоть нет.Тебе хоть объясняй, хоть нет... PS Ты много репортов про IBX\DBX\Delphi\еtс создал ? Много тебе сделали ? Часто напоминал ? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2019, 09:09 |
|
TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?
|
|||
---|---|---|---|
#18+
rdb_dev, Arioch, вот и встретились, вот и поговорите :) ЗЫ не здесь, умоляю ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2019, 09:10 |
|
TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?
|
|||
---|---|---|---|
#18+
hvlad, не о чем говорить. Всё и так очевидно. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2019, 09:11 |
|
TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?
|
|||
---|---|---|---|
#18+
Arioch, для начала попробуй poFetchBlobOnDemand AriochКстати, а такие функции, как COALESCE и NULLIF - это тоже просто другая форма CASE или как-то иначе? это что какое открытие? И вообще каким боком это относится к твоему топику AriochЕсли вам это sexy, ну типа убить Оракл и завоевать мир Большого Железа - то вы будете это делать. Нет - нет. http://tracker.firebirdsql.org/secure/IssueNavigator.jspa?reset=true&reporterSelect=specificuser&reporter=arioch и тут Остапа понесло... Дружище ни о каком бодании с Оракулом речи не идёт. Вот есть MySql, есть PostgreSql вот с ними по разумным фичам тягаться можно и нужно ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2019, 09:29 |
|
TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?
|
|||
---|---|---|---|
#18+
В трекере ответил. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2019, 11:01 |
|
TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?
|
|||
---|---|---|---|
#18+
AriochЛюбопытное в трейсе для DBX, окончания выполнения выглядит как exec-stmt-finish -> commit -> close cursor -> free-stmt Я как-то думал, что курсоры живут внутри транзакций и закрываться должны перед закрытием транзакции, но DBX думает иначе... Надеюсь, серверу от этого не хуже. ну дык ты же сам эти действия не делаешь. Вот и получается, что в процессе вызова commit закрываются все курсоры и освобождаются статменты. Их трейс показывает действия самого DBX, а не сервера. AriochВ том и прикол, что в IBE все было оттестировано, а аппликуха посыпалась. забавно было бы думать что если IBExpert что то успешно обработал, то и приложение должно сделать тоже самое. З.Ы. По поводу решения проблемы. Ты проверил нет ли случайно в DataSetProvider.Options флага poFetchBlobOnDemand? Ну если конечно ты через него работаешь ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2019, 11:26 |
|
TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?
|
|||
---|---|---|---|
#18+
Симонов Денисдля начала попробуй poFetchBlobOnDemand Для этого нужно как минимум выкинуть dbExpress и пользоваться другой библиотекой - MIDAS/CDS. Дружище ни о каком бодании с Оракулом речи не идёт. Вот есть MySql, есть PostgreSql вот с ними по разумным фичам тягаться можно и нужно постгрессовцы вполне бодаются с MS-SQL и Oracle где могут, так что ты только подтвердил ориентиры. а что при этом убивается когда-то присущая IB/FB предсказуемость и лёгкость в администрировании неподготовленными пользователями - так и постгресс с ней ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2019, 11:42 |
|
TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?
|
|||
---|---|---|---|
#18+
Симонов ДенисВот и получается, что в процессе вызова commit закрываются все курсоры и освобождаются статменты. Их трейс показывает действия самого DBX, а не сервера. понятно, что действия DBX, но на моё взгля дпорядок действий DBX тут вывернут наизнанку, а именно - что курсор надо закрывать до коммита, а не после. Я в этом прав или нет? 1) не прав, порядок действий DBX корректен 2) вообще прав, но на практике серверу на это наплевать потoму-то и потому-то, съест и не подавится 3) прав, и в каких-то случаях может привести к проблемам ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2019, 11:45 |
|
TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?
|
|||
---|---|---|---|
#18+
hvladВ трекере ответил. ты чем снимал трассу, fbtracemanager? с каким конфигом? я на реальной аппликухе fbprofiler'ом никаких левых транзакций не видел. сейчас затащу туда вчера на коленке сделанный проект-пример и попробую с транзакциями поиграть.... как и минимум нашёлся ещё один баг DBX.... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2019, 11:48 |
|
TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?
|
|||
---|---|---|---|
#18+
Arioch, к проблемам это не имеет абсолютно никакого отношения. Если commit будет вызван до закрытия курсора и уничтожения запроса, то и клиент и сервер в любом случае сделают это автоматически. Проблема в том что блоб вычитается по идентификатору в другой транзакции. Вообще если это косяк DBX.то тут врядли что сделаешь. Флагов у них я не нашёл. Можно конечно попробовать после каждого фетча блоб руками вычитывать. По идее у них записи пакетами в SimpleDataSet читаются. о все пакеты вроде как должны быть в одной транзакции, иначе бред выходит ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2019, 12:01 |
|
TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?
|
|||
---|---|---|---|
#18+
hvladPS Ты много репортов про IBX\DBX\Delphi\еtс создал ? это ваш внутренний классификатор, снаружи недоступный я вижу репорты "в целом", что вижу о том и пою. впрочем, я и с Delphi где-то полгода назад описывал запутанный случай, который сносил FB21 на этапе просто подключения к БД. Интереса не вызвало вообще. ну, документацию и WWW оставим, как и инсталлятор, вы типа к этому никак не относитесь. CORE-5004 Method to demand use out-of-process stadalone server ( or oppositely, embedded engine) in DPB or connection string CORE-5185 Connection string: to have option demanding/prohibiting use of embedded (in-process) engine. регулярно у людей проблемы, когда они на винде внезапно выпадают в embedded, даже не зная, что это такое, и получают наведённые ошибки с правами доступа, как уровня SQL, так и уровня OS. ну да, небожителям не до проблем идиотов..... CORE-4641/CORE-5186 - self-security database не требующая админского доступа к database.conf - обсуждалось ещё с fb3 beta, если не alpha - и вроде да, можно, да, сделаем попозже, когда решатся основные проблемы - ну так говорилось. И до сих пор говорится. толку с напоминаний? CORE-3925 - bugcheck - с 2012 года висел, пока другой человек не подключился и не начал напоминать. Теперь якобы исправлен, в будущих сборках тройки, но не в 2.5.9 ALTER column between BLOB SUB_TYPE TEXT and VARCHAR - вам не нравится CORE-6052 и другие тикеты на ту же тему? ну так заведите правильный тикет. Сейчас в функционале - дырка просто. Пересоздание столбца - чистая теория, потому что тянет за собой по зависимостям пересоздание половины БД. А существующих, но невалидных зависимоcтей в ФБ нет. Зато много статей типа "Simple INSERT/UPDATE/DELETE test — please participate!" и прочие "можно ли сотни гигабайт? легко!" Так что "курс на Оракл", увы, очевиден. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2019, 12:05 |
|
TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?
|
|||
---|---|---|---|
#18+
Симонов ДенисПо идее у них записи пакетами в SimpleDataSet читаются это другая библиотека, MIDAS/CDS/как-там-её-потом-обозвали ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2019, 12:06 |
|
TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?
|
|||
---|---|---|---|
#18+
AriochСимонов ДенисПо идее у них записи пакетами в SimpleDataSet читаются это другая библиотека, MIDAS/CDS/как-там-её-потом-обозвали странно, тогда с какого перепуга она на закладке dbExpress? З.Ы. Тебе прям точно нужен этот глючный dbExpress? Заменить его никак? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2019, 12:23 |
|
TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?
|
|||
---|---|---|---|
#18+
AriochALTER TABLE ALTER_TEXT ALTER COLUMN TARGET TYPE T_TEXT_BLOB; ну это бред чистой воды. Как ты себе представляешь такое изменение на уровне сервера? Сейчас когда меняется тип столбца через ALTER COLUMN реального преобразования данных не происходит. Просто добавляется новый формат и старые форматы "на лету" преобразуются к новому. Теперь внимание вопрос: как ты представляешь преобразование VARCHAR в BLOB "на лету"? З.Ы. Нудение про старые хотелки здесь оффтоп ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2019, 12:29 |
|
TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?
|
|||
---|---|---|---|
#18+
на упрощённом сэмпле явное управление транзакциями проблему снимает. на реальной аппликухе надо разбираться, теоретически там управление транзакциями хотя и кривое, но есть. если потерялось, надо будет правильно его найти.... кроме того, там есть явное закрытие query, и вот эта последовательность - сначала закрываем транзакцию, а потом курсор, она вполне может получиться оттуда... но с другой стороны, fbprofiler через traceapi вообще не видел отдельных транзакций и ошибки с блобами... прогнал через fbprofiler исходный вчерашний сэмпл (нет явного управления транзакциями и query не закрывается), забавно.... start transaction prepare stmt exec stmt start exec stmt finish start transaction - ага, вложенная! compile BLR execute BLR compile BLR execute BLR commit start transaction compile BLR .... Забавно, т.е. чтение BLOB выполняется как почему-то два BLR-запроса, каждый из которых надо ещё компилировать (т.е. не prepared? или зачем это?..) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2019, 12:32 |
|
TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?
|
|||
---|---|---|---|
#18+
Симонов ДенисТеперь внимание вопрос: как ты представляешь преобразование VARCHAR в BLOB "на лету"? select cast('abcde' as blob sub_type text) from rdb$database и да, можно исправить это преобрзаование "на лету", если оно якобы исторически сломанное, хотя никто никаких примеров этому так и не дал или можно для этого случая принудительно конвертировать данные, если исправить по-другом не получается в конце концов ровно та же проблема раньше была с добавлением not null и прочих constraint на живых данных - справились же ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2019, 12:35 |
|
TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?
|
|||
---|---|---|---|
#18+
AriochЗабавно, т.е. чтение BLOB выполняется как почему-то два BLR-запроса не обязательно 2 может и больше. Сначала открытие блоба, а потом посегментное чтение. сегментов может быть больше чем 1. Ariochи вот эта последовательность - сначала закрываем транзакцию, а потом курсор, она вполне может получиться оттуда... в принципе может. Если при закрытии commit транзакции весь курсор вычитывается целиком (то что не дочитано) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2019, 12:38 |
|
TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?
|
|||
---|---|---|---|
#18+
Ariochselect cast('abcde' as blob sub_type text) from rdb$database и да, можно исправить это преобрзаование "на лету", если оно якобы исторически сломанное, хотя никто никаких примеров этому так и не дал да ну на фиг. Т.е. новые блобы мы храним перманентно, а на каждый старый варчар плодим временный блоб. А потом удивляемся откуда глюки лезут и почему БД растёт Ariochили можно для этого случая принудительно конвертировать данные, если исправить по-другом не получается в конце концов ровно та же проблема раньше была с добавлением not null и прочих constraint на живых данных - справились же не сравнивай яблоки с апельсинами. При добавлении ограничения not null никаких преобразований не делается. Просто делается проверка всех записей на удовлетворение этому ограничению ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2019, 12:42 |
|
TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?
|
|||
---|---|---|---|
#18+
Симонов Денисна каждый старый варчар плодим временный блоб. Ну, временный блоб это всего лишь несколько байт в памяти. Он при желании может и не раздувать базу. Аффтар, проверил бы ты это поведение на четвёрке. Туда, кажется, приняли мой патч по предотвращению преждевременного удаления блобов. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2019, 12:49 |
|
|
start [/forum/topic.php?fid=40&fpage=18&tid=1560508]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
49ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
121ms |
get tp. blocked users: |
2ms |
others: | 268ms |
total: | 485ms |
0 / 0 |