Создание недостающих индексов в MSSQL

17.05.12

База данных - HighLoad оптимизация

Для тех, кто борется с производительностью 1С8.
MSSQL  сервер оказывается накапливает статистику о недостающих индексах и есть возможность получить скрипты по их созданию

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Create_Missing_Indexes.SQL
.sql 2,17Kb
210
210 Скачать (1 SM) Купить за 1 850 руб.

Сам скрипт, выполнив который можно получить список рекомендуемых индексов во всех базах, находящихся на сервере, опубликован тут. http://blogs.msdn.com/b/bartd/archive/2007/07/19/are-you-using-sql-s-missing-index-dmvs.aspx (спасибо Вячеславу Гилеву) за идею.

Получаем очень интересные результаты. У нас к примеру после создания некоторых недостающих индексов производительность операций (создание и запись реализаций на основании заказов покупателя) возрасла в 10 раз.

Но в случае с 1С8 - есть риск что созданные индексы после изменения конфигурации или проверки и тестирования будут удалены. Поэтому немного переработал данный скрипт, так чтобы он генерировал SQL код для создания индекса так, чтобы предварительно анализировать создан ли уже данный индекс.  В результате можно.

 1) Запустить скрипт получить результат колонки create_index_if_exists_statement

2) Выполнить этот скрипт вручную в QueryAnalyzer первый раз. Возможно некоторые индексы не будут созданы, если возникает ошибка или вы считаете что данный индекс создавать не нужно - коментируйте строку. Желательно запускать построчно и в момент когда на базу нет большой нагрузки так как создание некоторых индексов может занимать длительное время.

3) Когда все необходимые индексы созданы можно этот же скрипт запустить на ежедневный или еженедельный запуск - индексы будут пересозданы, только в том случае если это индекс был по каким то причинам удален из базы.

4) Просмотреть все созданные недостающие индексы тоже легко - там собственный префикс выбираете при помощи запроса:

select * from sysindexes where name like 'missing_index%'

 

 

См. также

HighLoad оптимизация Программист Платформа 1С v8.3 Бесплатно (free)

Метод очень медленно работает, когда параметр приемник содержит намного меньше свойств, чем источник.

06.06.2024    9260    Evg-Lylyk    61    

44

HighLoad оптимизация Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Анализ простого плана запроса. Оптимизация нагрузки на ЦП сервера СУБД используя типовые индексы.

13.03.2024    5097    spyke    28    

49

HighLoad оптимизация Программист Платформа 1С v8.3 Бесплатно (free)

Оказывается, в типовых конфигурациях 1С есть, что улучшить!

13.03.2024    7573    vasilev2015    20    

42

HighLoad оптимизация Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Обработка для простого и удобного анализа настроек, нагрузки и проблем с SQL сервером с упором на использование оного для 1С. Анализ текущих запросов на sql, ожиданий, конвертация запроса в 1С и рекомендации, где может тормозить.

2 стартмани

15.02.2024    12422    241    ZAOSTG    80    

115

HighLoad оптимизация Системный администратор Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Принимать, хранить и анализировать показания счетчиков (метрики) в базе 1С? Почему бы нет? Но это решение быстро привело к проблемам с производительностью при попытках построить какую-то более-менее сложную аналитику. Переход на PostgresSQL только временно решил проблему, т.к. количество записей уже исчислялось десятками миллионов и что-то сложное вычислить на таких объемах за разумное время становилось все сложнее. Кое-что уже практически невозможно. А что будет с производительностью через пару лет - представить страшно. Надо что-то предпринимать! В этой статье поделюсь своим первым опытом применения СУБД Clickhouse от Яндекс. Как работает, что может, как на нее планирую (если планирую) переходить, сравнение скорости работы, оценка производительности через пару лет, пример работы из 1С. Все это приправлено текстами запросов, кодом, алгоритмами выполненных действий и преподнесено вам для ознакомления в этой статье.

1 стартмани

24.01.2024    5669    glassman    18    

40

HighLoad оптимизация Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Встал вопрос: как быстро удалить строки из ТЗ? Рассмотрел пять вариантов реализации этой задачи. Сравнил их друг с другом на разных объёмах данных с разным процентом удаляемых строк. Также сравнил с выгрузкой с отбором по структуре.

09.01.2024    14018    doom2good    49    

71
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. пользователь 17.05.12 15:17
Сообщение было скрыто модератором.
...
3. anig99 2852 17.05.12 16:36 Сейчас в теме
(1) тут решено всё в пределах sql и проще. В другой публикации всё как-то запутано и требует сторонний софи
21. пользователь 03.06.20 16:56
Сообщение было скрыто модератором.
...
2. kursaloff 49 17.05.12 15:33 Сейчас в теме
Хех спасибо за ссылку, может случиться что и велосипед :), если честно обработку не пробовал, но обязательно посмотрю, но...
скрипт не требует запуска 1С. Если на сервере несколько информационных баз отобразится список индексов для всех баз которые рекомендуют создать. Копи пастом результат можно перенести в шедулер, чтобы индексы пересоздавались, если они будут удалены. Вот собственно и все на the best не претендую :)
4. khaoos 239 21.05.12 06:45 Сейчас в теме
Хорошо. Давно размышлял о создании нехватающих индексов. Было бы неплохо разработать свод правил (изменений конфигурации), при которых эти индексы слетят, чтобы осмысленно подходить к модификации. А так плюс, и на заметку. Молодец.
5. kursaloff 49 21.05.12 08:35 Сейчас в теме
дак в этом случае заморачиваться о том слетят или не слетят созданные индексы как раз не нужно - если текст запроса перенести в шедулер, (там проверяется существует индекс или нет) то при удалении индекса он будет создан повторно, если ни одного индекса повторно создавать не нужно, скрпт отработает за секунду.
6. squad 181 23.05.12 07:49 Сейчас в теме
Почему то в публикации нигде не увидел предупреждения об "оборотной" стороне индексов - замедление записи в таблицу, на которой повешен индекс.
Тяжелый сложный индекс может серьезно замедлить запись и тем самым сведет все ваши усилия по "ускорению" в минус.
Вообще говоря нужно некоторые исследования проводить (скорость записи до и после) перед тем как создавать дополнительные индексы,
не говоря же о том, что по типовой схеме создания индексов в платформе создается избыточно много индексов например на регистрах. И обычно задача как раз обратная - удалять "лишние" индексы чтобы ускорить запись в регистры.
DenisCh; svartemov; +2 Ответить
11. kursaloff 49 29.05.12 17:56 Сейчас в теме
(6) squad, совершенно согласен - индексы не панацея и они могут и отрицательно влиять на производительность, да и размер базы если индексы создаются на больших регистрах растут очень сильно. Поэтому к созданию индексов нужно подходить обдуманно, данный скрипт только дает рекомендации
7. пользователь 23.05.12 12:41
Сообщение было скрыто модератором.
...
8. mxm2 1268 27.05.12 09:30 Сейчас в теме
MS SQL 2008, после запуска пишет "Запрос успешно выполнен" (таблица показывает 100 строк), при этом никакие индексы не создались, по крайней мере запрос "select * from sysindexes where name like 'missing_index%'" дал результат содержащий 0 строк, в SQL - не профи, но тем не менее, не поясните в каком месте в тексте предлагаемого "Запроса" выполняется добавление индексов? Или может быть я не в том месте "запускаю" запрос (делаю через контекстное меню базы данных в списке баз "Создать запрос")? Заранее прошу прощения, если "сморозил" )).
12. kursaloff 49 29.05.12 18:07 Сейчас в теме
(8) mxm2, сам скрипт выдает только табличку со списком индексов которые нужно создать (ремомендуемые СКУЭЛЬ сервером). Сам процесс создания индексов может занимать довольно продолжительное время и для того чтобы их создать нужно взять результат работы скрипт колонка create_index_if_exists_statement. Просто копи-пастом в новое окно для запроса.
13. mxm2 1268 31.05.12 22:35 Сейчас в теме
(12) Спасибо, реализовал, тестирую.
9. electronik 28.05.12 13:19 Сейчас в теме
такую вещь нужно тестировать как только появятся деньги скачаю и протестирую идея довольно интересная
10. Sairys 29.05.12 09:40 Сейчас в теме
хорошая статья нужно попробовать
14. Munsera 01.06.12 17:55 Сейчас в теме
Как долго обрабатывается сей скрипт?
У меня уже работает как 10 часов. Ресурсов не жрет, только время идет и все...
15. kursaloff 49 01.06.12 21:34 Сейчас в теме
(14) Munsera, что то слишком долго у меня на рег бухгалтерии максимум полчаса индекс создавался. Лучше прервать, посмотреть какой индекс завис и исключить его из скрипта. Я когда создавал индексы выполнял построчно,чтобы видеть какой индекс создается. И еще при создании индексов работа с текущей таблицей лочится
16. Munsera 04.06.12 11:57 Сейчас в теме
Если запускаю через CMD:
sqlcmd -d test_b -i "E:\SQL_Bases\SQLQuery1.sql" -o E:\SQL_Bases\result_restore.txt

То выполняется мгновенно. А в техстовом файле пустота.
test_b - это база которую тестирую...
Прикрепленные файлы:
result_restore.txt
17. almas 258 30.09.15 10:39 Сейчас в теме
Умничка. Спасибо за скрипт.
Не хватает скрипта, который убивает созданные дополнительные индексы или описания как их удалить вручную.
18. CratosX 114 08.06.17 19:07 Сейчас в теме
Высокая загрузка CPU на сервере СУБД MS SQL Server

Наблюдаем высокую загрузку CPU по счетчикам Processor Time на сервере СУБД c MS SQL Server.
Что делать?

Симптом

Видим высокую загрузку CPU на сервере MS SQL Server.

Загрузку видим "сейчас", при этом по данным Performance Monitor, Диспетчера задач или Монитора ресурсов мы уверены, что основную нагрузку создает именно MS SQL Server.

Что требуется сделать:
Высокая загрузка CPU на сервере СУБД MS SQL Server
19. milanSpb 12 22.10.18 13:20 Сейчас в теме
Большое спасибо.
Сделал две база на одной Добавил индексы один и тоже запрос производительность +10 с с Индексами 13 с , без 23.
20. DreamMaster 5 18.12.18 11:46 Сейчас в теме
Скрипта для удаления очень не хватает
22. METAL 299 03.06.20 16:58 Сейчас в теме
http://blogs.msdn.com/b/bartd/archive/2007/07/19/are-you-using-sql-s-missing-index-dmvs.aspx (спасибо Вячеславу Гилеву) за идею.

Ссылка уже не работает...
Оставьте свое сообщение