|
ASA 11 Оптимизация и drop statistics
|
|||
---|---|---|---|
#18+
В общем такая проблема ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2010, 19:40 |
|
ASA 11 Оптимизация и drop statistics
|
|||
---|---|---|---|
#18+
С какого-то момента сервак начал тормозить при выполнении запроса drop statistics в разы увеличивает скорость но не надолго Сейчас только на 1 раз - потом опять тормозит версия 11.0.1.2472 Что делать? Как отключить использование статистики навсегда? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2010, 19:45 |
|
ASA 11 Оптимизация и drop statistics
|
|||
---|---|---|---|
#18+
drop statistics это не выход вообще. Использование статистики это основа основ cost based optimizers, так что его отключить нельзя. Попробуйте разобраться, в чем проблема, проанализируйте планы запросов. В плане видно, как оптимизатр оценивает вероятности велчиин в запросе исходя из имеющейся статистики. Соотнесите оценки оптимизатора с реальным распределением величин. Если они сильно расходятся, то значит проблема в статистике. Статистика поддерживается автоматически в sa11 и вообьще должно быть все в порядке. Статистика может разъезжаться после загрузки большого объема данных. В этом случае делайте после загрузки create statistics. Та постановка вопроса, что у вас есть сейчас крайне поверхностна, вы не приложив усилий не получите результат. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2010, 19:52 |
|
ASA 11 Оптимизация и drop statistics
|
|||
---|---|---|---|
#18+
Какие усилия я должен прилагать, каждый запрос анализировать? (у меня их сотни- тысячи в приложении) Да эффект частный есть, например если хинт поставить в конкретном запросе Только почему база перестает сама оптимизировать как надо запрос, ведь совсем не факт что мой хинт будет хорош на другом наборе данных. Те не использует она нужный индекс и все. И для его использования статистика не нужна и так ясно что условие на индексированное поле. Еще раз: Начинает тормозить ВСЕ и это прогрессирует по мере работы с базой Массовой заливки и стирания данных нет. Индексы какие надо есть. Наблюдается все это на базах совершенно разной структуры ЯВНО и СРАЗУ проявляется если переписать базу с одного компа на другой - ну тут я могу понять - железо разное - старая статистика мб неверной. ЛЕЧИТСЯ 1) иногда успешно drop statistics drop statistics ни разу в моих тестах не привела к увеличила времени исполнения запроса - ЗАЧЕМ ТОГДА статистика нужна? В данном случае помогало ровно на один запрос. 2) иногда успешно добавлением размера кеша Проходило для маленьких баз, тормозивших по непонятным причинам 3) всегда успешно - перестройкой базы с выкидыванием статистики ----------------------------------- Эти наблюдения позволяют утверждать следущее: оптимизатор ASA работает некорректно в плане использования статистики начиная с 9-й версии по 11 версию как минимум ------------------------------------ Вопрос остается - можно ли что-нибудь сделать для минимизации данного эффекта поигравшись настройками базы или выполнением профилактических действий. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2010, 12:18 |
|
ASA 11 Оптимизация и drop statistics
|
|||
---|---|---|---|
#18+
PS create statistics - только ухудшало ситуацию в моем конкретном случае ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2010, 12:20 |
|
ASA 11 Оптимизация и drop statistics
|
|||
---|---|---|---|
#18+
Гриценко А.В.PS create statistics - только ухудшало ситуацию в моем конкретном случае Не, ну что тут сложного?! Если есть КОНКРЕТНЫЙ запрос, который после построения статистики начинает тупить, то надо его взять и проанализировать. Смысл не в том, чтобы перебрать все запросы, а в том, что разворачивая конкретную ситуацию можно докопаться до истинной причины торможения множества запросов, до некой системности. Понимаете? Вот у меня проблема обратная, иногда и непредсказуемо портится статистика. Ее перестроение решает проблему, запросы начинают выполняться нормально. Но не буду же я каждый час перестраивать по шедулеру статистику?! Вот это дейстивтельно проблема. А когда со свежей статистикой запрос идет корявым путем, так это железобетонно причина либо в запросе, либо в структуре БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2010, 14:18 |
|
ASA 11 Оптимизация и drop statistics
|
|||
---|---|---|---|
#18+
Что-бы вам смогли оказать помощь на этом форуме надо: 1. Взять конкретный запрос, который тормозит 2. Получить его план и выложить его на форум 3. Попутно показать структуру таблиц, которые участвуют в запросе, указать какие индексы есть по искомым таблицам. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2010, 15:11 |
|
ASA 11 Оптимизация и drop statistics
|
|||
---|---|---|---|
#18+
просто очень много вопросов. То, что помогает перегрузка базы намекает, что может где-то сильно влияет фрагментация данных, может у вас там кластерная таблица, может еще чего-то. Слишком много вариантов. Почитайте в справке все что касается статистикой, например разделы: SQL Anywhere® Server - SQL Usage > Query Optimization and Execution SQL Anywhere® Server - SQL Usage > Query Optimization and Execution > How the optimizer works Optimizer estimates and column statistics есть опции БД: update_statistics option [database] collect_statistics_on_dml_updates option [database] Есть неплохая статья от разработчика SA: http://iablog.sybase.com/paulley/2010/09/analyzing-clustered-indexes/ На крайний случай есть такая экзотика как хинты кардинальности. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2010, 15:24 |
|
ASA 11 Оптимизация и drop statistics
|
|||
---|---|---|---|
#18+
Ggg_old, Спасибо Эти опции не влияют на поведение плохой базы update_statistics option [database] collect_statistics_on_dml_updates option [database] В плохой базе по плану запроса выбирается неправильных индекс kol_ost в хорошей (перестроенной) правильный ntipdoc После drop statistics ОДИН РАЗ в плохой базе все хорошо - затем все то же Кластерных индексов нет Массовой заливки и стирания данных тоже Хинт помогает для этого случая - но он не универсален в общем-то Планы запросов прилагаются ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2010, 19:05 |
|
ASA 11 Оптимизация и drop statistics
|
|||
---|---|---|---|
#18+
1) Это запросы выполненные на разных серверах? 2) смотрим секцию advanced details Видно, что в случае "хорошего" запроса оптимизатор оценивает: tdoc.kol_op > 0 : 91.111% Statistics - т.е. почти вся таблица и индекс kol_ost не канает tdoc.ntipdoc > 0 : 19.112% Statistics - поэтому выбирается индекс ntipdoc. В "плохом" запросе видим: tdoc.kol_op > 0 : 0.57912% Statistics - поле индекса kol_ost tdoc.ntipdoc > 0 : 22.848% Statistics - поле индекса ntipdoc т.е. здесь индекс kol_ost на два порядка предпочтительнее Итого камнем преткновения является статистика по колонке tdoc.kol_op Дабы не гадать, на "плохом" сервере сделайте select count(*) from tdoc select count(*) from tdoc where tdoc.kol_op > 0 И все станет ясно, где собака порылась. Вообще-то еси статистика на плохом сервере не верна, то ее перестройка должна помочь. Оптимальнее даже будет перестроить индекс не по всей таблице, а по конкретной колонке. Обязательно отпишитесь о результатах P.S. Вообще, даже выбор индекса ntipdoc в вашем случае уже на грани риска, ибо tdoc.ntipdoc > 0 : 19.112% могут заставить сервер при определенных обстоятельствах выбрать tablescan. Т.е. сами по себе имеющиеся индексы не достаточно хороши для приведенной конкретной ситуации. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2010, 20:53 |
|
ASA 11 Оптимизация и drop statistics
|
|||
---|---|---|---|
#18+
Скорее всего здесь дело именно в неверной структуре. Судя по всему, в результирующий набор попадает очень много данных при низкой селективности tdoc.kol_op и tdoc.ntipdoc. Это становится равносильно сканированию таблицы со всеми вытекающими. Нужно ограничить объем выборки, либо условием и индексом по дате, либо модификаторами TOP N. Может нужно показать оператору только первые/последние? Или по какому-то условию и он что-то ищет? Или грамотный пэйджинг организовать нужно? Ну в чем смысл получения четверти ВСЕЙ таблицы на клиента? С годами такие системы будут только тяжелеть, пока все не встанет. И второй момент. Как оцениваете скорость выполнения запроса? В ISQL? Ну тут есть подводный камень. При насильном указании индекса может сложится впечатление, что все хорошо, запрос отрабатывает, данные быстренько попадают в ISQL. Но это ложное впечатление, т.к. на получение ПОЛНОГО набора данных серверу придется работать гораздо дольше. А ISQL прекращает выполнение запроса сразу после получения первых ХХХ записей, а это не одно и тоже. И еще один момент. Есть такая опция, которая кардинально может поменять поведение сервера. OPTIMIZATION_GOAL. Все запросы на сервере будут выполняться, либо с точки зрения сокращения времени получения первой порции данных, либо общего времени получения данных (по умолчанию). Мало ли, вдруг она попорчена кем-то... ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2010, 23:25 |
|
ASA 11 Оптимизация и drop statistics
|
|||
---|---|---|---|
#18+
Запросы на одном и том же сервере Одна база только что перестроена, другая работала ~год после перевода на с 9 на 11 Время оценивалось честное - по работе приложения. Конечно можно оптимизировать структуру данных для конкретного запроса, например создать некое расчетное поле к примеру act=if kol_op*ntipdoc>0 then 1 else 0 endif c индексом по нему специально для такого запроса и условие поменять на act=1. Индекс Kol_ost - действительно неэффективен, согласен. Может пример не самый хороший, но периодически начинает тормозить ВСЕ, не только этот запрос Попытки оптимизации отдельных запросов не то чтобы бесполезны но трудоемки и в целом малоэффективны. Поэтому когда начинает заметно тормозить удаляю статистику и если не помогает то перестраиваю базу. На этом реальном запросе (со всеми наворотами которые я здесь не показал) разница по времени исполнения минимум 5 - 10 раз Остаются вопросы - почему на абсолютно одинаковых (по данным) базах и железе разный результат работы оптимизатора. ------------------- В "плохом" запросе видим: tdoc.kol_op > 0 : 0.57912% Statistics - поле индекса kol_ost - вот это полный бред!!! реально >90% Те статистика неверна, вопрос почему ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2010, 13:31 |
|
ASA 11 Оптимизация и drop statistics
|
|||
---|---|---|---|
#18+
Итак можно сделать два вывода 1) Причина неправильного поведения оптимизатора(появления неправильной статистики) пока не ясна, лекарство от этого не найдено 2) Сделав хинты и более эффективную структуру можно отчасти скомпенсировать ошибки оптимизатора и минимизировать тормоза связанные со "старением" базы В общем, всем спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2010, 13:41 |
|
ASA 11 Оптимизация и drop statistics
|
|||
---|---|---|---|
#18+
Млин, вы так и не сделали того, чего я просил. Перестройте статистику по колонке и повторите запрос. И при переходе с 9-ки на 11-ю версию вы базу перегружали или просто подцепили к SA11? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2010, 14:11 |
|
ASA 11 Оптимизация и drop statistics
|
|||
---|---|---|---|
#18+
Я делал все это в разных вариантах без особого успеха Нашел одну закономерность как ведет себя сейчас плохая база. Если database option "update_statistics" (надо реконнектится при смене опции базы) = off Работает стабильно те после drop statistics tdoc а равно create statistics tdoc; работает как надо и вроде не ломается = on Работает нестабильно после drop statistics tdoc работает 1 раз хорошо потом плохо после create statistics tdoc работает вроде как хорошо !!! в предшествующих экспериментах точно не помогало!!! - скрипты тестов сохранены ТЕ МБ имеет смысл ставить update_statistics=off и мб периодически делать create statistics --- PS collect_statistics_on_dml_updates option = off (не влияло но и UPDATE не было) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2010, 16:55 |
|
ASA 11 Оптимизация и drop statistics
|
|||
---|---|---|---|
#18+
После сброса статистики сервер начинает работать на принципах древнего rule based оптимизатора). Так как реальное распределение величин по столбцам отсутствует, то сервер оценивает селективность исходя из используемых операторов в where. Я уже не помню точно цифры, но было что-то такое: where col=величина (считало, что затрагивается малое кол-во величин, селективность около процента) col>величина (считается, что затрагивается большое кол-во величин, селективность процентов 90) двойное неравенство считало, что селективность где-то посередине. И исходя из этих грубых оценок и выбирался план выполнения. Так что сброс статистики просто по счастливому стечению обстоятельств вам помог. автор после create statistics tdoc работает вроде как хорошо !!! в предшествующих экспериментах точно не помогало!!! - скрипты тестов сохранены ТЕ МБ имеет смысл ставить update_statistics=off и мб периодически делать create statistics Вывод как раз наоборот - установить автообновление статистикой и сделать один раз построение статистики. И вы по-прежнему не хотите разобраться в ситуации и ищите легких и простых путей. Например вопрос про формат базы при переходе с 9-й на 11ю версию важен. Надо базу было создать заново в sa11 и полностью перегрузить содержимое, еси этой процедуры при миграции на sa11 не было. Еще вопрос, а какие значения в поле kol_op вообще? select kol_op, count(*) from tdoc group by kol_op ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2010, 22:03 |
|
ASA 11 Оптимизация и drop statistics
|
|||
---|---|---|---|
#18+
Для сведения: база 9-й версии не стартует на 11 сервере ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2010, 22:38 |
|
ASA 11 Оптимизация и drop statistics
|
|||
---|---|---|---|
#18+
ну да ладно, вы видать для себя уже решение приняли и дальше копать не хотите. А мне было бы любопытно посмотреть еще на гистограмму статистики сервера и реальную. Может там дело в диапазонах или еще чего. А то, что ручная перестройка статистики не помогла, мне не верится. Так не бывает. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2010, 23:24 |
|
ASA 11 Оптимизация и drop statistics
|
|||
---|---|---|---|
#18+
Те база само собой создавалась под 11 и туда заливались данные Да и перестраивалась потом наверняка. Похожие проблемы наблюдались давно и на разных базах те в 9-й версии все то же самое - база "стареет" и начинает тормозить Проблема не в отдельных запросах а в общей тенденции ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2010, 23:30 |
|
ASA 11 Оптимизация и drop statistics
|
|||
---|---|---|---|
#18+
ну тогда периодически устраивайте базе create statistics как профилактическую меру. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2010, 10:19 |
|
ASA 11 Оптимизация и drop statistics
|
|||
---|---|---|---|
#18+
авторКонечно можно оптимизировать структуру данных для конкретного запроса, например создать некое расчетное поле к примеру act=if kol_op*ntipdoc>0 then 1 else 0 endif c индексом по нему специально для такого запроса и условие поменять на act=1. Такого рода поля - флаги, очень плохие с точки зрения единственного условия поиска. Среднестатистически, флаг с двумя значениями поделит таблицу пополам. Если три значения, то на три части. Смысл в нем и его индексе, если эту безграмотность сервер в основном будет игнорить? Игнорить не будет только опираясь на свою статистику. Но при проектировании, не нужно полагаться на способности сервера. А у Вас "кривое" проектирование. Пока все влезает в кэш, будет все работать быстро. Пока данные упорядочены (после ребилда), тоже все будет работать быстро, т.к. данные последовательно начитываются в кэш и последовательное чтение таблиц несильно заметно. Но это все только "пока", до недавнего времени. авторПохожие проблемы наблюдались давно и на разных базах те в 9-й версии все то же самое - база "стареет" и начинает тормозить Проблема не в отдельных запросах а в общей тенденции Общая тенденция - безграмотность. Упертость и "глухота", вот что Вам мешает решить проблемы. Для начала разобраться какой объем выборки действительно нужен пациенту. Если для печати отчетов - это одно дело, там можно ввести их ночную подготовку (или преподготовку), если на экран юзеру, то какого лешего читать всю живую таблицу? Если данных под запрос попадает мало, а таблица здоровая, то подумать над тем, как это множество однозначно изолировать от остального при помощи одного индекса. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2010, 10:38 |
|
ASA 11 Оптимизация и drop statistics
|
|||
---|---|---|---|
#18+
iLLer, < ............ > Модератор: Лучше бы спасибо сказал. Так нет. По поводу использования статистики оптимизатором я остался при своем мнении: Плохо он ее использует и собирает Удаление статистики вообще и запрет ее сбора дает лучший эффект чем создание Гриценко А.В. , тебе нужно понять два момента: -- любой оптимизатор не может оптимизировать хорошо все запросы. Порядка 80% он оптимизирует хорошо, 20% - плохо. -- любой сбор статистики -- это ПОТЕРЯ ИНФОРМАЦИИ. Луче бы привёл конкретные проблемы и конкретные запросы, как уже просили. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2010, 00:10 |
|
ASA 11 Оптимизация и drop statistics
|
|||
---|---|---|---|
#18+
Кcтати в ASA 11 есть еще одна "хорошая" опция - многопроцессорность в ходе одного запроса max_query_task если указать =1 то на относительно слабых машинках точно в разы быстрее работает чем при =0 как по умолчанию. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2010, 00:17 |
|
ASA 11 Оптимизация и drop statistics
|
|||
---|---|---|---|
#18+
Гриценко А.В.iLLer, Вам бы лучше помолчать если по делу сказать нечего... Вам по делу было сказано не один раз. Если сударь изволит игнорировать ответы, то нечего ходить на форумы и спрашивать. А раз задаете вопросы, то надо их не только видеть, но и читать. И нечего обижаться на "безграмотность". Вещи надо называть своими именами. И постыдного в этом ничего нет, это не обзывательство. А затыкать меня не нужно. Не в тех мы здесь отношениях, чтобы указывать друг другу, что нужно делать. Если Вам будет угодно, в следующий раз пройду мимо Вашей проблемы. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2010, 15:14 |
|
|
start [/forum/moderation_log.php?user_name=Allbest]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
56ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
others: | 703ms |
total: | 894ms |
0 / 0 |