Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / время выполнения запроса / 18 сообщений из 18, страница 1 из 1
13.09.2018, 22:16
    #39702351
che_work
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
время выполнения запроса
Добрый день!
В рунтайме программа в цикле формирует запросы к БД для заполнения книги в Экселе.
порядка 30тыс селектов разной степени сложности (размерность таблицы 900 на 35).
время выполнения одного запроса 3-10сек. Например такой

select count(id) from sc inner join scf on sc.id=scf.stat_card_id where sc_id!=-1 and (period_id = 20 or period_id = 19 ) and ((( scf.res=21 or scf.res=32 or scf.res=1 or scf.res=31 or scf.res=4 or scf.res=5 or scf.res=6 or scf.res=7 or scf.res=8 or scf.res=9 or scf.res=10 or scf.res=11 or scf.res=12 or scf.res=13 or scf.res=14 or scf.res=15 or scf.res=17 or scf.res=18 or scf.res=16 or scf.res=20) ) ) and (( scf.res=1 ) ) and sc.mode_sc in (0,1,4)

План выполнения такой
Plan
PLAN JOIN (SCF INDEX (SCF_RES, SCF_PERIOD_ID, SCF_PERIOD_ID), SC INDEX (RDB$PRIMARY51))

Adapted Plan
PLAN JOIN (SCF INDEX (SCF_RES, SCF_PERIOD_ID, SCF_PERIOD_ID), SC INDEX (PK_SC))

------ Performance info ------
Prepare time = 0ms
Execute time = 3s 276ms
Avg fetch time = 3 276,00 ms
Current memory = 43 336 744
Max memory = 43 482 792
Memory buffers = 2 048
Reads from disk to cache = 52 484
Writes from cache to disk = 0
Fetches from cache = 5 515 962

FB - SS 2.5.1.26351
Win7(64)
Для доступа к базе используются компоненты FIB.
КОличество записей в SC и SCF порядка 10млн.

Это нормальное (обычное) время выполнения запроса или можно как-то ускорить, чтобы было менее секунды.
Сейчас для расчета такой таблицы уходит порядка суток!
...
Рейтинг: 0 / 0
13.09.2018, 22:31
    #39702354
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
время выполнения запроса
che_work,

страничный кеш подымай, раз уж у тебя супер. Например до 50K. Не знаю насколько его можно ещё задрать в 2.5, но не больше чем FileSystemCacheThreshold.
Запрос наверное тоже можно ускорить, но я так понял они у вас автоматом строятся
...
Рейтинг: 0 / 0
13.09.2018, 22:35
    #39702355
che_work
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
время выполнения запроса
Симонов Денисche_work,

страничный кеш подымай, раз уж у тебя супер. Например до 50K. Не знаю насколько его можно ещё задрать в 2.5, но не больше чем FileSystemCacheThreshold.
Запрос наверное тоже можно ускорить, но я так понял они у вас автоматом строятся
Да, не указывал - настройки сервера все дефолтные.
DefaultDbCachePages - этот параметр?
...
Рейтинг: 0 / 0
13.09.2018, 22:43
    #39702357
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
время выполнения запроса
che_work,

да. Если программу разрабатываешь ты, можно попробовать аккуратно перейти на 3.0
...
Рейтинг: 0 / 0
14.09.2018, 00:17
    #39702371
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
время выполнения запроса
che_workНапример такой

Это настоящий запрос или "чисто для примера"? В первом случае его формирователю надо
что-нибудь оторвать за условие "(scf.res=21 or scf.res=1) and scf.res=1".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
14.09.2018, 09:01
    #39702410
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
время выполнения запроса
che_workпорядка 30тыс селектов
...
можно как-то ускоритьИзбавиться от 30к запросов. Другого пути нет.
...
Рейтинг: 0 / 0
14.09.2018, 10:41
    #39702474
che_work
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
время выполнения запроса
Dimitry Sibiryakovche_workНапример такой

