powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Скорость чтения блобов Firebird 4.0
25 сообщений из 44, страница 1 из 2
Скорость чтения блобов Firebird 4.0
    #40080541
slavyanka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Заметила, что чтение блобов на версии 4.0.0 стало существенно медленнее(может достигать x2 и больше раз). Сначала проявилось при работе с api, затем уже проверила в dbeaver.exe. 30000 записей на 3 версии вычитываются за 35 секунд, на 4 - за 1 мин 17 сек. С простыми типами ухудшения производительности не было.
...
Рейтинг: 0 / 0
Скорость чтения блобов Firebird 4.0
    #40080542
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
покажи код.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Скорость чтения блобов Firebird 4.0
    #40080543
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕМНИП это результат введения проверки прав на чтение блоба.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Скорость чтения блобов Firebird 4.0
    #40080544
slavyanka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий, зачем код?) чтение падает уже при запросе из утилиты работы с бд, правда в ibexpert не смотрела еще
...
Рейтинг: 0 / 0
Скорость чтения блобов Firebird 4.0
    #40080546
slavyanka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov, спасибо. Возможность отменить эту проверку есть?
...
Рейтинг: 0 / 0
Скорость чтения блобов Firebird 4.0
    #40080547
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
28.06.2021 16:14, slavyanka пишет:
> чтение падает уже при запросе из утилиты работы с бд,

засунь её по назначению!
код давай.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Скорость чтения блобов Firebird 4.0
    #40080551
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
ЕМНИП это результат введения проверки прав на чтение блоба.
Ты мерял, или как обычно ?
...
Рейтинг: 0 / 0
Скорость чтения блобов Firebird 4.0
    #40080554
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slavyanka,

я проверю конечно, но для начала ты уверен что блобы в 4.0 и 3.0 одинаковые?
...
Рейтинг: 0 / 0
Скорость чтения блобов Firebird 4.0
    #40080556
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slavyankaчтение падает уже при запросе из утилиты работы с бд
ну ок. тогда нам потребуется:
- версия dbeaver, версия java, версия JayBird при коннекте к ФБ 3.0 и 4.0.
- статистика таблицы с блобами (gstat -r -t TABLENAME) в 3.0 и 4.0
- performance info (reads, fetches) запроса
- отличаются ли конфиги 3.0 и 4.0, и если да, то чем
- ну и наконец (хотя может еще и не всё) - тот же "тест" только на 4.0 с движком от 3.0 (engine12.dll).

p.s. не знаю, как там dbeaver, но компоненты типа FIBPlus, IBX, FireDAC, т.е. НЕ Java и НЕ .Net обычно не вычитывают блобы из таблиц при просто чтении таблицы, потому что это нафиг не надо. Кроме того, у Фб в записи в столбце блоба хранится его ID, и чтобы его вытащить, это делается отдельно от чтения самой записи.
Так что, "чтение блоба" вещь довольно абстрактная. Это или действительно полное вытаскивание блоба на клиента, или его обработка чем-то (функцией) на сервере.
...
Рейтинг: 0 / 0
Скорость чтения блобов Firebird 4.0
    #40080559
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slavyanka
Возможность отменить эту проверку есть?
Иметь системную привилегию SELECT_ANY_OBJECT_IN_DATABASE
...
Рейтинг: 0 / 0
Скорость чтения блобов Firebird 4.0
    #40080621
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slavyanka,

с чем сравнивал? 2.5 или 3.0?
Ибо с 3.0 я не увидел существенной разницы, а по сравнению с 2.5, да медленней
...
Рейтинг: 0 / 0
Скорость чтения блобов Firebird 4.0
    #40080627
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

Однако, это походу дама, сэр.))
...
Рейтинг: 0 / 0
Скорость чтения блобов Firebird 4.0
    #40080645
slavyanka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис, да, блобы одинаковые, сравнивали 3.0.7 и 4.0
...
Рейтинг: 0 / 0
Скорость чтения блобов Firebird 4.0
    #40080654
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slavyanka,

по моим замерам там нет разницы
...
Рейтинг: 0 / 0
Скорость чтения блобов Firebird 4.0
    #40080678
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
где код?!

