|
Медленно работает FireBird
|
|||
---|---|---|---|
#18+
MBlack, А чего здесь проверять, если всю таблицу тащишь? В принципе, всё нормально. Покажи DDL таблицы Orders, будет хоть что обсуждать. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2017, 12:44 |
|
Медленно работает FireBird
|
|||
---|---|---|---|
#18+
MBlackЭто статистика сделанная с помощью IbExpert Вот жеж упёртое создание... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2017, 13:26 |
|
Медленно работает FireBird
|
|||
---|---|---|---|
#18+
MBlackплан запроса ("select * from orders"), там 12 с лишним тыс. записей PLAN (ORDERS NATURAL) У тебя нет условия выборки, ты просто вытягиваешь всю таблицу. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2017, 13:27 |
|
Медленно работает FireBird
|
|||
---|---|---|---|
#18+
А может запись 100кило. 1 Гиг качнуть на слабой сетке... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2017, 15:16 |
|
Медленно работает FireBird
|
|||
---|---|---|---|
#18+
Товарищи я жен написал вам что в программе не тащу все данные, я для примера написал. А это план запроса, который тащит определенные данные, в основном как я делаю в программе, даты поставлены, чисто для примера select * from orders where orderdate >= '01.05.2017' and orderdate <= '20.05.2017' План: Plan PLAN (ORDERS NATURAL) ------ Performance info ------ Prepare time = 421ms Execute time = 78ms Avg fetch time = 2,79 ms Current memory = 36 793 516 Max memory = 37 296 776 Memory buffers = 2 048 Reads from disk to cache = 0 Writes from cache to disk = 2 Fetches from cache = 0 DDL - таблицы orders SET SQL DIALECT 3; /******************************************************************************/ /*** Tables ***/ /******************************************************************************/ CREATE TABLE ORDERS ( ID DINT_NOT_NULL NOT NULL /* DINT_NOT_NULL = INTEGER NOT NULL */, ORDERNUM VARCHAR(50), ORDCOUNT SMALLINT DEFAULT 0, CUSTOMERID DINT_NOT_NULL /* DINT_NOT_NULL = INTEGER NOT NULL */, OPERATORID DINT_NOT_NULL /* DINT_NOT_NULL = INTEGER NOT NULL */, ORDERDATE DDATE /* DDATE = DATE */, ORDERTIME DTIME /* DTIME = TIME */, DELIVERYADR VARCHAR(250), ITEMKCH DINT_NULL /* DINT_NULL = INTEGER */, PKGONE SMALLINT, ORDERSTATUS SMALLINT DEFAULT 1, CURRDELAVERY DMONEY DEFAULT 0 /* DMONEY = DECIMAL(15,2) */, ODISCONT DMONEY DEFAULT 0 /* DMONEY = DECIMAL(15,2) */, DESCORDER DTEXT /* DTEXT = BLOB SUB_TYPE 1 SEGMENT SIZE 80 */, MOREINFORDER DTEXT /* DTEXT = BLOB SUB_TYPE 1 SEGMENT SIZE 80 */, APRINT SMALLINT DEFAULT 0 ); /******************************************************************************/ /*** Primary keys ***/ /******************************************************************************/ ALTER TABLE ORDERS ADD CONSTRAINT PK_ORDERS PRIMARY KEY (ID); /******************************************************************************/ /*** Indices ***/ /******************************************************************************/ CREATE INDEX ORDERS_IDX1 ON ORDERS (CUSTOMERID); CREATE INDEX ORDERS_IDX2 ON ORDERS (ORDERSTATUS); CREATE INDEX ORDERS_IDX3 ON ORDERS (ORDERNUM); /******************************************************************************/ /*** Triggers ***/ /******************************************************************************/ SET TERM ^ ; /******************************************************************************/ /*** Triggers for tables ***/ /******************************************************************************/ /* Trigger: ORDERS_BD0 */ CREATE OR ALTER TRIGGER ORDERS_BD0 FOR ORDERS ACTIVE BEFORE DELETE POSITION 0 AS declare variable cRec integer; begin /* Trigger text */ select count(id) from ordersdetails where ordid = old.id into :cRec; if (:cRec > 0) then exception not_delete_orders; end ^ SET TERM ; ^ ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2017, 18:49 |
|
Медленно работает FireBird
|
|||
---|---|---|---|
#18+
MBlack, при таком плане сервер выдает ибэксперту только те записи, которые влезают в его грид. Поэтому если ты хочешь проверить скорость выборки ВСЕХ записей, возвращаемых запросом, тебе надо жать не кнопку execute, а кнопку Fetch All (два зеленых треугольника). http://www.ibase.ru/client/ ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2017, 19:03 |
|
Медленно работает FireBird
|
|||
---|---|---|---|
#18+
MBlack, Во-первых, даже если Вы рассматриваете последний запрос, то у Вас фильтр по orderdate, а индекса по orderdate у Вас нет, сразу получаете проход по натуралу. Во-вторых, у Вас, я вижу, BLOB'ы. Что в них? Гигабайты? Вы покажите нам статистику вот по такому, например, запросу: Код: sql 1. 2. 3.
Кстати, триггер Ваш - полная глупость. Для этого нужен форейн ключ. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2017, 19:10 |
|
Медленно работает FireBird
|
|||
---|---|---|---|
#18+
KreatorXXI, Спасибо за замечание сделаю с помощью foreign Key ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2017, 19:33 |
|
Медленно работает FireBird
|
|||
---|---|---|---|
#18+
KreatorXXIMBlack, Во-первых, даже если Вы рассматриваете последний запрос, то у Вас фильтр по orderdate, а индекса по orderdate у Вас нет, сразу получаете проход по натуралу. Во-вторых, у Вас, я вижу, BLOB'ы. Что в них? Гигабайты? Вы покажите нам статистику вот по такому, например, запросу: Код: sql 1. 2. 3.
Кстати, триггер Ваш - полная глупость. Для этого нужен форейн ключ. Вот статистика, по запросу который ты указал Plan PLAN (ORDERS INDEX (PK_ORDERS)) ------ Performance info ------ Prepare time = 422ms Execute time = 31ms Avg fetch time = 31,00 ms Current memory = 36 980 704 Max memory = 37 296 776 Memory buffers = 2 048 Reads from disk to cache = 0 Writes from cache to disk = 2 Fetches from cache = 0 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2017, 19:36 |
|
Медленно работает FireBird
|
|||
---|---|---|---|
#18+
MBlack, Это по удалёнке что-ли? Не может FB отбирать одну запись по первичному ключу 31ms. Даже не знаю что сказать. А вкладка "Анализ производительности" что показывает? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2017, 20:13 |
|
Медленно работает FireBird
|
|||
---|---|---|---|
#18+
MBlack, регулярный prepare time в 0.5 сек как бы намекает, что таблица имеет конский размер. Я не увидел, чтобы вы приводили размер БД или размер таблицы. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2017, 20:17 |
|
Медленно работает FireBird
|
|||
---|---|---|---|
#18+
kdvMBlack, регулярный prepare time в 0.5 сек как бы намекает, что таблица имеет конский размер. Я не увидел, чтобы вы приводили размер БД или размер таблицы. Что имеете ввиду размер таблицы? Если количество записей то в это таблице около 12 с половиной тыс. записей ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2017, 20:22 |
|
Медленно работает FireBird
|
|||
---|---|---|---|
#18+
MBlackЧто имеете ввиду размер таблицы? я имею в виду gstat -r или gstat -r -t tablename у вас там блобы, так что таблица может занимать сотни гиг даже с 12к записей. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2017, 20:24 |
|
Медленно работает FireBird
|
|||
---|---|---|---|
#18+
kdv, Лучше мне BLOB убрать, я сейчас посмотрел, они кстати и не нужны, потому как там может хранится строка, где может быть до 1 тыс. символов ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2017, 20:28 |
|
Медленно работает FireBird
|
|||
---|---|---|---|
#18+
MikeDDMBlack, а блобы в той таблице есть?... MBlack Блоб поля нет там у меня ... kdv... у вас там блобы , так что таблица может занимать сотни гиг даже с 12к записей. MBlackkdv, Лучше мне BLOB убрать , я сейчас посмотрел, они кстати и не нужны, потому как там может хранится строка, где может быть до 1 тыс. символов Пациент - лжец. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2017, 22:16 |
|
Медленно работает FireBird
|
|||
---|---|---|---|
#18+
Ошибся, сказав что нет блобов, с кем не бывает ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2017, 23:04 |
|
Медленно работает FireBird
|
|||
---|---|---|---|
#18+
kdvMBlack, регулярный prepare time в 0.5 сек как бы намекает, что таблица имеет конский размер. Я не увидел, чтобы вы приводили размер БД или размер таблицы. Дима, вопрос можно? Где-то есть информация по зависимости времени prepare от размера таблицы? А то у меня на одном процессе время prepare плавает от 15 мс до пары минут. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2017, 02:00 |
|
Медленно работает FireBird
|
|||
---|---|---|---|
#18+
Igor Gallemar, ты что хочешь? Формулы как таковой нет. Во время prepare оценивается кардинальность таблиц. Оценивается она примерно используя PP. Чем больше таблица тем больше будет PP и тем дольше будет идти prepare. Тут как-то был топик про таблицу размером в 1 Гб prepare по которой шёл минуту. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2017, 10:42 |
|
Медленно работает FireBird
|
|||
---|---|---|---|
#18+
Симонов ДенисТут как-то был топик про таблицу размером в 1 Гб prepare по которой шёл минуту. не 1 гигабайт, а 1 терабайт, и не таблица, а база, и не минуту, а 20 секунд. :-) http://www.ibase.ru/fb1tbtech/ Насчет скана pointer pages - все верно. Но еще я вспомнил, что prepare состоит из нескольких действий, и в API FB/IB это происходит с многими roundtrips, что на медленных каналах как раз дает тормоза. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2017, 11:38 |
|
Медленно работает FireBird
|
|||
---|---|---|---|
#18+
Симонов Денис, да, и в ФБ 3.0 трафик в коннекте оптимизирован по сравнению с предыдущими версиями, так что еще зависит и от версии ФБ. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2017, 11:39 |
|
Медленно работает FireBird
|
|||
---|---|---|---|
#18+
kdvя вспомнил, что prepare состоит из нескольких действий, и в API FB/IB это происходит с многими roundtrips, что на медленных каналах как раз дает тормоза. Лучше забудь это обратно. Именно prepare всегда был одним трипом. А в 2.5 оптимизировали и его необязательную обвеску типа get_sql_info(). Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2017, 11:52 |
|
Медленно работает FireBird
|
|||
---|---|---|---|
#18+
Симонов Денис..Во время prepare оценивается кардинальность таблиц. Оценивается она примерно используя PP. Чем больше таблица тем больше будет PP и тем дольше будет идти prepare... А индексы во время prepare помогают? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2017, 12:06 |
|
Медленно работает FireBird
|
|||
---|---|---|---|
#18+
чччДА индексы во время prepare помогают? в смысле? сервер должен понять, какие индексы есть, и какие имеет смысл использовать. Так что чем больше индексов, тем дольше prepare. Конечно, речь про миллисекунды, но все-таки. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2017, 12:30 |
|
Медленно работает FireBird
|
|||
---|---|---|---|
#18+
Тяжёлый случай. Я похожий запрос писал на своей таблице. Вот такие цифры. CREATE TABLE UMASS ( ID_UMS ID NOT NULL /* ID = INTEGER */, ID_OPER ID NOT NULL /* ID = INTEGER */, ID_MDL ID NOT NULL /* ID = INTEGER */, ID_ISP INTEGER, ID_MASTER INTEGER, ID_KONTR INTEGER, DAT_ISP DAT_REAL /* DAT_REAL = DATE check (value is null or (value between '01.01.1900' and '31.12.2030' )) */, DAT_MASTER DAT_REAL /* DAT_REAL = DATE check (value is null or (value between '01.01.1900' and '31.12.2030' )) */, DAT_KONTR DAT_REAL /* DAT_REAL = DATE check (value is null or (value between '01.01.1900' and '31.12.2030' )) */, NOR_UMS NUMERIC(9,3), ID_MTP ID /* ID = INTEGER */, ID_TEXNOL INTEGER, DATN DAT_REAL /* DAT_REAL = DATE check (value is null or (value between '01.01.1900' and '31.12.2030' )) */, TIMN NUMERIC(5,0), PT NUMERIC(1,0), DATR DAT_REAL /* DAT_REAL = DATE check (value is null or (value between '01.01.1900' and '31.12.2030' )) */, SD INTEGER, ID_KIT ID /* ID = INTEGER */, ID_PAS ID /* ID = INTEGER */, NNTP INTEGER, NNOP NUMERIC(7,2), KOL_RAB SMALLINT, NDAT DATE, NTIM SMALLINT, KDATT DATE, KTIM SMALLINT, PRUCH SMALLINT, TIME_ISP TIME, TIME_MASTER TIME, TIME_KONTR TIME ); /******************************************************************************/ /*** Primary keys ***/ /******************************************************************************/ ALTER TABLE UMASS ADD CONSTRAINT PK_UMASS PRIMARY KEY (ID_UMS); /******************************************************************************/ /*** Foreign keys ***/ /******************************************************************************/ ALTER TABLE UMASS ADD CONSTRAINT FK_UMASS_RELATIONS_MODUL FOREIGN KEY (ID_MDL) REFERENCES MODUL (ID_MDL) ON DELETE CASCADE; ALTER TABLE UMASS ADD CONSTRAINT FK_UMASS_RELATIONS_RELTP FOREIGN KEY (ID_OPER) REFERENCES RELTP (ID_RTP) ON DELETE CASCADE; ALTER TABLE UMASS ADD CONSTRAINT FK_UMASS_RELATIONS_RELTP1 FOREIGN KEY (ID_MTP) REFERENCES RELTP (ID_RTP) ON DELETE CASCADE; /******************************************************************************/ /*** Indices ***/ /******************************************************************************/ CREATE INDEX UMASS_IDX1 ON UMASS (DATN); CREATE INDEX UMASS_IDX2 ON UMASS (ID_KIT); CREATE INDEX UMASS_IDX3 ON UMASS (ID_TEXNOL); CREATE INDEX UMASS_IDX4 ON UMASS (DAT_ISP); CREATE INDEX UMASS_IDX5 ON UMASS (DAT_MASTER); CREATE INDEX UMASS_IDX6 ON UMASS (DAT_KONTR); CREATE INDEX UMASS_IDX_PAS ON UMASS (ID_PAS); Триггеры не показал, не важны здесь. Запрос. select ConnectionType "Тип соединения", sum(c01) "01", sum(c02) "02", sum(c03) "03", sum(c04) "04", sum(c05) "05", sum(c06) "06", sum(c07) "07", sum(c08) "08", sum(c09) "09", sum(c10) "10" from ( select a.id_isp ConnectionType, iif(extract(day from a.dat_isp)=1,1,0) c01, iif(extract(day from a.dat_isp)=2,1,0) c02, iif(extract(day from a.dat_isp)=3,1,0) c03, iif(extract(day from a.dat_isp)=4,1,0) c04, iif(extract(day from a.dat_isp)=5,1,0) c05, iif(extract(day from a.dat_isp)=6,1,0) c06, iif(extract(day from a.dat_isp)=7,1,0) c07, iif(extract(day from a.dat_isp)=8,1,0) c08, iif(extract(day from a.dat_isp)=9,1,0) c09, iif(extract(day from a.dat_isp)=10,1,0) c10 from umass a where a.dat_isp between '01.03.2017' and '10.03.2017' ) group by 1 Анализ. План PLAN SORT (A INDEX (UMASS_IDX4)) ------ Информация о производительности ------ Время подготовки запроса = 0ms Время выполнения запроса = 79ms Среднее время на получение одной записи = 0,26 ms Current memory = 58 422 800 Max memory = 59 574 984 Memory buffers = 12 000 Reads from disk to cache = 0 Writes from cache to disk = 0 Чтений из кэша = 24 274 Таблица - чуть больше двух миллионов записей. Но в выборке по фильтру чуть больше 12000. Как у ТС. Но это не удалёнка. Всё же интересно чем вызвано такое большое время подготовки запроса? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2017, 12:47 |
|
|
start [/forum/topic.php?fid=40&msg=39456681&tid=1561581]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
58ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 167ms |
0 / 0 |