powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Пухнет база от BLOB
36 сообщений из 36, показаны все 2 страниц
Пухнет база от BLOB
    #39524699
Фотография PEAKTOP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вводная:

есть ABS (Automated Bank System), в которую кроме всего прочего складываются фотографии клиентов, а также скан-копии их паспортов.
дабы не засирать основную базу, содержащую Financial Data, создана отдельная база для BLOB. при этом, чтобы обмануть клиентское приложение, складирование в отдельную базу фоток происходит в триггерах через Cross-Database запросы.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
-- картинки храню так:
CREATE DOMAIN DOMN$BLOB_IMAGE AS BLOB SUB_TYPE 0 SEGMENT SIZE [PAGE_SIZE базы];


-- эта таблица фоток, есть в обеих базах
CREATE TABLE TABL$R_CS_PHOTO (
    CS_ID        DOMN$INTEGER_ID,  -- код клиента
    ID           DOMN$INTEGER_ID,  -- код фото, строго триггером через GEN_ID
    NAME         DOMN$PSTRING, -- примечание
    FLAG_DELETE  DOMN$BOOLEAN, -- пометка на удаление
    DATE_COMMIT  DOMN$DATETIME, -- дата/время = TIMESTAMP
    PHOTO        DOMN$BLOB_IMAGE  -- картинка
);


-- флаг в базе данных, что нужно складировать фото во внешнюю базу
CREATE GENERATOR GENR$R_CS_PHOTO_EXTERNAL;


-- далее в основной базе идёт cross-database запрос
CREATE OR ALTER TRIGGER TRIG$R_CS_PHOTO_BIU_240 FOR TABL$R_CS_PHOTO
ACTIVE BEFORE INSERT OR UPDATE POSITION 240
AS
  DECLARE VARIABLE P_DB_BLOB  TYPE OF COLUMN TABL$R_FILIALS.DATABASE_NAME_REMOTE;
  DECLARE VARIABLE P_SQL_STMT TYPE OF COLUMN TABL$J_4.DOCSTR;
BEGIN
  IF(GEN_ID(GENR$R_CS_PHOTO_EXTERNAL, 0) <> 1)THEN EXIT;

  SELECT FIRST 1 P.DATABASE_PATH FROM PROC$_DB_PATH_BLOB P INTO :P_DB_BLOB;
  IF(TRIM(:P_DB_BLOB) = '')THEN EXIT;

  IF(NEW.PHOTO IS NULL)THEN
    BEGIN
    P_SQL_STMT =
      'UPDATE OR INSERT INTO TABL$R_CS_PHOTO (CS_ID, ID, NAME, FLAG_DELETE, DATE_COMMIT) '||
      '  VALUES (?Q_CS_ID, ?Q_ID, ?Q_NAME, ?Q_FLAG_DELETE, ?Q_DATE_COMMIT) '||
      '  MATCHING(ID) ';
    EXECUTE STATEMENT (:P_SQL_STMT)(
       Q_CS_ID       := NEW.CS_ID
      ,Q_ID          := NEW.ID
      ,Q_NAME        := NEW.NAME
      ,Q_FLAG_DELETE := NEW.FLAG_DELETE
      ,Q_DATE_COMMIT := NEW.DATE_COMMIT
    )ON EXTERNAL DATA SOURCE :P_DB_BLOB AS USER 'SYSDBA' PASSWORD 'masterkey';
    END
   ELSE
    BEGIN
    P_SQL_STMT =
      'UPDATE OR INSERT INTO TABL$R_CS_PHOTO (CS_ID, ID, NAME, FLAG_DELETE, DATE_COMMIT, PHOTO) '||
      '  VALUES (?Q_CS_ID, ?Q_ID, ?Q_NAME, ?Q_FLAG_DELETE, ?Q_DATE_COMMIT, ?Q_PHOTO) '||
      '  MATCHING(ID) ';
    EXECUTE STATEMENT (:P_SQL_STMT)(
       Q_CS_ID       := NEW.CS_ID
      ,Q_ID          := NEW.ID
      ,Q_NAME        := NEW.NAME
      ,Q_FLAG_DELETE := NEW.FLAG_DELETE
      ,Q_DATE_COMMIT := NEW.DATE_COMMIT
      ,Q_PHOTO       := NEW.PHOTO
    )ON EXTERNAL DATA SOURCE :P_DB_BLOB AS USER 'SYSDBA' PASSWORD 'masterkey';
    NEW.PHOTO = NULL;
    END
