Как стать автором
Обновить

Комментарии 6

Раньше за такое минусовали, но всё же не удержусь. Спасибо за хорошую и подробную статью!
Нас покритиковали, что предыдущая была поверхностная. Мы услышали. Так что эта подробная :)
Продолжайте в том же духе :)
В роли бизнес юзера, т.е. без прав (и обязанностей) администратора базы я всегда добавляю модификаторы сессии diagnostic helpstats on for session; Tогда запуск EXPLAIN в конце текста показывает, каких статистик не хватает оптимайзеру. Сбор всех предложенных статистик по моим таблицам (исключительно на которые у меня и есть права) дешевле, чем запуск неоптимизированных запросов. Особенно из-за того что как бизнес юзер, я все-время создаю маленькие таблички для фильтрации или группировки, которые участвуют в джойнах.

Вообще я бы всем бизнес юзерам вставил макро, которое бы собирало статистики для таблиц в их SQL перед выполнением запроса. В тех DWH на Терадате, где я работал, это наверняка было бы лучше, чем терпеть неоптимизированные запросы начинающих юзверей.
Разница между наличием или отсутствием статистики иногда огромная. Практически можно либо перегрузить базу косым (skewed) запросом и получить нагоняй от админа, а главное такие запросы либо требуют гораздо больше времени или вообще не работают. Сбор же статистики сам по себе практически не виден в сумме потраченного CPU времени (по которому мы платим за систему).
Идея с автосбором статистик по мелким таблицам в песочницах бизнес-пользователей интересная. При таком подходе, правда, придется заставить пользователя запускать запросы через специальную процедурину (или хотя бы перед запуском самого запроса прогонять текст запроса через ту самую процедурину). Но возникает другой вопрос — какие статистики собирать, а какие нет. Diagnostic helpstats безусловно полезная штука, но ее тоже надо уметь готовить. Сбор всех под ряд рекомендованых статистик штука опасная. CPU время на сбор статистики и правда может быть мало, другой вопрос с IO. Потому что при сборе статистики происходит полное сканирование таблицы.
Я это к чему — автопомогалку по сбору статистики для песочниц бизнес-пользователей прикрутить можно, и это хорошая идея «на подумать». Но все равно потребуется вовлечение мозга, чтобы прикинуть сколько займет сам сбор статистики и насколько это поможет запросу. Можно встроить оценки по количеству строк в таблице и какие-то другие объективные критерии. В общем, есть над чем подумать)
P.S. Мы еще часто используем продукт TASM (Teradata Active System Management) для обнаружения «на лету» плохих пользовательских запросов, и, либо их остановки, либо выделения им отдельных ресурсов, чтобы они не мешали другим, или побыстрее выполнились и «вышли вон» из системы.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий