![]() |
![]() |
|
На заметку MS SQL | ☑ | ||
---|---|---|---|---|
0
GunKata
25.12.13
✎
09:45
|
Всем утра. На заметку.
У нас база довольно большая, около 300 ГБ и кол-во пользователей около 400 онлайн в ней. И вот вчера случился локальный армагедон. База встала колом. В итоге расследований оказалось, что в ночном задание на SQL сервере перестало делаться обновление статистики. В этом задании была цепочка из стандартных процедур, чек - статистика-кэш-логи-бэкап. И на последнем этапе отправка письма админу, что бэкап ок. Но переходы были безусловные, то есть не отправлялась письмо сделано или нет задания внутри. А корректность выполнения проверялась только по последней задаче. В общем очередное кровавое правило, следить за всем пошагово. |
|||
1
skunk
25.12.13
✎
09:49
|
хм вроде как правило древнее - каждый сам следит за месячными своих подруг
|
|||
2
GunKata
25.12.13
✎
09:51
|
(1) Ну как любое правило в ППД основано на крови, так и тут 4 года работало все штатно.
|
|||
3
ifso
25.12.13
✎
09:53
|
(2)
> 4 года работало все штатно Откуда это известно, если "переходы были безусловные, то есть не отправлялась письмо сделано или нет задания внутри" ?) |
|||
4
ifso
25.12.13
✎
09:55
|
(3) с другой стороны и сабжевая ситуация штатная, т.к. штатно "переходы были безусловные..."
|
|||
5
dk
25.12.13
✎
09:58
|
т.е. за 4 годы было лениво логи заданий почитать хоть раз?
|
|||
6
xReason
25.12.13
✎
10:04
|
База 300 на гигов говорит, что она уже не так молода и за ней надо приглядывать лучше
|
|||
7
ДенисЧ
25.12.13
✎
10:06
|
(6) 300 гигов - это вообще малютка....
|
|||
8
kiruha
25.12.13
✎
10:07
|
И что из одного пропущенного обновления стаистики база встала колом ?
Что за ? |
|||
9
kiruha
25.12.13
✎
10:09
|
Вообще по рекомендациям майкрософт
>> Рекомендуется не обновлять статистику слишком часто, поскольку необходимо найти баланс между выигрышем в производительности за счет усовершенствованных планов запросов и потерей времени на перекомпиляцию запросов. << Т.е. в 0 - лажа |
|||
10
ЧеловекДуши
25.12.13
✎
10:09
|
(0) Проверь, может у вас закончилось дисковое пространство :)
|
|||
11
упс
25.12.13
✎
10:37
|
(8) учитывая, что на больших таблицах сама по себе статистика обновляется только при изменении 20% строк - то запросто, особенно, если в предыдущий день были какие-то операции затрагивающие множество строк в какой-нибудь жирной таблице, типа регистра бухгалтерии.
(9) ну, тащемта, надо учитывать какое количество планов вообще повторно используется. В моей базе 90% планов используются всего 1 раз, а 98% - не более 4-х раз. Оставшиеся два процента на картину вообще никак не повлияют. |
|||
12
kiruha
25.12.13
✎
10:47
|
(11)
Тогда если 90% планов используются всего 1 раз - частое только ухудшит. В любом случае - от того, что пара запросов будет выполняться не с самым оптимальным планом - база колом не встанет Только если они месяц статистику не обновляли, да она еще при этом и не автообновлялась. Но вместо поиска реальной причины - нашли невыполневшееся задание - и свалили все на него |
|||
13
vqwy
25.12.13
✎
10:48
|
(2) ППД? Не, не слышал
|
|||
14
toypaul
гуру
25.12.13
✎
11:05
|
у кого это в Ижевске такая база?
|
|||
15
GunKata
25.12.13
✎
11:07
|
(8) Как ни странно да. Вернее конечно не колом, работа шла но очень медленно.
|
|||
16
GunKata
25.12.13
✎
11:08
|
(10) Нет, ночью проделал операции вручную и проконтролировал, что прошло обновление и все стало гуд.
|
|||
17
kiruha
25.12.13
✎
11:29
|
Ну вот ты обновил статистику.
Сервер понял что в физ табл регистр бухгалтерии не 10 млн записей , а 10.5 млн. Что в табл соотв. спр организаций не 30, а 35 записей. Что различных значений в столбце "счета" рег бухгалтерии(физ табл) их не 300 а 330, на "62.01" приходится 500 000, а не 458 000 записей Как это кардинально повлияет на работу ? Все индексы фиксированы. |
|||
18
GunKata
25.12.13
✎
11:36
|
(17)Что бы не спорить, сошлюсь на эту статью http://kb.1c.ru/articleView.jsp?id=13
и её часть - Оптимальная частота обновления статистик зависит от величины и характера нагрузки на систему и определяется экспериментальным путем. Рекомендуется обновлять статистики не реже одного раза в день. |
|||
19
GunKata
25.12.13
✎
11:38
|
(18) И да в этой статье идет речь о контроле кстати :)
|
|||
20
GunKata
25.12.13
✎
11:39
|
(17) И еще можно узнать о размере вашей базы 1С и плане её обслуживания, тогда что ли :)
|
|||
21
kiruha
25.12.13
✎
11:42
|
А я сошлюсь на
http://www.sql.ru/articles/mssql/2005/081301statisticsinsqlserver2005.shtml это как устроено, а не как один 1С ник сказал и все дружно перепосты делают и читают доку из 2 стр "статистика для чайников" Зачем SQL серверу статистика. Ты соеденяешь 2 таблицы - ему нужно понять какая маленькая какая большая.Или выборка по столбцам. Или какой из конкурирующих индексов использовать. Обновляй хоть каждый час - регистр бухгалтерии меньше спр сотрудников не станет. Поэтому автообновление у майкрософта и стоит на 20% - на случай резкого изменения соотношений размеров таблиц |
|||
22
GunKata
25.12.13
✎
11:51
|
(21) Увы для вас, я буду доверять официальной рекомендации 1С и буду делать обновлении статистики каждый день, тем более на личном опыте понял что значит пропустить один рабочий день в обновлении.
Если вы предпочитаете для своих баз 1С делать раз в неделю, ваш выбор |
|||
23
kiruha
25.12.13
✎
11:56
|
(22)
Почему Увы для меня - ? Да ради бога хоть каждый час делайте. Вроде как официальные рекомендации Майкрософт - только защищаю ? Только потом на досуге для себя самого поинтересуйтесь - для чего вы это делаете и к чему это приводит. И почему у Вас упала производительность |
|||
24
kiruha
25.12.13
✎
12:03
|
Напоследок на пальцах
Вы делаете выборку документов по ИД и Дате в диапазоне Скл имеет 2 условия не понимет какое первое делать Смотрит статистику - видит что по Ид одна запись на таблицу на Дату 5000. Принимает решение по Ид сначала выбирать Удачи ! |
|||
25
упс
25.12.13
✎
12:10
|
(17) дело не только в количестве, но и в распределении этих данных.
Т.е., условно говоря, sql server строит такую гистограмму (для таблицы с 8 млн записей), для индекса по дате в РБ: 01.01.2012 - 40 тыс записей 31.01.2012 - 40 тыс записей 18.02.0212 - 40 тыс записей 11.03.2012 - 40 тыс записей 22.03.2012 - 40 тыс записей ....(ещё 194 периода по 40 тыс) 31.11.2013 - 40 тыс. записей то он думает, что любой запрос с отбором по периоду с 19.02.2012 по 01.03.2012, вернёт не более 40 тысяч записей, т.е. <= (40000 / 8млн)*100% = 0.5% от общего количества записей. Поэтому он решает, что можно и использовать index seek. А ты вчера изменил 1,4 миллиона записей (меньше 20%) и поменял у них период на 20.02.2012 и не обновил статистику - в результате он использует тот же index seek, который при получении 18% записей таблицы в один поток может выполняться просто ппц как долго. А кроме выбора метода получения данных, SQL Server, может сильно накосячить с выбором метода соединения loop/hash/merge, если не будет знать сколько примерно у него будет данных, что так же запросто может привести к тормозам. Статистика используется более широко, чем вы говорите в (24). |
|||
26
упс
25.12.13
✎
12:17
|
(21) "Чаще собирайте статистику для возрастающих ключей
Возрастающие ключевые поля, такие как IDENTITY или datetime с реальными timestamps - значениями, могут помешать точному сбору статистики для таблиц, в которых часто происходят вставки - INSERT, и это происходит потому что новые значения оказываются вне гистограммы. Если ваше приложение получает неадекватные планы исполнения запросов с условиями по возрастающим ключевым полям, рассмотрите возможность обновления статистики по таким полям как можно чаще, в задании по расписанию. Частота выполнения таких заданий будет зависеть от вашего приложения. Возможны ежедневные или еженедельные интервалы, или можно это делать и чаще, если это оправдано для вашего приложения." Из вашей же ссылки. В куче регистров есть индекс ByPeriod, построенный по datetime |
|||
27
pavig
25.12.13
✎
12:32
|
(14) +1, тоже интересно
|
|||
28
kiruha
25.12.13
✎
12:55
|
(25)
Абсолютно согласен. В трех строках сложно описать все использование статистики. Я не утверждал что ее собирать не надо - только что сомневаюсь что проблема у автора - в одном пропущенном дне сбора Вряд ли он кардинально менял структуру или массово добавлял/удалял записи. В конфигурациях 1С все достаточно статично |
|||
29
упс
25.12.13
✎
13:03
|
(28) я один раз нарвался на проблемы связанные именно с необновившейся ночью статистикой и поэтому легко верю, что у автора беда может возникнуть от того же:)
|
|||
30
КонецЦикла
25.12.13
✎
13:13
|
ну вроде очевидно, даже для простеньких вещей писать лог и каждое действие комментить. и отсылать этот лог, а не письмо "все закончилось".
|
|||
31
kiruha
25.12.13
✎
14:30
|
(29)
а есть объяснение ? Например запросы которые для которых стал генерироваться неоптимальный план выполнения |
|||
32
GunKata
25.12.13
✎
16:03
|
(31) Тяжело запускать профилер и ловить запросы, в момент когда у всех проблемы. Это можно делать когда ты ловишь проблемы в конкретном месте. Тут же было вполне очевидно резкое ухудшение после рабочего дня.Apdex показал падение в 3 раза времени проведения документа. В нашей базе в среднем в день делается 7000 документов, этого мало чтобы достичь 20% от базы, но хватает чтобы скуль справлялся без обновления статистики
|
|||
33
упс
26.12.13
✎
04:57
|
(31) да, примерно то, что я описывал в (25). Запрос к РБ сильно ошибался в оценке количества данных, в итоге выполнялся вместо 1 секунды больше чем минуту. А поскольку выполнялся в транзакции, выполнялся он без NOLOCK и "блокировал" кучу пользователей, в итоге "всё вставало колом".
|
|||
34
kiruha
26.12.13
✎
09:42
|
(33)
- вот была "вчерашняя" статистика - по конкретному ид документа положим 10 записей из 10 млн по дате дате 40 000. "Новых" Ид и Дат в статистике нет. По новым Ид и Датам сервер не может адекватно оценить селективность ? И например выбирает использовать Дату в отборе сначала, а не Ид ? |
|||
35
упс
26.12.13
✎
10:52
|
(34) вообще не понял вопроса. Если никакого изменения данных не было - конечно, статистику вообще можно не обновлять. В моём случае была проблема с массовым измененим данных, но не дотягивающих для запуска автообновления статистики.
|
|||
36
kiruha
26.12.13
✎
11:58
|
(35)
А, значит все таки было массовое, не обычный рабочий день |
|||
37
MM
26.12.13
✎
13:12
|
Ещё может быть, что SQL обнаруживает, что статистика устарела, из-за дневных изменений, и перестаёт её использовать. А поведение по умолчанию приводит к сканированиям больших таблиц.
|
|||
38
упс
26.12.13
✎
13:39
|
(36) понятие "обычный-необычный", оно как бы расплывчатое. Для начала месяца день был обычный.
Расчёт итогов, например, из режима предприятия, при необновлённой ночью статистике по индексам РБ и связанных с ним таблиц, длится больше 2-х часов в любой день, при обновлённой - 3 минуты. (37) пруф? |
|||
39
arsik
гуру
26.12.13
✎
13:56
|
(14) (27)
Уралэнерго, я так полагаю. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |