Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2 3      [все]
 TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
Arioch
Member

Откуда:
Сообщений: 10967
Есть один запрос, вроде бы примитивный, который отрабатывает успешно в 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 возможно?
9 авг 19, 18:00    [21945839]     Ответить | Цитировать Сообщить модератору
 Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
hvlad
Member

Откуда:
Сообщений: 10531
Трассировки операций с блобами нет, увы.

Invalid blob id может быть в результате чтения временного блоба после завершения тр-ции, в которой он был создан (т.е. баг в приложении), или
(нужно уметь на это наступить) из-за сборки мусора, если блоб читается в read committed тр-ции.
Во втором случае уровень изоляции snapshot должен помочь.
9 авг 19, 18:05    [21945840]     Ответить | Цитировать Сообщить модератору
 Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
Arioch
Member

Откуда:
Сообщений: 10967
Нет вообще, или нет в 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 думает иначе... Надеюсь, серверу от этого не хуже.
  • 9 авг 19, 18:37    [21945863]     Ответить | Цитировать Сообщить модератору
     Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
    hvlad
    Member

    Откуда:
    Сообщений: 10531
    Arioch
    Нет вообще, или нет в FB2 ? Вроде ещё в 2012 собирались - 13036447
    Кто собирался ? Кто вообще об этом с тех пор вспоминал ? Кому оно было реально нужно всё это время ?

    Arioch
    Нет, там не то что транзакция, там даже statement ещё не завершился!
    В том и прикол, что в IBE все было оттестировано, а аппликуха посыпалась.
    Тогда пробуй поднять уровень изоляции тр-ции.
    Или заблокировать сборку мусора на время операции.

    Arioch
    Проверялись варианты...
    Т.е. оно легко воспроизводится ?
    9 авг 19, 18:59    [21945889]     Ответить | Цитировать Сообщить модератору
     Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
    Arioch
    Member

    Откуда:
    Сообщений: 10967
    Кстати, а такие функции, как 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 авг 19, 00:17    [21946717]     Ответить | Цитировать Сообщить модератору
     Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
    rdb_dev
    Member

    Откуда: с болот
    Сообщений: 2929
    Arioch
    Если вам это sexy, ну типа убить Оракл и завоевать мир Большого Железа - то вы будете это делать.
    Нет - нет.
    http://tracker.firebirdsql.org/secure/IssueNavigator.jspa?reset=true&reporterSelect=specificuser&reporter=arioch
    Не смеши!
    Тут "секси" не печь очевидно выгодные плюшки, а выпекать стандартные кирпичи из ржаной муки в соответствии со стандартом, сочинённым флагманами отрасли.
    12 авг 19, 09:08    [21946784]     Ответить | Цитировать Сообщить модератору
     Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
    hvlad
    Member

    Откуда:
    Сообщений: 10531
    Arioch
    hvlad
    Кто собирался ? Кто вообще об этом с тех пор вспоминал ?


    мониторинг запросов извне программ? да регулярно вспоминался.
    Нет. Мониторинг блобов.
    Мониторинг запросов уже лет 10 как есть.

    Arioch
    Ты ещё учти, что вам хоть напоминай - хоть нет.
    Тебе хоть объясняй, хоть нет...

    PS Ты много репортов про IBX\DBX\Delphi\еtс создал ?
    Много тебе сделали ?
    Часто напоминал ?
    12 авг 19, 09:09    [21946785]     Ответить | Цитировать Сообщить модератору
     Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
    hvlad
    Member

    Откуда:
    Сообщений: 10531
    rdb_dev, Arioch,

    вот и встретились, вот и поговорите :)

    ЗЫ не здесь, умоляю
    12 авг 19, 09:10    [21946788]     Ответить | Цитировать Сообщить модератору
     Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
    rdb_dev
    Member

    Откуда: с болот
    Сообщений: 2929
    hvlad, не о чем говорить. Всё и так очевидно.
    12 авг 19, 09:11    [21946789]     Ответить | Цитировать Сообщить модератору
     Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
    Симонов Денис
    Member

    Откуда: Рязань
    Сообщений: 9831
    Arioch,

    для начала попробуй poFetchBlobOnDemand

    Arioch
    Кстати, а такие функции, как COALESCE и NULLIF - это тоже просто другая форма CASE или как-то иначе?


    это что какое открытие? И вообще каким боком это относится к твоему топику


    Arioch
    Если вам это sexy, ну типа убить Оракл и завоевать мир Большого Железа - то вы будете это делать.
    Нет - нет.
    http://tracker.firebirdsql.org/secure/IssueNavigator.jspa?reset=true&reporterSelect=specificuser&reporter=arioch


    и тут Остапа понесло...
    Дружище ни о каком бодании с Оракулом речи не идёт. Вот есть MySql, есть PostgreSql вот с ними по разумным фичам тягаться можно и нужно
    12 авг 19, 09:29    [21946810]     Ответить | Цитировать Сообщить модератору
     Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
    hvlad
    Member

    Откуда:
    Сообщений: 10531
    В трекере ответил.
    12 авг 19, 11:01    [21946892]     Ответить | Цитировать Сообщить модератору
     Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
    Симонов Денис
    Member

    Откуда: Рязань
    Сообщений: 9831
    Arioch
    Любопытное в трейсе для DBX, окончания выполнения выглядит как exec-stmt-finish -> commit -> close cursor -> free-stmt
    Я как-то думал, что курсоры живут внутри транзакций и закрываться должны перед закрытием транзакции, но DBX думает иначе... Надеюсь, серверу от этого не хуже.


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

    Arioch
    В том и прикол, что в IBE все было оттестировано, а аппликуха посыпалась.


    забавно было бы думать что если IBExpert что то успешно обработал, то и приложение должно сделать тоже самое.

    З.Ы. По поводу решения проблемы. Ты проверил нет ли случайно в DataSetProvider.Options флага poFetchBlobOnDemand? Ну если конечно ты через него работаешь
    12 авг 19, 11:26    [21946929]     Ответить | Цитировать Сообщить модератору
     Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
    Arioch
    Member

    Откуда:
    Сообщений: 10967
    Симонов Денис
    для начала попробуй poFetchBlobOnDemand


    Для этого нужно как минимум выкинуть dbExpress и пользоваться другой библиотекой - MIDAS/CDS.

    Дружище ни о каком бодании с Оракулом речи не идёт. Вот есть MySql, есть PostgreSql вот с ними по разумным фичам тягаться можно и нужно


    постгрессовцы вполне бодаются с MS-SQL и Oracle где могут, так что ты только подтвердил ориентиры.

    а что при этом убивается когда-то присущая IB/FB предсказуемость и лёгкость в администрировании неподготовленными пользователями - так и постгресс с ней
    12 авг 19, 11:42    [21946961]     Ответить | Цитировать Сообщить модератору
     Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
    Arioch
    Member

    Откуда:
    Сообщений: 10967
    Симонов Денис
    Вот и получается, что в процессе вызова commit закрываются все курсоры и освобождаются статменты. Их трейс показывает действия самого DBX, а не сервера.


    понятно, что действия DBX, но на моё взгля дпорядок действий DBX тут вывернут наизнанку, а именно - что курсор надо закрывать до коммита, а не после. Я в этом прав или нет?

    1) не прав, порядок действий DBX корректен
    2) вообще прав, но на практике серверу на это наплевать потoму-то и потому-то, съест и не подавится
    3) прав, и в каких-то случаях может привести к проблемам
    12 авг 19, 11:45    [21946968]     Ответить | Цитировать Сообщить модератору
     Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
    Arioch
    Member

    Откуда:
    Сообщений: 10967
    hvlad
    В трекере ответил.


    ты чем снимал трассу, fbtracemanager? с каким конфигом?

    я на реальной аппликухе fbprofiler'ом никаких левых транзакций не видел.

    сейчас затащу туда вчера на коленке сделанный проект-пример и попробую с транзакциями поиграть....

    как и минимум нашёлся ещё один баг DBX....
    12 авг 19, 11:48    [21946976]     Ответить | Цитировать Сообщить модератору
     Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
    Симонов Денис
    Member

    Откуда: Рязань
    Сообщений: 9831
    Arioch,

    к проблемам это не имеет абсолютно никакого отношения. Если commit будет вызван до закрытия курсора и уничтожения запроса, то и клиент и сервер в любом случае сделают это автоматически.

    Проблема в том что блоб вычитается по идентификатору в другой транзакции. Вообще если это косяк DBX.то тут врядли что сделаешь. Флагов у них я не нашёл. Можно конечно попробовать после каждого фетча блоб руками вычитывать. По идее у них записи пакетами в SimpleDataSet читаются. о все пакеты вроде как должны быть в одной транзакции, иначе бред выходит
    12 авг 19, 12:01    [21946992]     Ответить | Цитировать Сообщить модератору
     Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
    Arioch
    Member

    Откуда:
    Сообщений: 10967
    hvlad
    PS Ты много репортов про 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 авг 19, 12:05    [21946995]     Ответить | Цитировать Сообщить модератору
     Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
    Arioch
    Member

    Откуда:
    Сообщений: 10967
    Симонов Денис
    По идее у них записи пакетами в SimpleDataSet читаются


    это другая библиотека, MIDAS/CDS/как-там-её-потом-обозвали
    12 авг 19, 12:06    [21946996]     Ответить | Цитировать Сообщить модератору
     Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
    Симонов Денис
    Member

    Откуда: Рязань
    Сообщений: 9831
    Arioch
    Симонов Денис
    По идее у них записи пакетами в SimpleDataSet читаются


    это другая библиотека, MIDAS/CDS/как-там-её-потом-обозвали


    странно, тогда с какого перепуга она на закладке dbExpress?

    З.Ы. Тебе прям точно нужен этот глючный dbExpress? Заменить его никак?
    12 авг 19, 12:23    [21947019]     Ответить | Цитировать Сообщить модератору
     Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
    Симонов Денис
    Member

    Откуда: Рязань
    Сообщений: 9831
    Arioch
    ALTER TABLE ALTER_TEXT ALTER COLUMN TARGET TYPE T_TEXT_BLOB;


    ну это бред чистой воды. Как ты себе представляешь такое изменение на уровне сервера?

    Сейчас когда меняется тип столбца через ALTER COLUMN реального преобразования данных не происходит. Просто добавляется новый формат и старые форматы "на лету" преобразуются к новому. Теперь внимание вопрос: как ты представляешь преобразование VARCHAR в BLOB "на лету"?

    З.Ы. Нудение про старые хотелки здесь оффтоп
    12 авг 19, 12:29    [21947026]     Ответить | Цитировать Сообщить модератору
     Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
    Arioch
    Member

    Откуда:
    Сообщений: 10967
    на упрощённом сэмпле явное управление транзакциями проблему снимает.

    на реальной аппликухе надо разбираться, теоретически там управление транзакциями хотя и кривое, но есть.
    если потерялось, надо будет правильно его найти....

    кроме того, там есть явное закрытие 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 авг 19, 12:32    [21947030]     Ответить | Цитировать Сообщить модератору
     Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
    Arioch
    Member

    Откуда:
    Сообщений: 10967
    Симонов Денис
    Теперь внимание вопрос: как ты представляешь преобразование VARCHAR в BLOB "на лету"?


    select cast('abcde' as blob sub_type text) from rdb$database

    и да, можно исправить это преобрзаование "на лету", если оно якобы исторически сломанное, хотя никто никаких примеров этому так и не дал

    или можно для этого случая принудительно конвертировать данные, если исправить по-другом не получается

    в конце концов ровно та же проблема раньше была с добавлением not null и прочих constraint на живых данных - справились же
    12 авг 19, 12:35    [21947034]     Ответить | Цитировать Сообщить модератору
     Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
    Симонов Денис
    Member

    Откуда: Рязань
    Сообщений: 9831
    Arioch
    Забавно, т.е. чтение BLOB выполняется как почему-то два BLR-запроса


    не обязательно 2 может и больше. Сначала открытие блоба, а потом посегментное чтение. сегментов может быть больше чем 1.

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


    в принципе может. Если при закрытии commit транзакции весь курсор вычитывается целиком (то что не дочитано)
    12 авг 19, 12:38    [21947040]     Ответить | Цитировать Сообщить модератору
     Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
    Симонов Денис
    Member

    Откуда: Рязань
    Сообщений: 9831
    Arioch
    select cast('abcde' as blob sub_type text) from rdb$database

    и да, можно исправить это преобрзаование "на лету", если оно якобы исторически сломанное, хотя никто никаких примеров этому так и не дал


    да ну на фиг. Т.е. новые блобы мы храним перманентно, а на каждый старый варчар плодим временный блоб. А потом удивляемся откуда глюки лезут и почему БД растёт

    Arioch
    или можно для этого случая принудительно конвертировать данные, если исправить по-другом не получается

    в конце концов ровно та же проблема раньше была с добавлением not null и прочих constraint на живых данных - справились же


    не сравнивай яблоки с апельсинами. При добавлении ограничения not null никаких преобразований не делается. Просто делается проверка всех записей на удовлетворение этому ограничению
    12 авг 19, 12:42    [21947046]     Ответить | Цитировать Сообщить модератору
     Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
    Dimitry Sibiryakov
    Member

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

    Симонов Денис
    на каждый старый варчар плодим временный блоб.

    Ну, временный блоб это всего лишь несколько байт в памяти. Он при желании может и не
    раздувать базу.

    Аффтар, проверил бы ты это поведение на четвёрке. Туда, кажется, приняли мой патч по
    предотвращению преждевременного удаления блобов.

    Posted via ActualForum NNTP Server 1.5

    12 авг 19, 12:49    [21947056]     Ответить | Цитировать Сообщить модератору
     Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
    Basil A. Sidorov
    Member

    Откуда:
    Сообщений: 9302
    Arioch
    а что при этом убивается когда-то присущая IB/FB предсказуемость и лёгкость в администрировании неподготовленными пользователями - так и постгресс с ней
    FB версий от 1.5 до 3.0 администрируется совершенно одинаково.
    Да, админ может быть не в курсе каких-то фичей FB, ну так админу это и не требуется.
    12 авг 19, 12:49    [21947057]     Ответить | Цитировать Сообщить модератору
     Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
    Arioch
    Member

    Откуда:
    Сообщений: 10967
    A.S. в проблемное место аппликухи воткнул локальную транзакцию - и invalid BLOB id действительно ушёл.

    Т.е. теперь придется перекапывать это месторождение и разбираться, куда же на пол-пути делась правильная транзакция и что там вообще где происходит...

    Симонов Денис
    Тебе прям точно нужен этот глючный dbExpress? Заменить его никак?


    во всей аппликухе, которой больше 10 лет? малореально.

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

    Симонов Денис
    с какого перепуга она на закладке dbExpress?


    а хрен его знает, но если наведёшь на него мышку, увидишь, что он в пакете dcl-dbx-cds
    CDS - это ClientDataSet, MIDAS, тот ещё мега-комбайн
    а в SDS поверх CDS навернули ещё каких-то рюшек...

    Ну, собственно говоря, главное что навернули - это навигацию по записям вперёд-назад, потому что у Firebird большинство запросов - однонаправленные. Видимо, это была основная цель, не перетаскивать в SQLQuery буферизацию из например TBDEDataSet, а просто сделать поверх.
    12 авг 19, 13:04    [21947077]     Ответить | Цитировать Сообщить модератору
     Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
    Arioch
    Member

    Откуда:
    Сообщений: 10967
    Симонов Денис
    Arioch
    Забавно, т.е. чтение BLOB выполняется как почему-то два BLR-запроса


    не обязательно 2 может и больше. Сначала открытие блоба, а потом посегментное чтение. сегментов может быть больше чем 1.


    Ещё забавнее, что чтение блобов было хотя и из ДРУГОЙ транзакции, но из ВЛОЖЕННОЙ (или параллельной), т.е. вообще говоря сами-то блобы должны были существовать, потому что создавшая их транзакция не закрывалась!

    Т.е. тут похоже дело не в том, что временные блобы уничтожались, а в том, что к ним доступа не было!
    Но поскольку такой ошибки не было предусмотрено - выдавалась Invalid BLOB id....

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

    Тут ещё ньюанс, что в dbx3/delphi2006 были параллельные транзакции, а dbx4/xe2 только вложенные в виде стека.... Т.е. с точки зрение "верхнего уровня" dbx - вторичные транзакции возможно должны были наследовать права доступа от родительской? хотя х.з. что там авторы dbx4 думали в этот момент.


    Dimitry Sibiryakov
    Аффтар, проверил бы ты это поведение на четвёрке. Туда, кажется, приняли мой патч по
    предотвращению преждевременного удаления блобов.


    интересно, а как ты формулируешь "преждевременное" ?

    поскольку reference counting надёжно протащить из FB engine аж в недра аппликухи, хрен знает на чём написанной, в общем виде нельзя - то тут выбор между Сциллой и Харибдой, откуда чаще прилетает.

    Ну и да, проверить поведение - открой ссылочку на трекер и возьми готовый EXE, запусти и нажми кнопку
    Таки проще, чем мне искать FB4, ставить его, разбираться как там пользователей создают и т.д.
    12 авг 19, 13:13    [21947089]     Ответить | Цитировать Сообщить модератору
     Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
    Arioch
    Member

    Откуда:
    Сообщений: 10967
    Basil A. Sidorov
    Arioch
    а что при этом убивается когда-то присущая IB/FB предсказуемость и лёгкость в администрировании неподготовленными пользователями - так и постгресс с ней
    FB версий от 1.5 до 3.0 администрируется совершенно одинаково.
    Да, админ может быть не в курсе каких-то фичей FB, ну так админу это и не требуется.


    Смешно. Просто почитай в интернете кучу проблем, когда пользователи не могли создать SYSDBA или создавали, но не так, или не там и т.д.

    Или когда вместо отдельного сервера внезапно запускается embedded, потому что в FB3/win теперь совсем не так, как в IB/FB0-1-2/Win
    12 авг 19, 13:15    [21947091]     Ответить | Цитировать Сообщить модератору
     Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
    Arioch
    Member

    Откуда:
    Сообщений: 10967
    Basil A. Sidorov
    Да, админ может быть не в курсе каких-то фичей FB, ну так админу это и не требуется.


    ну и это, представь, что нужно "идиоту на телефоне" в техподдержке сделать исчерпывающее объяснение, как диагностировать и исправлять проблему с "идиотом на телефоне" от клиента.
    12 авг 19, 13:17    [21947096]     Ответить | Цитировать Сообщить модератору
     Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
    Dimitry Sibiryakov
    Member

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

    Arioch
    интересно, а как ты формулируешь "преждевременное" ?

    В том случае, который фиксился - удаление блобов на которые ещё были ссылки в undo log.

    Posted via ActualForum NNTP Server 1.5

    12 авг 19, 13:27    [21947107]     Ответить | Цитировать Сообщить модератору
     Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
    Симонов Денис
    Member

    Откуда: Рязань
    Сообщений: 9831
    Arioch
    Т.е. тут похоже дело не в том, что временные блобы уничтожались, а в том, что к ним доступа не было!
    Но поскольку такой ошибки не было предусмотрено - выдавалась Invalid BLOB id....

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


    насколько я помню отдельная ошибка по поводу прав на чтение временного (и не только) блоба из другой транзакции недавно добавлена в 3.0.4. Ну лучше сразу использовать 3.0.5 потом ещё несколько исправлений после введения такой проверки было
    12 авг 19, 13:29    [21947111]     Ответить | Цитировать Сообщить модератору
     Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
    Arioch
    Member

    Откуда:
    Сообщений: 10967
    Симонов Денис,

    для этого мне нужно сочинять бронебойный метод перехода с FB2.1 с литералами кирилицей в PSQL, который будет работать всегда, а когда не будет - "идиоты на телефоне" у них и у нас смогут без меня это быстро порешать.

    и при этом ещё недопустить ни у кого глюков из-за внезапного embedded (CORE-5004/CORE-5185)
    а на демо-версии - ровно наоборот, гарантировать работу с файлом БД исключительно через embedded без установки standalone сервера и без неожиданных попыток соединиться через отдельный fbserver.exe

    и ещё объяснить всем остальным, зачем я вообще эти проблемы создаю клиентам и нам самим

    ради CORE-4641/CORE-5186 я бы даже попробовал, при прошлом начальстве особенно.
    но и нынешнему я бы сходу привёл несколько случаев проблем клиентов, которые бы сразу исчезли. В основном типа "перенос на новый сервер"

    вот лично с моей колокольни, лишние 50% производительности на терабайтной БД совершенно не имеют значения с беспроблемностью у пользователей класса "бабушка божий одуванчик"
    12 авг 19, 13:38    [21947120]     Ответить | Цитировать Сообщить модератору
     Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
    Arioch
    Member

    Откуда:
    Сообщений: 10967
    Arioch
    не имеют значения с беспроблемностью


    ....сравнительно с беспроблемностью....
    12 авг 19, 13:39    [21947121]     Ответить | Цитировать Сообщить модератору
     Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
    Симонов Денис
    Member

    Откуда: Рязань
    Сообщений: 9831
    Arioch,

    ты чего мне тут плачешься то? Почему ты вообще решил, что твои проблемы прям самые важные. Вот нам как бы хочется повышение производительности на больших БД, да и на средних тоже. Оно и маленьким не помешает если что.

    Arioch
    с беспроблемностью у пользователей класса "бабушка божий одуванчик"


    тебе никто не мешает создать свой инсталятор Firebird в котором сразу будут прописаны нужные параметры в файлах конфигурации, и который будет создавать SYSDBA. Просто распространяй его вместе со своими приложениями или включай его прям в состав инсталятора своего ПО.

    На сим обсуждение этой ерунды здесь заканчиваю, ибо это не имеет абсолютно никакого отношения к теме топика.
    12 авг 19, 13:46    [21947132]     Ответить | Цитировать Сообщить модератору
     Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
    Arioch
    Member

    Откуда:
    Сообщений: 10967
    Симонов Денис,

    потому что для каждого его проблемы - самые важные

    потому что если не "плакаться" - то возникают упрёки "а что ж вы не напоминали" и "да кому вообще это нужно", от вас же самих на первой странице

    так что я не плачусь, я напоминаю и разъясняю
    12 авг 19, 13:51    [21947144]     Ответить | Цитировать Сообщить модератору
     Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
    hvlad
    Member

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

    - нет никаких вложенных тр-ций, никогда не было и не будет
    - время жизни и видимость временного блоба ограниченны тр-цией, в которой он создан
    - временный блоб с blob_id 1 в тр-ции A это совершенно не то же самое, что временный блоб с blob_id 1 в тр-ции B
    - доступ к блобам тут не при чём
    - FB3, FB4 тут не при чём
    - DS как обычно тычет пальцем в небо, даже не вникнув в суть происходящего
    12 авг 19, 13:51    [21947145]     Ответить | Цитировать Сообщить модератору
     Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
    Arioch
    Member

    Откуда:
    Сообщений: 10967
    hvlad
    - временный блоб с blob_id 1 в тр-ции A это совершенно не то же самое, что временный блоб с blob_id 1 в тр-ции B
    - доступ к блобам тут не при чём


    может быть лучше это было бы изменить, чтобы id временных блобов не пересекались?

    именно потому, что они уходят наружу и там с ними аппликухи делают что хотят

    ну и кроме того

    Симонов Денис
    отдельная ошибка по поводу прав на чтение временного (и не только) блоба из другой транзакции недавно добавлена в 3.0.4.


    как она могла быть добавлена, если у двух транзакций пересекающиеся значения хэндлов?
    12 авг 19, 13:55    [21947147]     Ответить | Цитировать Сообщить модератору
     Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
    hvlad
    Member

    Откуда:
    Сообщений: 10531
    Arioch
    hvlad
    - временный блоб с blob_id 1 в тр-ции A это совершенно не то же самое, что временный блоб с blob_id 1 в тр-ции B
    - доступ к блобам тут не при чём


    может быть лучше это было бы изменить, чтобы id временных блобов не пересекались?
    Это не спасёт от кривых приложений, они всегда найдут способ выстрелить себе в ногу.
    Да и с точки зрения юзера ошибка останется той-же - блоб не найден.
    12 авг 19, 14:14    [21947177]     Ответить | Цитировать Сообщить модератору
     Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
    Arioch
    Member

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

    это не спасёт, но поможет их исправить

    бывает API, подталкивающий к труднодиагностируемым ошибкам, а бывает API - подталкивающий к уменьшению количества ошибок, особенно сложных и непонятных. Хотя действительно что так, что так - это будет ошибки клиента API, что он не разобрался и не смог правильно реализовать.

    и да, особенно "с точки зрения пользователя" - потому что даже если пользователь сможет надёжно воспроизвести (не всегда), не факт что возможна поездка разработчкиа к нему или передача всех данных от него.

    навскидку, сделать отдельный "в памяти" генератор для temporary blob id или просто в temporary blob id в старших разрядах хэшировтаь transaction id - не сильно нагрузит сервер, зато поможет распознавать разные ошибки
    12 авг 19, 14:32    [21947192]     Ответить | Цитировать Сообщить модератору
     Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
    Dimitry Sibiryakov
    Member

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

    Arioch
    бывает API, подталкивающий к труднодиагностируемым ошибкам, а бывает API - подталкивающий
    к уменьшению количества ошибок

    Ну ок, давай в isc_blob_open() добавим ещё один параметр - транзакцию и задокументируем,
    что это должна быть та самая транзакция в которой получен blob id. Кому от этого станет лучше?

    Posted via ActualForum NNTP Server 1.5

    12 авг 19, 15:02    [21947222]     Ответить | Цитировать Сообщить модератору
     Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
    Basil A. Sidorov
    Member

    Откуда:
    Сообщений: 9302
    Arioch
    Ну и да, проверить поведение - открой ссылочку на трекер и возьми готовый EXE, запусти и нажми кнопку
    Таки проще, чем мне искать FB4, ставить его, разбираться как там пользователей создают и т.д.
    "Осетра-то урежь".
    Нет желания работать с FB4 - не работай, но не предлагай другим прыгать вокруг твоего комфорта.
    12 авг 19, 15:04    [21947226]     Ответить | Цитировать Сообщить модератору
     Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
    hvlad
    Member

    Откуда:
    Сообщений: 10531
    Dimitry Sibiryakov
    Arioch
    бывает API, подталкивающий к труднодиагностируемым ошибкам, а бывает API - подталкивающий
    к уменьшению количества ошибок

    Ну ок, давай в isc_blob_open() добавим ещё один параметр - транзакцию и задокументируем,
    что это должна быть та самая транзакция в которой получен blob id. Кому от этого станет лучше?
    Она там есть и всегда была
    А вот с документированием в ApiGuide - не густо, тут соглашусь.
    12 авг 19, 15:14    [21947239]     Ответить | Цитировать Сообщить модератору
     Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
    Basil A. Sidorov
    Member

    Откуда:
    Сообщений: 9302
    Arioch
    ну и это, представь, что нужно "идиоту на телефоне" в техподдержке сделать исчерпывающее объяснение, как диагностировать и исправлять проблему с "идиотом на телефоне" от клиента.
    Я, как бы, шесть лет отработал в техподдержке региональной системы.
    Был эпизод, когда лично я, собственными руками, создал проблему для, примерно, 80% пользователей этой системы.
    И ничего, не сломался за оставшийся рабочий день объяснить нескольким десяткам пользователей как им найти, открыть и отредактировать файл настроек, чтобы исправить последствия.
    И не я один - моим коллегам точно также пришлось отвечать на звонки и объяснять, что делать.
    И общаться с первой линией уже чужой техподдержки по проблеме, которую требовалось эскалировать, как минимум на вторую - тоже было и не раз.
    Если "присесть на завалинку", то потрындеть и я могу.
    Поэтому не надо рассказывать о трудной жизни техподдержки - не вы один попадали в "сложные жизненные ситуации".
    12 авг 19, 15:14    [21947240]     Ответить | Цитировать Сообщить модератору
     Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
    Basil A. Sidorov
    Member

    Откуда:
    Сообщений: 9302
    Arioch
    вот лично с моей колокольни, лишние 50% производительности на терабайтной БД совершенно не имеют значения с беспроблемностью у пользователей класса "бабушка божий одуванчик"
    А вот лично у меня - совершенно противоположное мнение. Будем и дальше пиписьками ровняться?
    12 авг 19, 15:16    [21947241]     Ответить | Цитировать Сообщить модератору
     Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
    Dimitry Sibiryakov
    Member

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

    hvlad
    Она там есть и всегда была

    Чёрт, пора опять заказывать запасы таблеток от склероза.

    Posted via ActualForum NNTP Server 1.5

    12 авг 19, 17:04    [21947392]     Ответить | Цитировать Сообщить модератору
     Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
    Arioch
    Member

    Откуда:
    Сообщений: 10967
    Dimitry Sibiryakov
    Ну ок, давай в isc_blob_open() добавим ещё один параметр - транзакцию и задокументируем, что это должна быть та самая транзакция в которой получен blob id. Кому от этого станет лучше?


    не надо, надо просто сделать чтобы ID временных блобов не пересекались между транзакциями с вероятностью 99,999% и это не трудно

    лучше будет разработчикам софта под FB и пользователям этого софта, у которых вместо ошибки "Firebird опять не находит BLOB, с ним такое бывает" будет четкая ошибка одного из трех выше описанных видов.

    почитайте что ли какое-нибудь сравнение ошибок в GCC и CLang именно в разрезе понятности "а что случилось и теперь делать-то?". Разработчики CLang, в отличие от разработчиков GCC, посчитали, что понятные сообщения об ошибках - это хорошо. Возможно, они ошибаются.


    Basil A. Sidorov
    Нет желания работать с FB4 - не работай


    вообще-то это МНЕ предлагали "работать с FB4", а я - отказался. Так что эта твоя филиппика - к предыдущему оратору.

    Basil A. Sidorov
    Был эпизод, когда лично я, собственными руками, создал проблему для, примерно, 80% пользователей этой системы. И ничего, не сломался за оставшийся рабочий день...


    Т.е. ты предлагаешь мне намеренно создать проблему? Или к чему это было?
    Причём проблему отложенную на случайный от нас не зависящий момент, не "мой рабочий день", а - и я про это писал - "решать в моё отсутствие"/
    Т.е. твой "контр-пример" - он вообще не о том.

    Basil A. Sidorov
    не вы один попадали в "сложные жизненные ситуации".


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

    Basil A. Sidorov
    А вот лично у меня - совершенно противоположное мнение


    Поэтому я и говорю, что у разработчиков FB цель - переораклить оракл, а "беспроблемное существование программ малого и среднего размера" когда-то бывшее нишей IB и причиной его распространения их перестало занимать. Ты это сейчас просто подтвердил. Это для меня не новость.
    27 авг 19, 13:00    [21958256]     Ответить | Цитировать Сообщить модератору
     Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
    Симонов Денис
    Member

    Откуда: Рязань
    Сообщений: 9831
    Arioch
    не надо, надо просто сделать чтобы ID временных блобов не пересекались между транзакциями с вероятностью 99,999% и это не трудно

    лучше будет разработчикам софта под FB и пользователям этого софта, у которых вместо ошибки "Firebird опять не находит BLOB, с ним такое бывает" будет четкая ошибка одного из трех выше описанных видов.


    перестань уже нести чушь. Чтобы они не пересекались надо правильно писать приложение. Если ты получил ID блоба в своей программе ты можешь сделать с ним всё что угодно, например попытаться открыть не в той транзакции. Как firebird может тебе в этом помешать?
    27 авг 19, 13:13    [21958263]     Ответить | Цитировать Сообщить модератору
     Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
    Dimitry Sibiryakov
    Member

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

    Симонов Денис
    Чтобы они не пересекались надо правильно писать приложение.

    Так он как раз и гнёт линию, что разработчики приложений - прирождённые рукожопы, но
    "трогать их не моги". Непонятно только почему он для разработчиков Firebird делает
    исключение. Очевидно, двойные стандарты, лицемерие и т.п.

    Posted via ActualForum NNTP Server 1.5

    27 авг 19, 13:16    [21958266]     Ответить | Цитировать Сообщить модератору
     Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
    Arioch
    Member

    Откуда:
    Сообщений: 10967
    Симонов Денис,

    он может не помешать, а помочь - определить конкретный тип ситуации и через это - какие именно проблеммные места искать в приложении и и библиотеках



    Dimitry Sibiryakov,

    Ну т.е. Firebird - это такая СУБД для 1% самых лучших разработчиков, и за эту привилегию надо держаться, и не упрощать жизнь 99% других разработчиков, чтобы они не полезли своими грязными лапами к элитной жар-птице

    вполне чёткое позиционирование, респекут и уважуха
    27 авг 19, 13:40    [21958287]     Ответить | Цитировать Сообщить модератору
     Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
    Dimitry Sibiryakov
    Member

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

    Arioch
    за эту привилегию надо держаться, и не упрощать жизнь 99% других разработчиков

    Упрощай, никто не против. Просто прими за данность, что не боги горшки обжигают и
    разработчики Firebird ничем не лучше остальных.

    Posted via ActualForum NNTP Server 1.5

    27 авг 19, 13:44    [21958291]     Ответить | Цитировать Сообщить модератору
     Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
    Arioch
    Member

    Откуда:
    Сообщений: 10967
    Dimitry Sibiryakov,

    ну если бы ты не передёргивал и не придумывал "не моги трогать разработчиков" хотя я всю дорогу говорил про исправление приложение, то и не приходилось бы "упрощать", а точнее контрастно формулировать суть твоего тезиса включая последствия

    вообще говоря, тут надо или трусы или крестик

    либо "никто не против" улучшать сообщения об ошибках FB, чтобы помогать разработчикам приложений, как ты пишешь сейчас.

    либо разработчики приложений "рукожопы", а желание улучшать сообщения об ошибках FB - лицемерие", как ты писал на прошлой странице
    27 авг 19, 13:56    [21958303]     Ответить | Цитировать Сообщить модератору
     Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
    Симонов Денис
    Member

    Откуда: Рязань
    Сообщений: 9831
    Arioch,

    тебе точное сообщение об ошибке никак не поможет. Вот прямо сейчас ты знаешь в чём дело. И как приложение то исправил?
    27 авг 19, 14:01    [21958313]     Ответить | Цитировать Сообщить модератору
     Re: TraceAPI 2.5 - разделить чтение rows и чтение blob'ов в этих rows?  [new]
    Dimitry Sibiryakov
    Member

    Откуда:
    Сообщений: 48163
    Arioch
    я всю дорогу говорил про исправление приложение

    Всю дорогу ты говорил о внесении исправлений в Firebird. Ничего другого не замечается.
    27 авг 19, 14:16    [21958337]     Ответить | Цитировать Сообщить модератору
    Топик располагается на нескольких страницах: 1 2 3      [все]
    Все форумы / Firebird, InterBase Ответить