END



описание:
я на уровне триггеров перехватываю BLOB, скирдую его в отдельную базу, а в основной за-NULL-яю.

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

фактическое поведение:
база всё равно пухнет с очень большой скоростью.
вот, за неделю на отделении оно распухло до 2,5Гб файл базы.
обыкновенный backup-restore привёл базу в нормальное состояние 403 Мб.

вопрос:
я так понял, что моё решение складывать фотки в отдельную базу для данного вопроса (роста файла БД) - не поможет?
...
Рейтинг: 0 / 0
Пухнет база от BLOB
    #39524703
Фотография PEAKTOP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
уточню вопрос:
получается, что удалённые страницы Firebird повторно не использует, если позволяет место вместить данные?
он всё равно захватывает новые?
...
Рейтинг: 0 / 0
Пухнет база от BLOB
    #39524710
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не проверял, но такое впечатление, что присваивание NULL в блоб-поле в триггере не приводит к физ. удалению блоба.
...
Рейтинг: 0 / 0
Пухнет база от BLOB
    #39524713
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можешь сделать валидацию такой распухшей БД ?
...
Рейтинг: 0 / 0
Пухнет база от BLOB
    #39524766
Фотография PEAKTOP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladМожешь сделать валидацию такой распухшей БД ?

gfix.exe -validate ...... >1.log
gfix.exe -validate -full .....>full.log

выдают пустые файлы. в консоль тоже ничего не пишут.

версия 2.5.7.27050, собирал сам стандартным BAT "искаропки" при помощи M$ Visual Studio 2010
...
Рейтинг: 0 / 0
Пухнет база от BLOB
    #39524799
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PEAKTOPвыдают пустые файлы.

firebird.log читай.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Пухнет база от BLOB
    #39524836
Фотография PEAKTOP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

а там вообще ничего нет, кроме стандартной socket-ошибки
Код: plaintext
1.
2.
  
  10054 unable to complete network request to <имя локальной машины>
чего-то стабильно возникающей раз в сутки где-то в 18:00..18:30.
я на неё забил.


больше - ничего.

---------
а грузят фото в базу постоянно с 07:00 до 19:00.
...
Рейтинг: 0 / 0
Пухнет база от BLOB
    #39524910
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PEAKTOPбольше - ничего.Странно.
Я чуть позже попробую воспризвести.
...
Рейтинг: 0 / 0
Пухнет база от BLOB
    #39525747
Фотография PEAKTOP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ещё один пример в студию.

итак, раньше мы анализировали базу данных удалённого "Отделения".
кроме всего прочего, есть ещё и "ГлавнаяБаза", являющаяся алгебраической суммой баз "Отделений".

через Cross-Database запросы в "ГлавнуюБазу" планировщик заданий через BAT+isql по таймеру затягивает данные со всех удалённых "Отделений", в том числе, и фотографии клиентов.

аналогично реализован механизм хранения фотографий в отдельной базе данных, т.е. рядом с файлом "ГлавнаяБаза.FDB" лежит монстр "ГлавнаяБаза_BLOB.FDB" гигов на 100.

штатный размер файла "ГлавнаяБаза.FDB" порядка 4 ГБ.
после недели работы файл распух до 8ГБ.
обыкновенный backup-restore возвращает всё на место, размер снова порядка 4 ГБ.

---
т.е. по ходу получается, что страницы за-NULL-енного БЛОБа ядром не помечаются, как удалённые.
или ядро не хочет почему-то их потом повторно использовать.
...
Рейтинг: 0 / 0
Пухнет база от BLOB
    #39525763
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а утечки хэндлов на второй БД не может быть ?
есть какие-нибудь утилиты, чтобы посмотреть сколько активных BLOB HANDLE выделено сервером ?
может быть там клиент не закрывает транзакции или делает update or insert .... RETURNING BLOB_COLUMN ?

ну и, соотв, если ПЕРЕЗАПУСТИТЬ службу Firebird, отвечающую за БД, и натравить на эту БД / эти таблицы свиртуальными БЛОБами sweep?
...
Рейтинг: 0 / 0
Пухнет база от BLOB
    #39525764
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochа утечки хэндлов на второй БД не может быть ?

