Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Производительность работы с типами BLOB / 25 сообщений из 33, страница 1 из 2
09.06.2021, 09:19
    #40076538
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность работы с типами BLOB
Многие разработчики жалуются на производительность при работе с типами BLOB.

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

Я разработал небольшую утилиту, которая позволяет собрать статистику по выбранному BLOB полю и замерить скорость чтения такого BLOB. Естественно не имеет смысла проверять совсем маленькие BLOB поля.

Утилита также умеет преобразовывать сегментированные BLOB в потоковые и перезаписывать сегментированные BLOB сегментами большего размера, однако сейчас эта функциональность отключена.

Если вы хотите узнать насколько эффективно записывает BLOB поля ваше приложение вы можете воспользоваться утилитой выложенной здесь blob_opt

Если кто-то обнаружит, что приложение пишет BLOB не эффективно поделитесь результатами исследования и расскажите какие компоненты доступа вы использовали.

Спасибо.
...
Рейтинг: 0 / 0
09.06.2021, 09:36
    #40076540
CyberMax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность работы с типами BLOB
Скачал, ввел настройки. При нажатии на "Analize" сообщение - "Object reference is Nil.". Что не хватает - непонятно.
...
Рейтинг: 0 / 0
09.06.2021, 09:38
    #40076541
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность работы с типами BLOB
CyberMax,

64-разрядный fbclient в папке с приложением, ну или установленный в системе
...
Рейтинг: 0 / 0
09.06.2021, 12:46
    #40076584
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность работы с типами BLOB
Симонов ДенисПоразмыслив мы пришли к выводу, что производительность чтения BLOB зависит от того каким
образом он был записан.

Влад обычно утверждает, что нет, поскольку сегменты префетчатся в один большой буфер.

Но:
1. Нет префетча первых сегментов при open_blob.
2. Нет префетча при вычерпании буфера на клиенте.
3. У больших блобов не ставится флаг последовательного чтения, что вымывает кэш страниц.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
09.06.2021, 12:57
    #40076589
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность работы с типами BLOB
Dimitry Sibiryakov,

про 2 не понял. На 1 и 3 пункт совершенно точно не влияет как блоб записали.


Dimitry SibiryakovВлад обычно утверждает, что нет, поскольку сегменты префетчатся в один большой буфер.

это да, но это точно влияет на количество вызовов isc_get_segment чтобы полностью загрузить BLOB. Даже если оно по сети читается большим куском, то если блоб загружается в какую нибудь картинку по 100 байт, то это гораздо хуже чем загрузить его туда по 64Кбайт
...
Рейтинг: 0 / 0
09.06.2021, 13:03
    #40076591
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность работы с типами BLOB
Симонов ДенисДаже если оно по сети читается большим куском, то если блоб загружается в какую нибудь
картинку по 100 байт, то это гораздо хуже чем загрузить его туда по 64Кбайт

Зависит от того как оно написано в fbclient. Это же не ядерный вызов чтобы тормозить, а
всего лишь два копирования память-память.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
09.06.2021, 14:01
    #40076613
ggreggory
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность работы с типами BLOB
Симонов Денис

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


Если база после backup/restore, влияет ли на производительность чтения то, каким образом этот BLOB был записан в исходной базе ?
...
Рейтинг: 0 / 0
09.06.2021, 14:04
    #40076614
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность работы с типами BLOB
Симонов Денис,

Запустил, оно выдало много похожих строк на определенную таблицу, типа таких

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Key DB_KEY=x'AF01000063260000';
Key DB_KEY=x'AF01000064260000';
NumSegments: 1; MaxSegmentSize: 603; TotalSize: 603; BlobType: Segmented;

Key DB_KEY=x'AF01000065260000';
NumSegments: 1; MaxSegmentSize: 628; TotalSize: 628; BlobType: Segmented;

Key DB_KEY=x'AF01000066260000';
NumSegments: 1; MaxSegmentSize: 2437; TotalSize: 2437; BlobType: Segmented;

Key DB_KEY=x'AF01000067260000';
NumSegments: 1; MaxSegmentSize: 222; TotalSize: 222; BlobType: Segmented;

Это хорошо или плохо?
...
Рейтинг: 0 / 0
09.06.2021, 14:08
    #40076616
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность работы с типами BLOB
YuRock,

тут всё нормально. Блобы маленькие, они записаны сегментом с размером равным размеру ваших данных.
...
Рейтинг: 0 / 0
09.06.2021, 14:09
    #40076617
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность работы с типами BLOB
ggreggory,

