powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Долгий первый UPDATE
11 сообщений из 11, страница 1 из 1
Долгий первый UPDATE
    #39509677
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день
Бьюсь над такой задачей - есть утилита импорта документов в базу FB 2.5.3, при импорте идет update таблицы заголовка документов. По логам вижу, что при апдейте данных первого документа время выполнения запросов 2-10 минут, все остальные апдейты проходят на секунды. Таблица большая с кучей триггеров. Как можно это исправить? От автора утилиты получил объяснение, что время уходит на первый prepare, остальные в рамках того же коннекта время на подготовку не тратят. Архитектура Classic.
...
Рейтинг: 0 / 0
Долгий первый UPDATE
    #39509747
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gallemarвремя уходит на первый prepare
небось, еще ФИБы туда данные льют...
...
Рейтинг: 0 / 0
Долгий первый UPDATE
    #39509754
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gallemar,

зачем гадать. Возьми trace и посмотри куда действительно время уходит
...
Рейтинг: 0 / 0
Долгий первый UPDATE
    #39509767
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДокGallemarвремя уходит на первый prepare
небось, еще ФИБы туда данные льют...
Догадливый :) Скажу больше - зачем-то вместо одного update с изменением всех полей сделали на каждое поле отдельный запрос.
...
Рейтинг: 0 / 0
Долгий первый UPDATE
    #39509768
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисGallemar,

зачем гадать. Возьми trace и посмотри куда действительно время уходит
уже всё давно посмотрел. Можно ли ускорить prepare?
...
Рейтинг: 0 / 0
Долгий первый UPDATE
    #39509776
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gallemar,