зы: @#$!
...
Рейтинг: 0 / 0
Скорость чтения блобов Firebird 4.0
    #40080695
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slavyankaда, блобы одинаковые, сравнивали 3.0.7 и 4.0
что и как вы там сравнивали, если вы ничего из запрошенного 22341186 сказать не можете?
Зачем тогда этот топик?
...
Рейтинг: 0 / 0
Скорость чтения блобов Firebird 4.0
    #40080696
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
29.06.2021 13:16, kdv пишет:
> Зачем тогда этот топик?

учитывая очередное пришествие Сима и Рьгла - тупой наброс на вентилятор.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Скорость чтения блобов Firebird 4.0
    #40080714
slavyanka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий, вот код. Изначально вытаскивать из-под своих оболочек долго, буквально взяла example из firebird, прогнала на 100000 записях, итог 630 секунд на 3.0.7 и 855 на 4.0

Код: plaintext
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.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  

#include "example.h"
#include "ibase.h"
#include "Timer.cpp"

isc_db_handle db;
ISC_STATUS status_vector[20];
short dpb_buf_len = 20;
char dpb_buf[] = {
                                isc_dpb_version1,                //версия буфера   
                                isc_dpb_user_name,                //начинается кластер параметра имя пользователя  
                                6,                                 //длина этого параметра 6 байт  
                                'S','Y','S','D','B','A',                //строка имени пользователя  
                                isc_dpb_password,                //начинается кластер пароля пользователя  
                                9,                                 //длина его 9 байт  
                                'm','a','s','t','e','r','k','e','y'        //сам пароль  
};

#define COUNTRYLEN 15
#define CODELEN    5

const char* sel_str = "SELECT FIRST_NAME, PHOTO FROM CH";

/* Blob parameter buffer. */
const char bpb[9] = {1, 2, 2, -4, -1, 1, 2, 1, 0};

int setenv(const char* name, const char* value, int overwrite)
{
    int errcode = 0;
    if (!overwrite) {
        size_t envsize = 0;
        errcode = getenv_s(&envsize, NULL, 0, name);
        if (errcode || envsize) return errcode;
    }
    return _putenv_s(name, value);
}

int main()
{

    setenv("ISC_USER", "sysdba", 0);
    setenv("ISC_PASSWORD", "masterkey", 0);
	
    char                first_name[CODELEN + 2];
    short               flag0 = 0, flag1 = 0;
    ISC_QUAD            blob_id;
    isc_blob_handle     blob_handle = NULL;
    short               blob_seg_len;
    char                blob_segment[65400];
    isc_db_handle       DB = NULL;
    isc_tr_handle       trans = NULL;
    ISC_STATUS_ARRAY    status;
    isc_stmt_handle     stmt = NULL;
    XSQLDA* sqlda;
    long                fetch_stat;
    char                empdb[128];

	
	
    strcpy(empdb, "C:\\test3.fdb");

    if (isc_attach_database(status, 0, empdb, &DB, 0, NULL))
    {
        ERREXIT(status, 1)
    }

    if (isc_start_transaction(status, &trans, 1, &DB, 0, NULL))
    {
        ERREXIT(status, 1)
    }

    /*
     *    Allocate and prepare the select statement.
     */

    if (isc_dsql_allocate_statement(status, &DB, &stmt))
    {
        ERREXIT(status, 1)
    }

    sqlda = (XSQLDA*)malloc(XSQLDA_LENGTH(2));
    sqlda->sqln = 4;
    sqlda->version = 1;

    if (isc_dsql_prepare(status, &trans, &stmt, 0, sel_str, 1, sqlda))
    {
        ERREXIT(status, 1)
    }

    sqlda->sqlvar[0].sqldata = (char*)first_name;
    sqlda->sqlvar[0].sqltype = SQL_TEXT + 1;
    sqlda->sqlvar[0].sqlind = &flag0;

    sqlda->sqlvar[1].sqldata = (char*)&blob_id;
    sqlda->sqlvar[1].sqltype = SQL_BLOB + 1;
    sqlda->sqlvar[1].sqlind = &flag1;

    if (isc_dsql_execute(status, &trans, &stmt, 1, NULL))
    {
        ERREXIT(status, 1)
    }

    /*
     *  Display job descriptions.
     */

    Timer timer;
    timer.start();

    while ((fetch_stat = isc_dsql_fetch(status, &stmt, 1, sqlda)) == 0)
    {
        printf("\nFirst Name: %5s\n", first_name);

        /* Open the blob with the fetched blob_id. */
        if (isc_open_blob2(status, &DB, &trans, &blob_handle, &blob_id, 0, NULL))
        {
            ERREXIT(status, 1)
        }

        /* Get blob segments and their lengths and print each segment. */
        while (isc_get_segment(status, &blob_handle,
            (unsigned short*)&blob_seg_len, sizeof(blob_segment),
            blob_segment) == 0)
            printf("  %*.*s", blob_seg_len, blob_seg_len, blob_segment);

        /* Close the blob.  */
        if (status[1] == isc_segstr_eof)
        {
            if (isc_close_blob(status, &blob_handle))
            {
                ERREXIT(status, 1)
            }
        }
        else
            isc_print_status(status);

        printf("\n");
    }

    timer.stop();

    std::cout << timer.elapsedMilliseconds();

    //std::cout << timer.getCurrDelta();

    if (fetch_stat != 100L)
        isc_print_status(status);

    if (isc_dsql_free_statement(status, &stmt, DSQL_drop))
    {
        ERREXIT(status, 1)
    }

    if (isc_commit_transaction(status, &trans))
    {
        ERREXIT(status, 1)
    }

    if (isc_detach_database(status, &DB))
    {
        ERREXIT(status, 1)
    }

    free(sqlda);

    return 0;
}
...
Рейтинг: 0 / 0
Скорость чтения блобов Firebird 4.0
    #40080720
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slavyanka,

