Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Ускорить 20 однотипных запросов к одному источнику
|
|||
|---|---|---|---|
|
#18+
Всем добрый день. Есть большая таблица из которой в визуализацию (типа дашборда) вытаскиваются около 20 показателей. По сути это 20 маленьких запросов типа таких: Код: sql 1. 2. 3. 4. 5. Код: sql 1. 2. 3. 4. Код: sql 1. 2. 3. 4. Особенность в том что у них у всех одинаковый отбор. Т.е. юзер выбрал что то (наложил отбор) - все 20 визуализаций пересчитываются с учетом этого отбора. клиент работает с ms sql через ADODB и на текущий момент это около 10 секунд (по 0.5 на каждую визуализацию). Хотелось бы ускорить. прошу совета в какую сторону искать. Пробовал: 1. разбить на несколько потоков выполнение этих запросиков - работает не понятно, то быстрее, то сервер "зависает" на догое время 2. выбрать сначала из большой таблицы данные во временную с учетом отбора и затем уже делать эти 20 запросов к этой временной. выигрыша по времени не дало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2019, 16:47 |
|
||
|
Ускорить 20 однотипных запросов к одному источнику
|
|||
|---|---|---|---|
|
#18+
seperblunt Код: sql 1. 2. [sarcasm]Очень приятно с рандомом разбираться....[/sarcasm] Как минимум вам никто не запрещает объединить все эти запросы с помощью СТЕ/подзапросов. Там сервер сам разберется, нужно ли ему сканировать 20 раз вашу таблицу И_0c0d3b63_12b1_4d13_a603_8994723e47fe_5bd0f485_6a87_4b5b_9ca4_6bc0fae48b59_v2 AS И_0c0d3b63_12b1_4d13_a603_8994723e47fe типа Код: sql 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2019, 18:11 |
|
||
|
Ускорить 20 однотипных запросов к одному источнику
|
|||
|---|---|---|---|
|
#18+
seperblunt, Одновременное выполнение будет зависеть от количества незадействованных ядер на момент выполнения запросов. Если каждый запрос распараллелится, то это тоже надо учитывать. Кроме того, Вы номенклатурами заставляете формировать новый план для каждой номенклатуры, помещать его в кеш и так далее. Тоже накладные расходы. Поможет или план выполнения запросов, или, радикально, настроить для базы принудительное прослушивание, но это может иметь последствия. Могут помочь колоночные индексы, поскольку используется группировка. Также оптимизация tempdb. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2019, 18:18 |
|
||
|
Ускорить 20 однотипных запросов к одному источнику
|
|||
|---|---|---|---|
|
#18+
зависит от того где появится новое узкое горло в системе, т.к. агрегация видна только в первом запросе то месяц и год похоже вообще можно забрать без напряга если проиндексировано нормально (как уже указали выше) или даже одним запросом а потом на клиенте разбить distinct из каждой колонны (или получать вместе: год-месяц а потом бить на части) или вообще вытащить грануляцию клиент/месяц/год - и всё на клиенте/приложении/сервисе (SSRS/PowerBI/Excel/Access и т.д.) разделять если resultset не тяжелый.. или как советуют выше - получать несколько resultset-ов если клиент позволяет (а это не все) т.е. зависит от возможностей приложения и прочих факторов (напр. вес разных комбинаций результата). в общем балансировать к оптимальности в зависимости от нюансов (которые читателям пока неизвестны) так-то вариантов ещё несколько можно сгенерировать до кучи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2019, 18:51 |
|
||
|
Ускорить 20 однотипных запросов к одному источнику
|
|||
|---|---|---|---|
|
#18+
seperblunt, Индексы есть? Планы смотрели? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2019, 23:34 |
|
||
|
Ускорить 20 однотипных запросов к одному источнику
|
|||
|---|---|---|---|
|
#18+
А насколько быстро устаревают данные? Может быть, проще сразу пересчитать все возможные варианты вывода (каждый час, при старте системы, раз в N минут), а пользователю выдавать данные из кэша? Ну, или, например, сформировать некий долгоживущий полуагрегированный кэш, и данные таскать уже из него. Пользователь большую часть времени - ничего не делает. Пока он ничего не делает - можно пересчитывать устаревшие варианты из списка выбора. Можно даже не для всех это делать, а для тех данных, для которых можно. Данные наверняка полустатичны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2019, 09:59 |
|
||
|
Ускорить 20 однотипных запросов к одному источнику
|
|||
|---|---|---|---|
|
#18+
для дашборда, если только читаете из этой таблицы, может имеет смысл сделать нормальную таблицу с нужными индексами и человеческими названиями полей. заполняйте эту таблицу по мере добавления данных в основную (триггер, репликация, джоб и тд и тп) и пусть ваш клиент с ненагруженной оптимизированной для чтений таблицей работает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2019, 10:09 |
|
||
|
Ускорить 20 однотипных запросов к одному источнику
|
|||
|---|---|---|---|
|
#18+
Что вам мешает использовать короткие алиасы? Если есть открывающая скобка, то должна где-то быть закрывающая? Где закрывающая кавычка у строки? Ерунда, мелочь, да? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2019, 10:26 |
|
||
|
Ускорить 20 однотипных запросов к одному источнику
|
|||
|---|---|---|---|
|
#18+
iap, переместите горизонтальный скролл вправо - и там все будет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2019, 10:36 |
|
||
|
Ускорить 20 однотипных запросов к одному источнику
|
|||
|---|---|---|---|
|
#18+
vikkivили как советуют выше - получать несколько resultset-ов если клиент позволяет (а это не все). можно пжл подробнее? Клиент у меня 1С. подключаюсь к серверу через Adodb.connection. Поставил PowerBI - засосал в него туже табличцу, настроил такие же визуализации - и стал смотреть через профайлер что будет делать при отборах - так вот он в принципе делает теже самые простые запросы, только распараллельвает их по 2 и более, в зависимости от кол-ва ядер (видимо?( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2019, 12:40 |
|
||
|
Ускорить 20 однотипных запросов к одному источнику
|
|||
|---|---|---|---|
|
#18+
seperblunt, Если Вы поставили PowerBi, то зачем делаете 20 запросов к одной и той же таблице и по одной и той же номенклатуре ? Получите данные из таблицы и агрегируете в нужных Вам изменениях в PowerBI ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2019, 13:06 |
|
||
|
Ускорить 20 однотипных запросов к одному источнику
|
|||
|---|---|---|---|
|
#18+
Кто-то ярко постебался с такими именами объектов. Я бы отказался работать с такой БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2019, 14:52 |
|
||
|
Ускорить 20 однотипных запросов к одному источнику
|
|||
|---|---|---|---|
|
#18+
[quot L_argo]Кто-то ярко постебался с такими именами объектов. это все генериться на лету автоматом, в т.ч. и создаются таблицы, поэтому имена имеют гуид ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2019, 16:02 |
|
||
|
Ускорить 20 однотипных запросов к одному источнику
|
|||
|---|---|---|---|
|
#18+
seperbluntможно пжл подробнее? Клиент у меня 1С. подключаюсь к серверу через Adodb.connection. как обеспечить выборку из основной таблицы за один проход уже советовали выше (хоть из временной через # или @) в зависимости от объёмов там-же и кэширование срабатывает.. получить несколько resultset по быстрому (без проверок/валидаций) в ADO можно например так: C# Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. или в PowerShell Код: powershell 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2019, 18:44 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39841339&tid=1687497]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
43ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 224ms |
| total: | 335ms |

| 0 / 0 |
