|
|
|
Сбор статистики по большой малоизменяемой и медленно растущей таблице.
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, уважаемы гуру Oracle БД, помогите пожалуйста чайнику разобраться с проблемой, по которой не удалось найти решения самостоятельно. Имеется: 1)Oracle 10.2 2)Большая медленно прирастающая таблица, партиционирование отсутствует, "старые" данные меняются редко. Проблема: Медленное выполнение сложных запросов к таблице. Подробности: Если вручную выполнять принудительный сбор статистики, то запросы существенно ускоряются. Хотелось бы автоматизировать, используя штатные средства, а не лепя "костыли" в виде дополнительных Job-ов в планировщике. Сам являюсь новичком. Штатная задача по сбору статистики обходит таблицу стороной, т.к. на сколько я понял из доков, объём изменённых данных менее 10%(что не удивительно). Вопросы к профессионалам: 1)Возможно ли для конкретной таблицы указать особые параметры анализа на необходимость сбора статистики, не трогая остальную БД? 2)Если да, как это сделать? 3)Возможно ли анализировать только последние изменения(мониторинг по таблице включён, но похоже я не совсем правильно понял принцип его работы)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 15:04 |
|
||
|
Сбор статистики по большой малоизменяемой и медленно растущей таблице.
|
|||
|---|---|---|---|
|
#18+
В 10.2 этого всего еще нет, если я правильно помню. Настройте отдельное задание на сбор статистики для этой таблицы. Еще разобраться бы, когда начинают съезжать планы, и какая статистика на это влияет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 15:26 |
|
||
|
Сбор статистики по большой малоизменяемой и медленно растущей таблице.
|
|||
|---|---|---|---|
|
#18+
NewUseЗдравствуйте, уважаемы гуру Oracle БД, помогите пожалуйста чайнику разобраться с проблемой, по которой не удалось найти решения самостоятельно. Имеется: 1)Oracle 10.2 2)Большая медленно прирастающая таблица, партиционирование отсутствует, "старые" данные меняются редко. Если база данных легально не покупалась, сделайте "партиционирование". Всё равно вы ничего не платите. Можете не платить еще больше! Если база данных покупалась легально, попробуйте использовать Partitioned View. Они появились в Oracle7 и работают до сих пор. Что это и как их сделать, найдите в интернете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 15:52 |
|
||
|
Сбор статистики по большой малоизменяемой и медленно растущей таблице.
|
|||
|---|---|---|---|
|
#18+
Валерий ЮринскийЕсли база данных легально не покупалась, сделайте "партиционирование". Всё равно вы ничего не платите. Можете не платить еще больше! Если база данных покупалась легально, попробуйте использовать Partitioned View. Они появились в Oracle7 и работают до сих пор. Что это и как их сделать, найдите в интернете. База покупалась, не Энтерпраиз, так что партицый нет, ок, почитаю по Partitioned View, спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 16:03 |
|
||
|
Сбор статистики по большой малоизменяемой и медленно растущей таблице.
|
|||
|---|---|---|---|
|
#18+
jan2aryНастройте отдельное задание на сбор статистики для этой таблицы. Еще разобраться бы, когда начинают съезжать планы, и какая статистика на это влияет. Ок, ясно, спасибо, значит костыли :( Я всё-таки полный чайник, разобраться, какая именно статистика влияет на планы запросов для меня ещё слишком сложная задача. Сбор полной статистики по таблицы, конечно занимает 3часа, но ночью вполне приемлемо, наверное так и поступлю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 16:16 |
|
||
|
Сбор статистики по большой малоизменяемой и медленно растущей таблице.
|
|||
|---|---|---|---|
|
#18+
NewUseВалерий ЮринскийЕсли база данных легально не покупалась, сделайте "партиционирование". Всё равно вы ничего не платите. Можете не платить еще больше! Если база данных покупалась легально, попробуйте использовать Partitioned View. Они появились в Oracle7 и работают до сих пор. Что это и как их сделать, найдите в интернете. База покупалась, не Энтерпраиз, так что партицый нет, ок, почитаю по Partitioned View, спасибо. Почитайте. Они должны работать и в стандартной редакции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 16:18 |
|
||
|
Сбор статистики по большой малоизменяемой и медленно растущей таблице.
|
|||
|---|---|---|---|
|
#18+
jan2ary, автосбор статистики появился с версии 10g. С версии 9i есть все необходимые запчасти для реализации самодельного автосбора статистики. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 16:32 |
|
||
|
Сбор статистики по большой малоизменяемой и медленно растущей таблице.
|
|||
|---|---|---|---|
|
#18+
NewUsejan2aryНастройте отдельное задание на сбор статистики для этой таблицы. Еще разобраться бы, когда начинают съезжать планы, и какая статистика на это влияет. Ок, ясно, спасибо, значит костыли :( Я всё-таки полный чайник, разобраться, какая именно статистика влияет на планы запросов для меня ещё слишком сложная задача. Сбор полной статистики по таблицы, конечно занимает 3часа, но ночью вполне приемлемо, наверное так и поступлю.скорее всего, проблема в монотонно растущих индексированных полях.... Общее распределение в этом случае сильно не меняется, но меняется верхняя граница значений. как вариант - вручную выставлять high_value для таких полей.. через подпрограммы пакета dbms_stats, отвечающие за ручное управление значениями статистик ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 16:36 |
|
||
|
Сбор статистики по большой малоизменяемой и медленно растущей таблице.
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эхjan2ary, автосбор статистики появился с версии 10g. С версии 9i есть все необходимые запчасти для реализации самодельного автосбора статистики.Автосбор - да. Тонкая настройка и инкрементальные статистики, о чем спрашивает ТС - с 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 16:39 |
|
||
|
Сбор статистики по большой малоизменяемой и медленно растущей таблице.
|
|||
|---|---|---|---|
|
#18+
NewUse(мониторинг по таблице включён, но похоже я не совсем правильно понял принцип его работы)?мониторинг лишь показывает примерное количество операций DML по таблице с момента последнего сбора статистики. Именно на данных этого мониторинга базируется автосбор, принимая решение - было ли по таблице 10% изменений или нет (там, конечно, ещё учитывается факты транкаций таблицы и удаления её сегментов, но к твоему случаю, скорее всего, это не имеет никакого отношения) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 16:44 |
|
||
|
Сбор статистики по большой малоизменяемой и медленно растущей таблице.
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эхкак вариант - вручную выставлять high_value для таких полей.. через подпрограммы пакета dbms_stats, отвечающие за ручное управление значениями статистик Просьба чуть по подробнее, если не сложно, пожалуйста, разве через dbms_stats возможна установка локальных параметров только на конкретную таблицу? Таблица действительно по сравнению с её объёмом прирастает не значительно, т.е. процент прирастания строк низкий, но при запросах идут в основном обращения именно к новым строчкам(индекс по дате), если это существенно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 16:49 |
|
||
|
Сбор статистики по большой малоизменяемой и медленно растущей таблице.
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эхмониторинг лишь показывает примерное количество операций DML по таблице с момента последнего сбора статистики. Именно на данных этого мониторинга базируется автосбор, принимая решение - было ли по таблице 10% изменений или нет (там, конечно, ещё учитывается факты транкаций таблицы и удаления её сегментов, но к твоему случаю, скорее всего, это не имеет никакого отношения) Можно ли как-то изменить параметры мониторинга конкретной таблицы? Транкаций по таблице не осуществляется, удаления сегментов как и какого-либо удаления данных из таблицы не происходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 16:52 |
|
||
|
Сбор статистики по большой малоизменяемой и медленно растущей таблице.
|
|||
|---|---|---|---|
|
#18+
NewUse, имелось ввиду, что для монотонно растущих индексированных полей (поле с датой вставки, числовое поле-инкремент из последовательности) можно значение статистик выставить вручную, а не собирать полным сбором. но тут - танцы с бубнами. нужно сделать экспорт статистики по нужной таблице и её индексам (dbms_stats.EXPORT_TABLE_STATS с трушным каскадом), подправить значения для верхних пределов, импортировать статистику обратно (dbms_stats.IMPORT_TABLE_STATS с трушным каскадом). для всех этих манипуляций предварительно нужно создать таблицу-приёмник под статистику (dbms_stats.CREATE_STAT_TABLE). Это тот самый костыль, который ты не хотел. Но, во-первых, позволяет актуализировать статистику, во-вторых, не напрягать сервер трехчасовыми марафонами по её расчету... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 17:05 |
|
||
|
Сбор статистики по большой малоизменяемой и медленно растущей таблице.
|
|||
|---|---|---|---|
|
#18+
Добрый Э - ЭхNewUse, имелось ввиду, что для монотонно растущих индексированных полей (поле с датой вставки, числовое поле-инкремент из последовательности) можно значение статистик выставить вручную, а не собирать полным сбором. Да, наверное это то, что нужно, ибо таких полей с избытком :) Добрый Э - Эхно тут - танцы с бубнами. нужно сделать экспорт статистики по нужной таблице и её индексам (dbms_stats.EXPORT_TABLE_STATS с трушным каскадом), подправить значения для верхних пределов, импортировать статистику обратно (dbms_stats.IMPORT_TABLE_STATS с трушным каскадом). для всех этих манипуляций предварительно нужно создать таблицу-приёмник под статистику (dbms_stats.CREATE_STAT_TABLE). Понимаю, что вопрос не совсем корректный, но на сколько эти манипуляции безопасно проводить на боевой нагруженной базе? Бэкапы, естественно, есть но не хотелось бы "дотюниться" до их распаковки :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 17:13 |
|
||
|
Сбор статистики по большой малоизменяемой и медленно растущей таблице.
|
|||
|---|---|---|---|
|
#18+
NewUse, манипуляции со статистикой относительно безопасны. базу порушить не должны. кроме того, все теми же импортами-экспортами можно сделать "резервную копию" эталонной статистики по таблице (текущая статистика). После этого поиграть с ручными установками значений. Если станет сильно хуже - восстановить статистику по таблицы из "эталонной" копии. у всех процедур по импорту-экспорту статистики есть параметр, отвечающий за идентификацию набора статистики. Вот и нужно выгрузить статистику дважды. Один раз с идентификатором "эталон", второй раз "для поиграть". подправить статистику "для поиграть" и выставить её как рабочую для таблицы. Если будет сильно хуже, вернуть в качестве рабочей статистику "эталон" в общем, почитай про указанные подпрограммы пакета dbms_stats... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 17:20 |
|
||
|
Сбор статистики по большой малоизменяемой и медленно растущей таблице.
|
|||
|---|---|---|---|
|
#18+
NewUse, https://github.com/xtender/xt_scripts/blob/master/stats/increase_high_value_of_date_cols.sql ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 17:29 |
|
||
|
Сбор статистики по большой малоизменяемой и медленно растущей таблице.
|
|||
|---|---|---|---|
|
#18+
Я бы не рекомендовал новичку играться с ручной установкой статистики на боевой базе. Там легко что-то не учесть и получить неконсистентый результат. Если есть возможность - лучше собрать стандартными процедурами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 17:33 |
|
||
|
Сбор статистики по большой малоизменяемой и медленно растущей таблице.
|
|||
|---|---|---|---|
|
#18+
Valergrad, в том и дела, что ТС хочет избавиться от трехчасовых расчетовстандарным сбором статистики, и сделать всё быстро другими доступными средствами. Оно и понятно - зачем пересчитывать статистику по охулиарду записей, если ты прекрасно знаешь, что у тебя в таблицу добавилось всего пару охулионов записей? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 17:36 |
|
||
|
Сбор статистики по большой малоизменяемой и медленно растущей таблице.
|
|||
|---|---|---|---|
|
#18+
Добрый Э - ЭхValergrad, в том и дела, что ТС хочет избавиться от трехчасовых расчетовстандарным сбором статистики, и сделать всё быстро другими доступными средствами. Оно и понятно - зачем пересчитывать статистику по охулиарду записей, если ты прекрасно знаешь, что у тебя в таблицу добавилось всего пару охулионов записей? Да, но кто знает сколько там записей? Возможно там всего-то несколько десятков гигабайт, и статистика нормально соберется ночью. Я всего лишь хотел сказать, что для ручной установки статы нужно понимать что устанавливать, в какие значения, как и зачем. Это требует неплохой квалификации, иначе можно сделать только хуже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 17:40 |
|
||
|
Сбор статистики по большой малоизменяемой и медленно растущей таблице.
|
|||
|---|---|---|---|
|
#18+
NewUse, возможен вариант, что в данном случае сбор статистики не помогает, а вредит. Насколько понимаю, база находится в "хорошем" состоянии (запросы работают быстро) а спустя некоторое время запросы начинают тормозить думаю, что происходит следующее вместе с очередным штатным сбором статистики, курсоры инвалидируются и при следующем выполнении строятся новые планы но как указали выше, из-за наличия "монотонно растущих полей" и параметров запросов использущих "текущие" значения (например тот же SYSDATE) планы получаются неверные поробуйте вообще отключить штатный сбор статистики и собрать ее по всем таблицам вручную если источником инвалидации курсоров является не только сбор статистики, то такой вариант скорее всего не поможет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2018, 20:30 |
|
||
|
Сбор статистики по большой малоизменяемой и медленно растущей таблице.
|
|||
|---|---|---|---|
|
#18+
NewUse, Собирайте статистику штатно, указав параллелизм (direct read будет шустрее) и estimate present = 3, к примеру. Этого будет достаточно для установки high value ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2018, 00:22 |
|
||
|
Сбор статистики по большой малоизменяемой и медленно растущей таблице.
|
|||
|---|---|---|---|
|
#18+
NewUseЯ всё-таки полный чайник, разобраться, какая именно статистика влияет на планы запросов для меня ещё слишком сложная задача. это проще чем кажется: когда все тупит и перед пересбором выгрузи статистику в отдельную табличку. после пересбора выгрузи туда же и сравни. Вряд ли влияет то что в таблице было 10000000 записей, а стало 10000100. А вот какие-нибудь high value по значениям в столбце могут натолкнуть на мысль. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2018, 03:30 |
|
||
|
Сбор статистики по большой малоизменяемой и медленно растущей таблице.
|
|||
|---|---|---|---|
|
#18+
Вновь столкнулся с той же проблемой на другой БД, но та же 10-ка. Не помню, как диагностировал, но что-то статистика редко собирается по одной из таблиц. Напомните, пожалуйста, как получить текущее значение estimate_percent по конкретной таблице, чтобы понять, действительно ли не достигнут порог необходимый для повторного анализа таблицы, или же дело в чём-то другом и причина несбора статистики более сложная? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2018, 10:48 |
|
||
|
Сбор статистики по большой малоизменяемой и медленно растущей таблице.
|
|||
|---|---|---|---|
|
#18+
NewUseВновь столкнулся с той же проблемой на другой БД, но та же 10-ка. Не помню, как диагностировал, но что-то статистика редко собирается по одной из таблиц. Напомните, пожалуйста, как получить текущее значение estimate_percent по конкретной таблице, чтобы понять, действительно ли не достигнут порог необходимый для повторного анализа таблицы, или же дело в чём-то другом и причина несбора статистики более сложная?Вы уверены, что правильно понимаете смысл параметра estimate_percent ? Если вам нужно мониторить процент измененных строк в таблице и принимать решение о необходимости пересбора статистики по таблице, то estimate_percent - это НЕ то, что вам нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2018, 12:04 |
|
||
|
Сбор статистики по большой малоизменяемой и медленно растущей таблице.
|
|||
|---|---|---|---|
|
#18+
Да, не корректно написал, мне хотелось бы понять, как Oracle принимает решение о необходимости пересбора статистики по таблице. Хочу вручную посчитать, достигнут ли порог по конкретной таблице и понять причина в слишком высоком пороге или например в нехватке окна обслуживания или ещё в чём-то.... Вроде ранее находил соответствующие запросы или процедуры, но сейчас гугл не помог. Мониторинг по таблице, естественно, включен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2018, 12:18 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39589221&tid=1883616]: |
0ms |
get settings: |
7ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
57ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
81ms |
get tp. blocked users: |
2ms |
| others: | 203ms |
| total: | 391ms |

| 0 / 0 |