на первой, конечно
...
Рейтинг: 0 / 0
Пухнет база от BLOB
    #39525772
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PEAKTOP,

пиши, наверное, в трекер. С простым примером - было бы идеально.
...
Рейтинг: 0 / 0
Пухнет база от BLOB
    #39525781
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пока что могу только посоветовать, как это обойти.
Или и сам знаешь ? :)
...
Рейтинг: 0 / 0
Пухнет база от BLOB
    #39526920
Фотография PEAKTOP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladПока что могу только посоветовать, как это обойти.
Или и сам знаешь ? :)

да на фиг оно надо ещё этой фигнёй заморачиваться.

в 02:00 робот теперь делает не только backup, но и restore.
пока так.

а там, дальше - "или ишак помрёт, или падишах". =)
...
Рейтинг: 0 / 0
Пухнет база от BLOB
    #39526923
Фотография PEAKTOP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladпиши, наверное, в трекер. С простым примером - было бы идеально.

хорошо, пошёл в трекер.
простой пример, наверное, не получиться, придётся привести полный DDL-SQL, как было написано выше.
...
Рейтинг: 0 / 0
Пухнет база от BLOB
    #39526998
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PEAKTOPя на уровне триггеров перехватываю BLOB, скирдую его в отдельную базу, а в основной за-NULL-яю.
я бы советовал перечитать
http://www.ibase.ru/dbgrowth/
...
Рейтинг: 0 / 0
Пухнет база от BLOB
    #39527045
Фотография PEAKTOP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
читал когда-то.

ИМХО, статья актуальная, но несколько неполная.
я бы добавил (чисто из практики) туда нулевой пункт:

0.Смотреть механизм логгирования!!!адынадын

т.е. если в базе ручками, скриптом или тулзой наколотили триггеров вроде
Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE OR ALTER TRIGGER TRG$MY_TABLE_ADIU_255 FOR MY_TABLE
ACTIVE AFTER INSERT OR UPDATE OR DELETE POSITION 255
AS
BEGIN
  INSERT INTO MY_LOG_TABLE( <FIELDS> )
    VALUES( <VALUES> );
END


нужно задаться вопросом: а не было ли массового UPDATE какой-нибудь мега-таблицы?

практически в 99% случаев была какая-то реструктуризация БД (добавили поле и решили инициализировать), а логгирование отключить забыли.
...
Рейтинг: 0 / 0
Пухнет база от BLOB
    #39527077
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PEAKTOP,

в статье речь не про разовые случаи, на которые можно наплевать. А про постоянный рост БД из-за временных блобов.
...
Рейтинг: 0 / 0
Пухнет база от BLOB
    #39527158
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvА про постоянный рост БД из-за временных блобов.

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

А реально - похоже, что в FB где-то пропустили работу со счетчиками ссылок в BLOB handle.
Как хорошо в Delphi, где это работой компилятор занимается
...
Рейтинг: 0 / 0
Пухнет база от BLOB
    #39527162
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochА реально - похоже, что в FB где-то пропустили работу со счетчиками ссылок в BLOB handle.

Нет никакого счётчика ссылок.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Пухнет база от BLOB
    #39527169
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochФормально, они у него не должны плодиться, потому что наружу из триггера они не уходят
что значит "формально"? У него в триггер приезжает содержимое записи, с блобом. Блоб не в воздухе же существует, он уже записан как временный. Ну присвоили ему null в триггере, и что? Если блоб временный, так он удаляется или при закрытии транзакции, или при закрытии коннекта.

Кстати, воспроизводимый пример можно было бы легко сделать. В смысле, сделать зануление блоба в триггере, а update-ом пихать туда постоянно килобайт по 10-20. Ну и посмотреть, когда пухнет, и когда освобождается.
...
Рейтинг: 0 / 0
Пухнет база от BLOB
    #39527847
Сисдба Мастеркеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Пухнет база от BLOB
    #39527898
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сисдба Мастеркеевич 12623305 О как бывает !
...
Рейтинг: 0 / 0
Пухнет база от BLOB
    #39527928