ну, прекрасно, я считаю. Особено вот это
Код: plaintext
1.
    setenv("ISC_USER", "sysdba", 0);
    setenv("ISC_PASSWORD", "masterkey", 0);

метаданных нет, статистики нет, ничего нет. Только какой-то код. Я устал задавать вопросы.
Понятно пока только одно - вы не имеете никакого понятия что такое "тестирование".
...
Рейтинг: 0 / 0
Скорость чтения блобов Firebird 4.0
    #40080739
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slavyanka
Мимопроходящий, вот код. Изначально вытаскивать из-под своих оболочек долго, буквально взяла example из firebird, прогнала на 100000 записях, итог 630 секунд на 3.0.7 и 855 на 4.0

Код: plaintext
1.
2.
3.
4.
5.
/* Blob parameter buffer. */
const char bpb[9] = {1, 2, 2, -4, -1, 1, 2, 1, 0};
. . .
/* Open the blob with the fetched blob_id. */
if (isc_open_blob2(status, &DB, &trans, &blob_handle, &blob_id, 0, NULL))

ахуительно! восхитительно!

не надо нам тут лохматить бабушку! ©
...
Рейтинг: 0 / 0
Скорость чтения блобов Firebird 4.0
    #40080741
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

это фильтр, он тут нафиг не нужен
http://docwiki.embarcadero.com/InterBase/2020/en/Reading_and_Processing_the_Blob_Data

Код: plaintext
1.
2.
3.
4.
5.
isc_open_blob2( status_vector, &db_handle, &trans,
&blob_handle, /* set by this function to refer to the Blob */
&blob_id, /* Blob ID put into out_sqlda by isc_dsql_fetch() */
0, /* BPB length = 0; no filter will be used */
NULL ); /* NULL BPB, since no filter will be used */
...
Рейтинг: 0 / 0
Скорость чтения блобов Firebird 4.0
    #40080743
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv, ты не понял.
человек нам впаривает код с потолка.
я не просто так оставил 2 верхних строчки.
...
Рейтинг: 0 / 0
Скорость чтения блобов Firebird 4.0
    #40080746
slavyanka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий,

это код из примеров firebird, да, убрала фильтр в параметрах, простите уж, что оставила строчку с объявлением. Я считала, что как раз код из примеров - самое то, чтобы на нем проверять базовые функции.
...
Рейтинг: 0 / 0
Скорость чтения блобов Firebird 4.0
    #40080754
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

ЕМНИП это результат введения проверки прав на чтение блоба.


в тройку эта проверка тоже портирована, так что дело не в ней
...
Рейтинг: 0 / 0
Скорость чтения блобов Firebird 4.0
    #40080755
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slavyanka,

какие-то данные будут? 22341186
...
Рейтинг: 0 / 0
25 сообщений из 44, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Скорость чтения блобов Firebird 4.0
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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