какой размер таблицы для update?
...
Рейтинг: 0 / 0
Долгий первый UPDATE
    #39509786
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис, 22 млн строк
Код: 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.
CREATE TABLE DOCHEAD (
    ID_DOCHEAD           T_DOC NOT NULL /* T_DOC = INTEGER */,
    SHOPINDEX            T_SHOP_INDEX /* T_SHOP_INDEX = INTEGER NOT NULL */,
    DOCHEAD_FILIALINDEX  T_FILIAL_INDEX NOT NULL /* T_FILIAL_INDEX = INTEGER NOT NULL */,
    DOCKIND              T_DOC_KIND /* T_DOC_KIND = INTEGER NOT NULL */,
    DOCTYPE              T_DOC_TYPE NOT NULL /* T_DOC_TYPE = INTEGER */,
    OPERATION            T_OPERATION /* T_OPERATION = INTEGER NOT NULL */,
    DOCINDEX             T_DOC_INDEX NOT NULL /* T_DOC_INDEX = VARCHAR(10) */,
    DOC_DATE             T_DATE_NULL /* T_DATE_NULL = DATE */,
    DOC_TIME             T_DATE_NULL /* T_DATE_NULL = DATE */,
    EXT_DOCTYPE          T_DOC_TYPE /* T_DOC_TYPE = INTEGER */,
    EXT_DOCINDEX         T_EXT_DOC_INDEX /* T_EXT_DOC_INDEX = VARCHAR(50) */,
    EXT_DOC_DATE         T_DATE_NULL /* T_DATE_NULL = DATE */,
    BASE_DOCHEAD         T_DOC /* T_DOC = INTEGER */,
    CLIENT_INDEX         T_CLIENT_INDEX /* T_CLIENT_INDEX = INTEGER */,
    CLIENT2_INDEX        T_CLIENT_INDEX /* T_CLIENT_INDEX = INTEGER */,
    CLIENT_BANK          T_CLIENT_BANK /* T_CLIENT_BANK = INTEGER */,
    CLIENT2_BANK         T_CLIENT_BANK /* T_CLIENT_BANK = INTEGER */,
    SUBCLIENT_INDEX      T_CLIENT_INDEX /* T_CLIENT_INDEX = INTEGER */,
    SUBCLIENT_BANK       T_CLIENT_BANK /* T_CLIENT_BANK = INTEGER */,
    MANAGER              T_CODES /* T_CODES = INTEGER NOT NULL */,
    DOC_STATE            T_DOC_STATE /* T_DOC_STATE = INTEGER NOT NULL */,
    ACCEPT               T_BOOLEAN NOT NULL /* T_BOOLEAN = CHAR(1) DEFAULT 'F' NOT NULL CHECK (value in ('F','T')) */,
    BOOK                 T_BOOLEAN NOT NULL /* T_BOOLEAN = CHAR(1) DEFAULT 'F' NOT NULL CHECK (value in ('F','T')) */,
    CUR_TYPE             T_CUR_TYPE /* T_CUR_TYPE = VARCHAR(6) */,
    CURS                 T_CURS /* T_CURS = DOUBLE PRECISION DEFAULT 0 NOT NULL */,
    FIXCOUNT             T_NUMBER DEFAULT 0 NOT NULL /* T_NUMBER = INTEGER NOT NULL */,
    TOTALRUB             T_MONEY /* T_MONEY = DOUBLE PRECISION DEFAULT 0 NOT NULL */,
    TOTALCUR             T_MONEY /* T_MONEY = DOUBLE PRECISION DEFAULT 0 NOT NULL */,
    TOTALRUB1            T_MONEY NOT NULL /* T_MONEY = DOUBLE PRECISION DEFAULT 0 NOT NULL */,
    TOTALCUR1            T_MONEY NOT NULL /* T_MONEY = DOUBLE PRECISION DEFAULT 0 NOT NULL */,
    PAYMENTRUB           T_MONEY /* T_MONEY = DOUBLE PRECISION DEFAULT 0 NOT NULL */,
    PAYMENTCUR           T_MONEY /* T_MONEY = DOUBLE PRECISION DEFAULT 0 NOT NULL */,
    NOPAY_QUANTITY       T_QUANTITY NOT NULL /* T_QUANTITY = DOUBLE PRECISION DEFAULT 0 NOT NULL */,
    NOLINK_QUANTITY      T_QUANTITY NOT NULL /* T_QUANTITY = DOUBLE PRECISION DEFAULT 0 NOT NULL */,
    NEEDPAY_QUANTITY     T_QUANTITY /* T_QUANTITY = DOUBLE PRECISION DEFAULT 0 NOT NULL */,
    NEEDPAY_RUB          T_MONEY /* T_MONEY = DOUBLE PRECISION DEFAULT 0 NOT NULL */,
    NEEDPAY_CUR          T_MONEY /* T_MONEY = DOUBLE PRECISION DEFAULT 0 NOT NULL */,
    COMMENT              T_COMMENT /* T_COMMENT = VARCHAR(255) */,
    ADD_PARAM1           T_ADD_PARAM /* T_ADD_PARAM = VARCHAR(80) */,
    ADD_PARAM2           T_ADD_PARAM /* T_ADD_PARAM = VARCHAR(80) */,
    ADD_PARAM3           T_ADD_PARAM /* T_ADD_PARAM = VARCHAR(80) */,
    ADD_PARAM4           T_ADD_PARAM /* T_ADD_PARAM = VARCHAR(80) */,
    ADD_PARAM5           T_ADD_PARAM /* T_ADD_PARAM = VARCHAR(80) */,
    ADD_PARAM6           T_ADD_PARAM COLLATE PXW_CYRL /* T_ADD_PARAM = VARCHAR(80) */,
    ADD_PARAM7           T_ADD_PARAM COLLATE PXW_CYRL /* T_ADD_PARAM = VARCHAR(80) */,
    ADD_PARAM8           T_ADD_PARAM COLLATE PXW_CYRL /* T_ADD_PARAM = VARCHAR(80) */,
    ADD_PARAM9           T_ADD_PARAM COLLATE PXW_CYRL /* T_ADD_PARAM = VARCHAR(80) */,
    ADD_PARAM10          T_ADD_PARAM COLLATE PXW_CYRL /* T_ADD_PARAM = VARCHAR(80) */,
    MODDATE              T_DATE NOT NULL /* T_DATE = DATE NOT NULL */,
    MODMANAGER           T_CODES NOT NULL /* T_CODES = INTEGER NOT NULL */,
    ATTACH               T_ATTACH /* T_ATTACH = SMALLINT DEFAULT 1 NOT NULL */,
    ACCEPT_FLAG          T_ACCEPT_FLAG /* T_ACCEPT_FLAG = INTEGER DEFAULT 0 NOT NULL */,
    PROLON               T_BOOLEAN /* T_BOOLEAN = CHAR(1) DEFAULT 'F' NOT NULL CHECK (value in ('F','T')) */,
    STATUS               T_FID /* T_FID = INTEGER */,
    POST_STATUS          T_INT_VALUE /* T_INT_VALUE = INTEGER */,
    REGISTERED           T_CASH_REESTR /* T_CASH_REESTR = INTEGER */
);

...
Рейтинг: 0 / 0
Долгий первый UPDATE
    #39509791
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пальцем в небо.
При 22млн время при первом запросе может уходить на зачитывание индекса или таблицы в кэш.
Можно попробовать перед запуском утилиты импорта предварительно самому "разогреть" эту таблицу и индексы.
...
Рейтинг: 0 / 0
Долгий первый UPDATE
    #39509793
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и раз на таблице куча триггеров - посмотреть чего они там трогают. Может быть там тоже нужно кэш разогревать.

Если есть возможность протестить не на боевой базе - поотключать все триггеры, посмотреть будет ли тормозить препаре.
...
Рейтинг: 0 / 0
Долгий первый UPDATE
    #39509820
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GallemarДогадливый :) Скажу больше - зачем-то вместо одного update с изменением всех полей сделали на каждое поле отдельный запрос.
у ФИБов из-за их "неестественного интеллекта" (©, МП) большая куча времени может уходить на чтение различных метаданных. Для импорта данных в базу, имхо, лучше использовать TFIBBatch.

И, наверное, про индексы кто-нибудь сведущий должен упомянуть :)
...
Рейтинг: 0 / 0
Долгий первый UPDATE
    #39509937
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraksНу и раз на таблице куча триггеров - посмотреть чего они там трогают. Может быть там тоже нужно кэш разогревать.

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

Помнится, на таблицах с ветвистыми триггерными деревьями на препаре вся сила уходила на проверку прав на всю кучу затронутых объектов.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Долгий первый UPDATE
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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