Guest7777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hvladСисдба Мастеркеевич 12623305 О как бывает !
Вторая пятилетка ("работе в эту сторону") т.е. уже пошла. :D
...
Рейтинг: 0 / 0
Пухнет база от BLOB
    #39527939
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Guest7777,

не вижу этого в трекере
...
Рейтинг: 0 / 0
Пухнет база от BLOB
    #39528066
Сисдба Мастеркеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladне вижу этого в трекере
Если честно, тогда убрали из триггеров, проблема ушла. Потом забыл вобще о проблеме.
Да и к тому же сам hvlad написал "будем искать" :) Про трекер я даже и не подумал.

Если что, Микросекунда - это был я.
...
Рейтинг: 0 / 0
Пухнет база от BLOB
    #39528100
Guest7777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сисдба Мастеркеевич,

Добавь хотя бы сейчас, не сочти за труд.
...
Рейтинг: 0 / 0
Пухнет база от BLOB
    #39528104
Фотография PEAKTOP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladпиши, наверное, в трекер. С простым примером - было бы идеально.

в трекер, так в трекер.
CORE-5625

Модератор: Давай всё же без 5-го размера обойдёмся
...
Рейтинг: 0 / 0
Пухнет база от BLOB
    #39528189
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сисдба МастеркеевичЕсли честно, тогда убрали из триггеров, проблема ушла. Потом забыл вобще о проблеме.
Да и к тому же сам hvlad написал "будем искать" :)Значит не нашёл, так тоже бывает

Проблема вылезла второй раз за пять лет, что сказать...
это не значит, что её не нужно решать, кстати :)

PEAKTOPв трекер, так в трекер.
CORE-5625 Теперь не забудется, спасибо
...
Рейтинг: 0 / 0
Пухнет база от BLOB
    #39528471
Hommer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PEAKTOP CORE-5625
У кого-нибудь получилось прочитать?
...
Рейтинг: 0 / 0
Пухнет база от BLOB
    #39528487
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
аффтар зазря задрал Security Level, простые смертные читать не могут :-)
...
Рейтинг: 0 / 0
Пухнет база от BLOB
    #39528545
Hommer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dimitrаффтар зазря задрал Security Level, простые смертные читать не могут :-)
Аутентифицированные смертные тоже. Его и в списке тикетов нет.
...
Рейтинг: 0 / 0
Пухнет база от BLOB
    #39528550
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hommer,

да это он поставил Security Level только для админов трекера или разработчиков. Надо было None оставлять, если там ничего секретного нет
...
Рейтинг: 0 / 0
Пухнет база от BLOB
    #39528575
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Видимо, попросил чего-то неприличного.
...
Рейтинг: 0 / 0
Пухнет база от BLOB
    #39529235
Фотография PEAKTOP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrаффтар зазря задрал Security Level, простые смертные читать не могут :-)
WildSeryВидимо, попросил чего-то неприличного.

и сразу же начали подкалывать.

да, лоханулся я с SecurityLevel, чего-то попутал его с AssignedTo.
да, на те же грабли уже во второй раз (первый раз было, когда я тут собирал подписи на свою хотелку CORE-5581 ).

зато я в трекер по пустякам всякую *** не пишу, а только после обсуждения здесь и только после того, как об этом прямо скажут hvlad или dimitr .
...
Рейтинг: 0 / 0
Пухнет база от BLOB
    #39531355
rdb_support
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Безотносительно починки бага в ФБ могу предложить автору темы попробовать альтернативный способ организации работы.
В Ред Базе Данных (2.5 и 2.6) есть функционал по хранению блобов в отдельных внешних файлах.
Для этого там реализованы встроенные функции:
create_file, read_file, delete_file
которые позволяют сохранять содержимое блоб-полей в отдельные файлы, считывать их и удалять файлы с диска.
Также есть дополнительный конфигурационный файл directories.conf, в котором настраиваются алиасы для каталогов, где будут хранится файлы. Эти алиасы могут использоваться при вызове функций для работы с внешними файлами. Возможна настройка произвольного количества каталогов для каждой БД на сервере.
Краткое описание функций есть в doc/sql.extensions/README.builtin_functions.txt каталога установки Ред Базы.
...
Рейтинг: 0 / 0
36 сообщений из 36, показаны все 2 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Пухнет база от BLOB
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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