Это настоящий запрос или "чисто для примера"? В первом случае его формирователю надо
что-нибудь оторвать за условие "(scf.res=21 or scf.res=1) and scf.res=1".
Не нужно отрывать.
Запрос реальный, не "для примера". Есть и более сложные - связь по трем-четырем таблицам inner join, условия для проверки на бОльшее количество строк.
Так построен алгоритм формирования запросов - условия по строке таблицы + условия по графе.
В общем от этого не уйти. Но ведь не это же причина "тормозов" ?
Собственно я хотел узнать: при таких условиях время 3-10 сек - это "тормоза" или норма? Или можно улучшить хотя бы в несколько раз?
И тогда еще попутно вопрос - в толстом клиенте замерял время выполнения этих же запросов. Там время выполнения больше - 10-20 сек, чем в ibexpert-е. Наверное так и должно быть? (работа компонентов FIB? сервера). Или же время должно быть сопоставимо?
...
Рейтинг: 0 / 0
14.09.2018, 12:43
    #39702588
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
время выполнения запроса
che_workВ общем от этого не уйти. Но ведь не это же причина "тормозов" ?

Может быть и в этом. Изучай http://www.ibase.ru/dataaccesspaths/

che_workСобственно я хотел узнать: при таких условиях время 3-10 сек - это
"тормоза" или норма? Или можно улучшить хотя бы в несколько раз?
Это тормоза. Улучшить, скорее всего, можно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
14.09.2018, 13:21
    #39702618
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
время выполнения запроса
che_workТам время выполнения больше - 10-20 сек, чем в ibexpert-е. Наверное так и должно быть? (работа компонентов FIB? сервера).Я тебе страшную тайну приоткрою, в эксперте используются ФИБ-ы. :)

che_workMemory buffers = 2 048
Reads from disk to cache = 52 484Увеличивай первый параметр (научное имя DefaultDbCachePages в конфиге), чтобы второй приблизился к нулю и при этом сервер не вывалился в своп.

Сам сервер обновить как минимум до 2.5.8
...
Рейтинг: 0 / 0
14.09.2018, 14:45
    #39702692
che_work
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
время выполнения запроса
Ivan_Pisarevskyche_workТам время выполнения больше - 10-20 сек, чем в ibexpert-е. Наверное так и должно быть? (работа компонентов FIB? сервера).Я тебе страшную тайну приоткрою, в эксперте используются ФИБ-ы. :)

che_workMemory buffers = 2 048
Reads from disk to cache = 52 484Увеличивай первый параметр (научное имя DefaultDbCachePages в конфиге), чтобы второй приблизился к нулю и при этом сервер не вывалился в своп.

Сам сервер обновить как минимум до 2.5.8Спасибо. Проверю
...
Рейтинг: 0 / 0
14.09.2018, 15:24
    #39702723
che_work
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
время выполнения запроса
поставил FB - SS 2.5.8.
Увеличил DefaultDbCachePages. Сделал равным 65 536.

Первый раз после запуска службы в ibexpert-e показатели такие
Prepare time = 0ms
Execute time = 1m 21s 464ms
Avg fetch time = 81 464,00 ms
Current memory = 1 099 025 072
Max memory = 1 099 034 816
Memory buffers = 65 536
Reads from disk to cache = 49 544
Writes from cache to disk = 0
Fetches from cache = 5 515 962

Второй раз выполнил запрос - данные дргие.
Prepare time = 0ms
Execute time = 2s 995ms
Avg fetch time = 2 995,00 ms
Current memory = 1 099 025 192
Max memory = 1 099 148 544
Memory buffers = 65 536
Reads from disk to cache = 0
Writes from cache to disk = 0
Fetches from cache = 5 515 962

Лучше , но всё равно сравнимо с первоначальным. Наверное настройками сервера кардинально показатели не улучшить
...
Рейтинг: 0 / 0
14.09.2018, 15:49
    #39702738
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
время выполнения запроса
che_workMemory buffers = 65 536
Лучше , но всё равно сравнимо с первоначальным.А ведь тебя специально
предупреждали, чтобы ты не ставил 65536 или любое другое число, большее, чем
SystemCacheTreshold...