backup/restore не влияет на размер сегментов с которыми был изначально записан BLOB
...
Рейтинг: 0 / 0
09.06.2021, 14:14
    #40076622
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность работы с типами BLOB
кстати, раз пошла такая пьянка, какой сейчас максимально допустимы размер сегмента в 3.0/4.0 ?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
09.06.2021, 14:22
    #40076626
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность работы с типами BLOB
По-прежнему 65535.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
09.06.2021, 14:24
    #40076628
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность работы с типами BLOB
09.06.2021 14:22, Dimitry Sibiryakov пишет:
> По-прежнему 65535.

из-за почему?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
09.06.2021, 14:28
    #40076629
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность работы с типами BLOB
Мимопроходящийиз-за почему?

Из-за двух байт на него.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
09.06.2021, 14:30
    #40076630
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность работы с типами BLOB
09.06.2021 14:28, Dimitry Sibiryakov пишет:
> Из-за двух байт на него.

вопиющий архаизм!
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
09.06.2021, 14:33
    #40076631
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность работы с типами BLOB
Не нравится - используй стрёимные.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
09.06.2021, 14:43
    #40076634
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность работы с типами BLOB
09.06.2021 14:33, Dimitry Sibiryakov пишет:
> Не нравится - используй стрёимные.

похоже, придётся допиливать под это дело библиотеку.
есть где-то референс API на эту тему?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
09.06.2021, 14:48
    #40076635
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность работы с типами BLOB
Мимопроходящийесть где-то референс API на эту тему?

Нет. Если не считать APIGuide от свежих IB где на эту тему два слова.

PS: Как по мне так гораздо забавнее вопрос: что скажет сервер если в CLOB поле с чарсетом
UTF-8 попытаться внести данные из CLOB поля с чарсетом Win1251 и сегментом в 65535.

PPS: И таки да, если сейчас попытаться такое поле прочитать в любой другой кодировке, то
получишь битые символы если заранее не позаботился о правильном их сохранении по сегментам.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
09.06.2021, 14:48
    #40076636
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность работы с типами BLOB
Симонов Денис
YuRock,

тут всё нормально. Блобы маленькие, они записаны сегментом с размером равным размеру ваших данных.
Ну, слава богу))
Это IBX так пишет, по 16кб.
Хотя, конечно, бывают и побольше, и мегабайты...
...
Рейтинг: 0 / 0
09.06.2021, 14:58
    #40076639
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность работы с типами BLOB
Симонов Денис, аппликация 64х?
под 32 нету?

зы: есть у меня БЛОБы метров по 30

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
09.06.2021, 15:05
    #40076642
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность работы с типами BLOB
Мимопроходящийзы: есть у меня БЛОБы метров по 30

Как-то слабо. Найдёшь хотя бы в пару гигабайт - попробуй на нём новую функцию UNICODE_VAL.
"Вот тогда мы и повеселимся." (с)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
09.06.2021, 15:18
    #40076648
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность работы с типами BLOB
Мимопроходящий,

могу собрать вечером.
...
Рейтинг: 0 / 0
09.06.2021, 15:23
    #40076649
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность работы с типами BLOB
09.06.2021 15:18, Симонов Денис пишет:
> могу собрать вечером.

Ок.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
09.06.2021, 16:16
    #40076666
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность работы с типами BLOB
Dimitry Sibiryakov
PS: Как по мне так гораздо забавнее вопрос: что скажет сервер если в CLOB поле с чарсетом
UTF-8 попытаться внести данные из CLOB поля с чарсетом Win1251 и сегментом в 65535.
Проверь.


Dimitry Sibiryakov
И таки да, если сейчас попытаться такое поле прочитать в любой другой кодировке, то
получишь битые символы если заранее не позаботился о правильном их сохранении по сегментам
"Проблема" того же рода, как и при чтении большого файла небольшими частями.
Там есть сегменты ? И как жить дальше ? :'(
...
Рейтинг: 0 / 0
09.06.2021, 16:36
    #40076673
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность работы с типами BLOB
hvladИ как жить дальше ? :'(

Плохо, но, к счастью, недолго. Свой код чтения файла по частям я изменить могу, код
транслитерации прочитанного сегмента в дебрях движка - нет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Производительность работы с типами BLOB / 25 сообщений из 33, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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