powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Подделка гистограм?
8 сообщений из 8, страница 1 из 1
Подделка гистограм?
    #39982283
sharkoff76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день
Имеется громадная таблица транзакций , пропартицированая по месяцам. примерное кол-во строк в каждой партиции варируется : 50 млн-200 млн строк.
Имеется перекос по счетам дебета и кредита на этой таблице.
Около 20 счетов активны так, что транзакции по ним составляют львинную долю (~80%).
Получается что при выборке со "страшного" счета за определенный период транзакции, лучше пройтись full scan ом по партиции. А для "не страшных" индексный доступ вполне себе хорош.
Получается, что нужно собирать гистограммы по "перекошенным" колонкам: дебета+дата транзакци и кредита+дата транзакции.

Но сбор занимает внушительное время.
Делаю так:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
BEGIN
  --SYS_P198014
  dbms_stats.gather_table_stats(ownname          => 'XXX',
                                tabname          => 'TRANSACTION',
                                partname         => 'SYS_P111111',
                                degree           => 8,
                                method_opt       => 'FOR ALL COLUMNS SIZE 1 FOR COLUMNS SIZE 254 (TR_DATE, ID_DEBIT)',
                                estimate_percent => 10);
END;



А можно ли эту саму статистику подделать/сэмулировать на основании того, что список "страшных" счетов заранее известен?
Если да то как?
...
Рейтинг: 0 / 0
Подделка гистограм?
    #39982494
PuM256
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sharkoff76,

Ну и зачем вам по таким большим партициям выборка в 10%? Скорее всего и 5%, и может даже 2.5% даст достаточный результат. И ещё добавьте block_sample => true.

В method_opt у вас неправильный синтаксис - список колонок должен идти перед SIZE. Да и вы уверены, что вам нужна именно расширенная статистика по группе колонок TR_DATE, ID_DEBIT и это нормально ляжет в 254 бакета?
...
Рейтинг: 0 / 0
Подделка гистограм?
    #39982585
sharkoff76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PuM256
sharkoff76,

Ну и зачем вам по таким большим партициям выборка в 10%? Скорее всего и 5%, и может даже 2.5% даст достаточный результат. И ещё добавьте block_sample => true.


Основная масса запросов идет к таблице транзакции как раз с датой/периодом транзакции + счет (дебета или кредита).
Поэтому принял решение делать сбор по паре

Запустил так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
BEGIN
  dbms_stats.gather_table_stats(ownname          => 'XXX',
                                tabname          => 'BC_REALIZEDTRANSACTION',
                                partname         => 'SYS_P111111',
                                degree           => 8,
                                method_opt       => 'FOR ALL COLUMNS SIZE 1 FOR COLUMNS (TR_DATE, ID_DEBIT) SIZE 254 ',
                                estimate_percent => 2.5,
                                block_sample     => TRUE);
END;



Это хотя бы стало работать около часа. Отлично. Появилась надежда не заниматься фигней вроде подделки статистики. Спасибо!
Правда пока желательный эффект, переключение плана выполнения для "страшного" счета на fullscan, не наступил.

понимание сколько же нужно выделить buckets пока не наступило. 254 вроде максимум.
...
Рейтинг: 0 / 0
Подделка гистограм?
    #39982620
PuM256
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Страшная комбинация (TR_DATE, ID_DEBIT) вообще попала в гистограмму?
...
Рейтинг: 0 / 0
Подделка гистограм?
    #39982623
PuM256
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Меня ещё немного смущает, что указана партиция и не указан параметр granularity. Оракл додумался пересобрать глобальную статистику?
...
Рейтинг: 0 / 0
Подделка гистограм?
    #39982667
sharkoff76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PuM256
Страшная комбинация (TR_DATE, ID_DEBIT) вообще попала в гистограмму?


По крайне мере когда я собирал по партиции по ID_DEBIT счет фигруировал в одном из бакетов.
Код: plsql
1.
2.
3.
4.
5.
6.
SELECT *
  FROM DBA_PART_HISTOGRAMS ph
 WHERE table_name = 'TRANSACTION'
   AND ph.partition_name = 'SYS_P111111'
   AND column_name = 'ID_DEBIT'
   AND endpoint_value = 12223131;



Как понять попала ли комбинация (TR_DATE, ID_DEBIT) ? - оракл вроде как кодит по своему усмотрению.
Как в этом убедится?
...
Рейтинг: 0 / 0
Подделка гистограм?
    #39982672
sharkoff76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PuM256
Меня ещё немного смущает, что указана партиция и не указан параметр granularity. Оракл додумался пересобрать глобальную статистику?


А она нужна?
Все эксперименты делались на отдельно взятой партиции и запрос натравливался именно на эту партицию.
...
Рейтинг: 0 / 0
Подделка гистограм?
    #39982713
PuM256
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sharkoff76
PuM256
Меня ещё немного смущает, что указана партиция и не указан параметр granularity. Оракл додумался пересобрать глобальную статистику?


А она нужна?
Все эксперименты делались на отдельно взятой партиции и запрос натравливался именно на эту партицию.

Если в плане PARTITION RANGE SINGLE, то, наверное, и не очень нужна.

sharkoff76

Как понять попала ли комбинация (TR_DATE, ID_DEBIT) ? - оракл вроде как кодит по своему усмотрению.
Как в этом убедится?

Для обслуживания расширенной статистики оракл добавляет в таблицу виртуальную колонку. Надо посмотреть её значение, а потом посмотреть гистограмму по этой виртуальной колонке в DBA_PART_HISTOGRAMS.

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


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