|
оптимизация сортировки
|
|||
---|---|---|---|
#18+
Всем привет. Есть 2 запроса, которые соединяются между собой UNION ALL. Результирующая выборка из 20 полей должна быть отсортирована по 6 полям. Объем выборки около 100 миллионов. Соответственно, как вы понимаете, занимает это ни один час. Вопрос - как можно оптимизаровать сортировку в данном кейсе? UPDATED: v$sql_workarea_active говорит, что сортировка однопроходная с объемом темпа в 7 Гб. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2021, 19:02 |
|
оптимизация сортировки
|
|||
---|---|---|---|
#18+
А для чего нужно сортировать 100 млн записей, да еще и по 6 полям?! ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2021, 20:02 |
|
оптимизация сортировки
|
|||
---|---|---|---|
#18+
Правильный Вася А для чего нужно сортировать 100 млн записей, да еще и по 6 полям?! Присоединяюсь к вопросу. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2021, 20:28 |
|
оптимизация сортировки
|
|||
---|---|---|---|
#18+
mlc как можно оптимизаровать сортировку в данном кейсе? Какими ресурсами готовы пожертвовать ради оптимизации? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2021, 20:29 |
|
оптимизация сортировки
|
|||
---|---|---|---|
#18+
А я бы, идя навстречу "заказчику", спросил бы, а каждая из половин в отсортированном виде отдаётся быстро? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2021, 20:39 |
|
оптимизация сортировки
|
|||
---|---|---|---|
#18+
mlc, нет таких людей которые способны "глазками" просмотреть 100 млн. rows. Признайся им ведь нужно всего-лишь top 10 строк? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2021, 20:45 |
|
оптимизация сортировки
|
|||
---|---|---|---|
#18+
mayton mlc, нет таких людей которые способны "глазками" просмотреть 100 млн. rows. Признайся им ведь нужно всего-лишь top 10 строк? Ну сортировка не обязательно делается под "глазки". Я знаю вариант, в котором приходится сортировать ~100млн, правда, не из UNION ALL и, в конечном итоге, там удалось отделаться порциями помельче, порядка 20 млн. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2021, 20:49 |
|
оптимизация сортировки
|
|||
---|---|---|---|
#18+
Elic А я бы, идя навстречу "заказчику", спросил бы, а каждая из половин в отсортированном виде отдаётся быстро? Предложение суперпривлекательное. Я несколько лет на такое облизываюсь. Останавливает, главным образом, то, что после меня это поддерживать будет некому. А с учётом того, что в моём случае, не из "половин", а из "десятин" сила клиентского мержа вызывает сомнение. Хотя руки продолжают чесаться. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2021, 22:53 |
|
оптимизация сортировки
|
|||
---|---|---|---|
#18+
mlc Всем привет. Есть 2 запроса, которые соединяются между собой UNION ALL. Результирующая выборка из 20 полей должна быть отсортирована по 6 полям. Объем выборки около 100 миллионов. Соответственно, как вы понимаете, занимает это ни один час. Вопрос - как можно оптимизаровать сортировку в данном кейсе? UPDATED: v$sql_workarea_active говорит, что сортировка однопроходная с объемом темпа в 7 Гб. зы. Сортировка 100млн ни один час - в принципе, подозрительно долго. Видимо, там еще проблем хватает помимо сортировки. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2021, 04:02 |
|
оптимизация сортировки
|
|||
---|---|---|---|
#18+
Sayan Malakshinov Сортировка 100млн ни один час - в принципе, подозрительно долго. Видимо, там еще проблем хватает помимо сортировки. Да в принципе адекватно для сортировки на временном сегменте, если темп не на SSD. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2021, 08:31 |
|
оптимизация сортировки
|
|||
---|---|---|---|
#18+
Постараюсь ответить на все вопросы в одном сообщении. Версия 12.1. Насколько мне известно все датафайлы продуктовой бд живут на SSD (хотя могу ошибаться). Насчёт времени работы сортировки - опираюсь на данные из v$session_longops , v$sql_workarea_active и v$sql_plan_monitor. Сам текст запроса выложить не могу, но там ничего мудреного: select ... from джойн_нескольких_таблиц union all select ... from джойн_нескольких_таблиц order by 1,2,3,4,5,6. Запрос с gather_plan_statistics не выполнялся. Сортировка 100 млн - это требование внешней системы для формирования ЦБ-шного отчёта. Система получает данные в плоском файле, обрабатывает данные, обогащает их и отправляет в ЦБ. В отчёте транзакции по картам. Насчёт параллельного выполнения - почему нет. Возможность есть и первая мысль была накрутить параллелей. Насчёт какими ресурсами готов пожертвовать - а какие есть предложения? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2021, 09:07 |
|
оптимизация сортировки
|
|||
---|---|---|---|
#18+
mlc Постараюсь ответить на все вопросы в одном сообщении. P.S. Если ты не разработчик и не можешь на них повлиять, то можешь не отвечать. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2021, 09:31 |
|
оптимизация сортировки
|
|||
---|---|---|---|
#18+
mlc Насчёт какими ресурсами готов пожертвовать - а какие есть предложения? Предложения есть разные. Поскольку в топике проявился Саян, то про варианты надвинуть шляпу оптимизатору у него получится лучше. Я ограничусь вариантами разработчика: - рассмотреть возможность создания мат. представления с целью заменить сортировку индексным доступом (разменять время при выборке на лишнюю нагрузку в процессе работы и дисковые просторы для хранения). - вариация на тему: разработать кастомный доменный индекс, который будет готовить искомый пресортированный датасет. - накидать pipelined, принимающую на вход пресортированные датасеты отдельных веток union all и выполняющую объединение в стиле Sort-Merge Join. ... прочие способы под общим девизом "готовь сортированный набор по мере изменения данных, отдавай одним проходом" ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2021, 09:35 |
|
оптимизация сортировки
|
|||
---|---|---|---|
#18+
Elic, Ох, Elic, ваш вопрос пропустил. Если я правильно вас понял - вы предлагаете отдавать по частям отсортированно. Но как это поможет в сортировке всего набора вместе? Выше я писал, что все складываются в плоский файл в отсортированном виде. mayton mlc, нет таких людей которые способны "глазками" просмотреть 100 млн. rows. Признайся им ведь нужно всего-лишь top 10 строк? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2021, 09:43 |
|
оптимизация сортировки
|
|||
---|---|---|---|
#18+
mlc Если я правильно вас понял - вы предлагаете отдавать по частям отсортированно. Но как это поможет в сортировке всего набора вместе? andrey_anonymous - накидать pipelined, принимающую на вход пресортированные датасеты отдельных веток union all и выполняющую объединение в стиле Sort-Merge Join. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2021, 09:50 |
|
оптимизация сортировки
|
|||
---|---|---|---|
#18+
mlc Elic, ...Но как это поможет в сортировке всего набора вместе? ... вот andrey_anonymous понял, как - почитайте его последний пост внимательно. andrey_anonymousв стиле Sort-Merge Join С учетом того, что фаза sort уже будет выполненной и останется только выполнить merge, то скажем, при числе веток в пределах 5, я может и не задумывался даже сильно, просто взял бы и так и сделал... И без всякого сомнения, если сортировка в пределах ветки условно-бесплатна - например обеспечивается подходящим индексом. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2021, 09:53 |
|
оптимизация сортировки
|
|||
---|---|---|---|
#18+
Хм.. Если сортировка так дорого стоит (не один час) то возможо имеет смысл подумать отказаться от сортировок вообще. И держать отдельную сортированную всегда структуру данных. И обновлять ее по мере поступления новых данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2021, 10:21 |
|
оптимизация сортировки
|
|||
---|---|---|---|
#18+
mayton Хм.. Если сортировка так дорого стоит (не один час) то возможо имеет смысл подумать отказаться от сортировок вообще. И держать отдельную сортированную всегда структуру данных. И обновлять ее по мере поступления новых данных. это тоже занимательная идея. Но при особо рьяном и тщательном выполнении легко можно неопределенное количество порядков потерять. А так как идея похожа на идею архитектурного типа, то почти наверно речь идет не о постройке отдельно стоящего сарая, а о пристройке такой веранды, для которой нужно разобрать существующий дом. Хорошо, если не целиком. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2021, 10:28 |
|
оптимизация сортировки
|
|||
---|---|---|---|
#18+
Авто пишет >> Система получает данные в плоском файле, обрабатывает данные, обогащает их и отправляет в ЦБ. Тоесть у нас полюбому есть фаза загрузки. И ничего с этим не поделать. Задача - конвейер, и рассматривать одну фазу сортировки - не интересно. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2021, 10:58 |
|
оптимизация сортировки
|
|||
---|---|---|---|
#18+
mayton, по его описанию что происходит, я не берусь точно понять. я бы читал так, что наворочена многоступенчатая "интеграция". И, может быть, его задача, как раз в том и состоит, чтобы испечь сортированный плоский файл, который потом будет грузить другая внешняя система. То есть, в космическом масштабе, оно может и про то, сколько будет стоить поменять способ интеграции. Но локально вопрос о том, как умеренно дешево ускорить сортировку, без замены интеграционных рельсов, шпал и костылей. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2021, 11:10 |
|
оптимизация сортировки
|
|||
---|---|---|---|
#18+
booby ...наворочена многоступенчатая "интеграция". И, может быть, его задача, как раз в том и состоит, чтобы испечь сортированный плоский файл, который потом будет грузить другая внешняя система. Но локально вопрос о том, как умеренно дешево ускорить сортировку, без замены интеграционных рельсов, шпал и костылей. все в точности так и есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2021, 12:03 |
|
оптимизация сортировки
|
|||
---|---|---|---|
#18+
andrey_anonymous mlc Насчёт какими ресурсами готов пожертвовать - а какие есть предложения? Предложения есть разные. Поскольку в топике проявился Саян, то про варианты надвинуть шляпу оптимизатору у него получится лучше. Я ограничусь вариантами разработчика: - рассмотреть возможность создания мат. представления с целью заменить сортировку индексным доступом (разменять время при выборке на лишнюю нагрузку в процессе работы и дисковые просторы для хранения). - вариация на тему: разработать кастомный доменный индекс, который будет готовить искомый пресортированный датасет. - накидать pipelined, принимающую на вход пресортированные датасеты отдельных веток union all и выполняющую объединение в стиле Sort-Merge Join. ... прочие способы под общим девизом "готовь сортированный набор по мере изменения данных, отдавай одним проходом" Это уже что-то. Спасибо за наводку. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2021, 12:04 |
|
оптимизация сортировки
|
|||
---|---|---|---|
#18+
Вариант с pipelined может сильно облегчить жизнь если выборке требуется частичная сортировка (кластеризация относительно какого-то атрибута). В этом случае можно делать pipelined parallel enabled, указав ключ partitioning. Это позволяет не только задействовать на сортировке несколько ядер, но и экономить время на темпе (у каждого слейва будет свой sort area + кратно меньший объем для сортировки + возможность культурно обойти предел PGA для процесса) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2021, 12:10 |
|
оптимизация сортировки
|
|||
---|---|---|---|
#18+
andrey_anonymous Вариант с pipelined может сильно облегчить жизнь если выборке требуется частичная сортировка (кластеризация относительно какого-то атрибута). В этом случае можно делать pipelined parallel enabled, указав ключ partitioning. Это позволяет не только задействовать на сортировке несколько ядер, но и экономить время на темпе (у каждого слейва будет свой sort area + кратно меньший объем для сортировки + возможность культурно обойти предел PGA для процесса) выглядит сложно. Если на коленке для слепить файл - взял горсть сортированных курсоров, в виде массива, например, и мержи их до полной готовности файла синхронно-последовательно, как честный union all всегда раньше и работал. Убийство pga происходит при этом под твоим контролем. Если окажется, что получить сортированную ветку - тоже слишком дорого, то может и описанного вида канальная функция сгодится, тогда, вероятно, таки со вставкой в таблицу имени интеграции с индексами, поддерживающими нужный файлу порядок. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2021, 12:31 |
|
|
start [/forum/topic.php?fid=52&msg=40062632&tid=1880280]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
35ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
others: | 249ms |
total: | 395ms |
0 / 0 |