powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Статистика, bind переменные, партиционирование
8 сообщений из 8, страница 1 из 1
Статистика, bind переменные, партиционирование
    #39402341
Idini4ka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Столкнулся с проблемой неоптимальных планов.

Вводные.
Версия oracle 12.1.0.2.0. Есть большая партиционированная табличка (tab1, key1 - ключ партиционирования, key2 - ключ субпартиционирования). Данные по партициям распределены неравномерно. Статистика собрана. Есть процедура на pl/sql, в которой довольно большой запрос, использующий данную табличку(соединения, аналитика и т.д., не суть). Входными параметрами передаются значения (in_p1, in_p2), по которым определяется требуемая при выборке субпартиция. Если совсем упрощенно, то SELECT * FROM tab1, tab2 WHERE key1=in_p1 AND key2=in_p2 AND tab1.id=tab2.id;

Проблема
При построении плана оценка количества строчек при выборке из таблицы в десятки раз расходится с реальностью для конкретных значений. Как итог, неоптимальный план. Если вместо переменных подставить реальные значения, то план корректный.

Кто-нибудь сталкивался с подобным? Какие есть варианты решения, кроме перехода на динамический sql и изменения плана хинтами?

P.S. Пробовал alter session set "_disable_cursor_sharing" = true; и alter session set "_optim_peek_user_binds"=false; Изменений в части оценки количества строчек не было.
...
Рейтинг: 0 / 0
Статистика, bind переменные, партиционирование
    #39402383
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Idini4ka.. Если вместо переменных подставить реальные значения, то план корректный...
запрос перепроверьте на соответствие типов атрибутов столбцам таблицы (особенно ключевых)
...
Рейтинг: 0 / 0
Статистика, bind переменные, партиционирование
    #39402397
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Idini4kaДанные по партициям распределены неравномерноесли неравномерно, и большая часть запросов работает с известной частью партиций - хинтовать надо.
Ораклятина-то не знает с какой частью перекошенных данных вы собираетесь работать.
...
Рейтинг: 0 / 0
Статистика, bind переменные, партиционирование
    #39402404
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ораклятина-то знает, если статистика собиралась с глистограммами
Вот только первый вызов с биндами может сформировать плохой (в общем случае, для данного вызова как раз оптимальный) план, а дальнейшие вызовы будут его использовать.

Если все так уж перекошено, то, может быть, есть смысл разделить операторы в зависимости от key1-key2 -- добавить, например комментарии. Т.е. сформировать несколько планов и дергать их не через NDS, а через IF-THEN-ELIF-...

Ну и вроде как Adaptive Cursor Sharing должен со 2-3 вызова это сам разрулить
...
Рейтинг: 0 / 0
Статистика, bind переменные, партиционирование
    #39402406
Idini4ka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
orawishзапрос перепроверьте на соответствие типов атрибутов столбцам таблицы (особенно ключевых)
Все корректно.

--Eugene--если неравномерно, и большая часть запросов работает с известной частью партиций - хинтовать надо.
Ораклятина-то не знает с какой частью перекошенных данных вы собираетесь работать.
Вот мне кажется, что где-то в этом направлении и проблема. Такое чувство, что план берется для другого набора bind переменных. Можно ли как-то заставить оптимизатор проверять значения переменных перед построением плана? С хинтами не получится, так как число запусков для каждой партиции одинаково. Добавлю, что запусков в сутки относительно немного.
...
Рейтинг: 0 / 0
Статистика, bind переменные, партиционирование
    #39402409
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Idini4kaзапусков в сутки относительно немного.Тогда использовать NDS+литералы и перестать беспокоиться
...
Рейтинг: 0 / 0
Статистика, bind переменные, партиционирование
    #39402412
Idini4ka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вячеслав ЛюбомудровЕсли все так уж перекошено, то, может быть, есть смысл разделить операторы в зависимости от key1-key2 -- добавить, например комментарии. Т.е. сформировать несколько планов и дергать их не через NDS, а через IF-THEN-ELIF-...
Думал над этим. Но тогда придется поддерживать в актуальности несколько версий одного и того же кода. Это не очень удобно.

Вячеслав ЛюбомудровНу и вроде как Adaptive Cursor Sharing должен со 2-3 вызова это сам разрулить
Различных значений key1 немного, а вот key2 - это дата (каждый день новая). Возможно, это и влияет.
...
Рейтинг: 0 / 0
Статистика, bind переменные, партиционирование
    #39403287
Idini4ka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
UP.

Появилась еще идея разбить табличку на несколько по числу партиций, тогда распределение внутри каждой таблицы получится более или менее равномерное, но хотелось бы обойтись без этого. Есть у кого-нибудь еще идеи/варианты?
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Статистика, bind переменные, партиционирование
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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