С таким отношением, я так понимаю, про селективность индексов и сбор статистики лучше
вообще не заикаться.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
14.09.2018, 16:14
    #39702754
che_work
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
время выполнения запроса
Dimitry Sibiryakovche_workMemory buffers = 65 536
Лучше , но всё равно сравнимо с первоначальным.А ведь тебя специально
предупреждали, чтобы ты не ставил 65536 или любое другое число, большее, чем
SystemCacheTreshold...

С таким отношением, я так понимаю, про селективность индексов и сбор статистики лучше
вообще не заикаться.

Я проверил разные варианты - 8К, 16К, 32К, 64К
Сейчас поставил 64000
Результат:
Plan
PLAN JOIN (STAT_CARD_FLAT INDEX (SCF_RES_MEETING, SCF_PERIOD_ID, SCF_PERIOD_ID), STAT_CARD INDEX (RDB$PRIMARY51))

Adapted Plan
PLAN JOIN (STAT_CARD_FLAT INDEX (SCF_RES_MEETING, SCF_PERIOD_ID, SCF_PERIOD_ID), STAT_CARD INDEX (PK_STAT_CARD))

------ Performance info ------
Prepare time = 0ms
Execute time = 1m 18s 516ms
Avg fetch time = 78 516,00 ms
Current memory = 1 073 490 616
Max memory = 1 073 500 504
Memory buffers = 64 000
Reads from disk to cache = 49 544
Writes from cache to disk = 0
Fetches from cache = 5 515 96

Plan
PLAN JOIN (STAT_CARD_FLAT INDEX (SCF_RES_MEETING, SCF_PERIOD_ID, SCF_PERIOD_ID), STAT_CARD INDEX (RDB$PRIMARY51))

Adapted Plan
PLAN JOIN (STAT_CARD_FLAT INDEX (SCF_RES_MEETING, SCF_PERIOD_ID, SCF_PERIOD_ID), STAT_CARD INDEX (PK_STAT_CARD))

------ Performance info ------
Prepare time = 0ms
Execute time = 2s 902ms
Avg fetch time = 2 902,00 ms
Current memory = 1 073 490 712
Max memory = 1 073 614 104
Memory buffers = 64 000
Reads from disk to cache = 0
Writes from cache to disk = 0
Fetches from cache = 5 515 962
...
Рейтинг: 0 / 0
14.09.2018, 17:03
    #39702788
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
время выполнения запроса
che_work,

значит остаётся только переписывать запросы в человеческий вид

Ну и 30000 SELECT запросов в цикле это бред, над архитектурой надо крепко подумать
...
Рейтинг: 0 / 0
14.09.2018, 17:28
    #39702799
che_work
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
время выполнения запроса
Симонов Денисche_work,

значит остаётся только переписывать запросы в человеческий вид

Ну и 30000 SELECT запросов в цикле это бред, над архитектурой надо крепко подуматьпонятно, спасибо
...
Рейтинг: 0 / 0
15.09.2018, 17:34
    #39702973
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
время выполнения запроса
che_workЯ проверил разные варианты - 8К, 16К, 32К, 64К

Ок, всё закэшировано.

Раз уж ты самостоятельно изучать теорию не хочешь, идём дальше по шагам.

Если выкинуть из запроса бессмысленный мусор, в нём остаётся три полезных условия:
1) period_id = 20 or period_id = 19
2) scf.res=1
3) sc.mode_sc in (0,1,4)

Сколько записей подпадают под эти условия по отдельности (в штуках и процентах от общего
числа записей в соответствующей таблице)?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
15.09.2018, 17:58
    #39702975
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
время выполнения запроса
Dimitry Sibiryakov,

да бесполезно это. Ты ему один запрос поправишь, а него ещё 29999 построенных по тому же принципу
...
Рейтинг: 0 / 0
15.09.2018, 18:09
    #39702977
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
время выполнения запроса
Симонов ДенисТы ему один запрос поправишь, а него ещё 29999 построенных по тому же принципу

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


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