gifts2017

Управление индексами и секциями в 1С

Опубликовал Герман (German) в раздел Программирование - Практика программирования

Одним из основных факторов производительности 1С: Предприятие 8 является верная структура индексов СУБД - это аксиома. Но также существует одно из заблуждений - что это все сложно.
В Ei разработан не имеющий аналогов инструмент позволяющий вывести работы с индексами и секциями на новый визуальный (интерактивный) уровень, позволяющий забыть о длинных инструкциях по созданию изменению индексов.

Инструмент по управлению индексами и секциями является эксклюзивным для решений на платформе 1С. А в контексте всех остальных решений просто редкостью (для секций автору известно только одно решение SqlPartitionManager  - $199 для одного сервера). SQL Server Management Studio не предоставляет возможности интерактивной работы с секциями и работа с индексами максимально неудобна.
Наверное многие скажут что инструменты эти не нужны можно все делать запросами. Возможность делать это запросами мною не отрицается, так же как и использование командной строки заместо проводника.

Данные инструменты дают следующие приемущества:

  • Простота настройки(добавления и редактирования);
  • Статистика в одном окне с редактируемыми объектами;
  • Отображение индексов и секций в виде дерева;
  • Контекст полей и типов 1С;
  • Секционирование на основе типов 1С ;
  • Drag & Drop. 

 Для чего вообще нужны секции?:

  1. Секции позволяют распределить нагрузку ввода вывода по всем дисковым массивам. Реализовывается через секционирование по периоду - когда данные за предыдущие периоды выносятся на файловые группы оптимизированные для только для чтения.
  2. Секции позоляют избежать блокировок. Реализовывается через секционирование по реквизиту разделителя - например Организация и как следствие в MSSQL 2008 Enterprise блокировка не будет эскалированна выше секции, т.е. одна организация будет полностью независима от другой.

 А теперь посмотрите как все это делается интерактивно


Для тех кто не знаком с Ei.

Enterprise Integrator - это инструмент для программистов и внедренцев, разработка которого непрерывно ведестя с 2006 года незавимой группой разработчиков. Ei можно использовать в платной и бесплатной реализации(с ограничениями).

Скачать установщик можно здесь. После установки запустить c:\Program Files\Enterprise Integrator\EI_82.epf или c:\Program Files\Enterprise Integrator\EI.epf

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение
Комментарии
1. Misha ⁠ (Magister) 17.11.11 14:35
И работает это всё, как всегда, только для MsSQL? Или поддерживаются и другие СУБД?
2. Герман (German) 17.11.11 14:37
(1) Ну да... поддержка в других СУБД в планах ... но уж больно тяжело именно это сделать
3. Александр Зубцов (iov) 17.11.11 20:00
(0) Вот еще бы пару ссылок на секционирование и вообще няшно бы было :)
4. Елена Смирнова (smielka) 17.11.11 23:27
Спасибо очень удобный инструмент!
5. Александр Зубцов (iov) 17.11.11 23:53
(3) Пардон http://msdn.microsoft.com/ru-ru/library/ms188706.aspx на андроиде почему то ссылка не подсвечена оказалась.
6. Игорь Исхаков (Ish_2) 18.11.11 09:22
(0) Ничего не понял.
Грамотный SQL-щик , скажи мне, простому 1с-нику .
Мы что , используя твою обработку, устанавливаем ADO-соединение со своей же базой SQL ?
Затем вводим секции для физических таблиц (меняем характеристики базы)? И что потом ?
После выгрузки базы в .dt и последующей загрузке - мы потеряем всё секционирование ? Так ?
7. Герман (German) 18.11.11 09:25
(6) да соединение со своей же базой, или ее копией (главное чтобы структура метаданных была одинаковая)
конечно dt не сохраняет данную информацию... только бекап средствами SQL
8. Игорь Исхаков (Ish_2) 18.11.11 09:41
(7) Еще вопрос.
У меня очень большая таблица (2 млрд записей). Хочу из нее , используя Group by, получить таблицу - 32 записи.
Мне поможет секционирование ?

И вопрос ,к теме неотносящийся.
В принципе возможно в MSSQL параллельно выполнить 32 запроса для получения каждой записи.
Например , послать 32 запроса :
select * from table where property = 1;
select * from table where property = 2;
........................
select * from table where property = 32;
ну и затем объединить их ,конечно,в одну.
9. Герман (German) 18.11.11 09:55
Ish_2 пишет:
Мне поможет секционирование ?

Нет тут достаточно только индекса. Если будет отбор тогда поможет.

ну и затем объединить их ,конечно,в одну.

Стоимость таких запросов будет высока очень.

Вот тут посмотри многое разъяснится http://www.sql.ru/articles/mssql/2005/073102PartitionedTablesAndIndexes.shtml#5
10. Игорь Исхаков (Ish_2) 18.11.11 10:10
(9) Ммм.. Ага, высока не то слово.
За ссылку спасибо.
11. desty (lustin) 19.11.11 21:29
(0) инструментарий действительно выглядит отлично - явно проделана огромная работа.

Однако вынужден заметить две вещи:

1. по индексам - практика показывает что необходимости управлять индексами на уровне СУБД нет: 1С в основном создает достаточные индексы. Опять же та же практика показывает что если движок рекомендует создать какие либо индексы, то исправлять это необходимо на стороне 1С. в 99 процентах появление рекомендуемых индексах связано с неверной архитектурой метаданных, неверно составленными запросами 1С, забытыми "галочками" индексировать у реквизитов и измерений и т.д.

2. с секционированием - по ссылке приведенной в (9) очень четко описан процесс создания, и опять же как показывает практика больше всего времени при секционировании уходит на обоснование и обдумывание: где расположить файловые группы, какую функцию секционирования создать и т.д. А вот когда план секционирования был полностью обдуман (включая план возврата секционирования при реструктуризации таблицы) время затраченное на написание скриптов было ничтожно мало.

и еще: когда база достигает размеров таких, что требуется задумываться о секционировании, сжатии, и анализа индексов таблиц - необходимо подумывать о выделенном DBA, а эти люди как известно используют SQL Managment Studio и ей им достаточно для выполнения их задач.
Rustig; hogik; German; Ish_2; +4 Ответить 2
12. Герман (German) 19.11.11 21:38
(11) Конечно инструмент не для DBA, они даже смотреть не будут, мировоззрение совсем другое.
Скорее для 1С стремящихся в выяснению и осознанию определенных проблем производительности MSSQL
13. Игорь Исхаков (Ish_2) 19.11.11 21:41
(11) Согласен.
Узок, чрезвычайно узок круг потребителей продукта.
В базах до 50-70 Гб ( а это огромное подавляющее большинство , думаю 95% ) 1с-нику знать про секционирование не только ненужно , а даже вредно .
14. desty (lustin) 19.11.11 22:03
(0) Но плюс то однозначным, забыл сразу поставить

(12) Кстати Герман - может попробуешь добавить функциональность поиска запроса вызвавшего рекомендацию о создании индекса, у меня получилось через XPath выражения к планам запросов. Думаю такая функциональность будет полезной для продукта.
15. Герман (German) 19.11.11 22:10
(14) план запроса и связанные с ним фишки уже на подходе. не переключайтесь
(13) секции это не всегда следствие огромных баз.. у меня была ситуация когда секционирование применялось для увеличения параллельности работы
16. Руслан Программист 1с (Mudrii_Gankster) 21.11.11 12:27
спасибо за информацию буду изучать эту тему
17. Michael Smith (opiumdx) 23.11.11 07:41
Спасибо, интересно было посмотреть.
18. Алексей Попов (Aleskey_K) 30.11.11 10:59
Спасибо автору и комментаторам за полезную информацию.
19. B2B (B2B) 30.11.11 15:30
Интересная тема, не знал, что такое возможно. К автору видео: говорить в микрофон можно и погромче (и поувереннее), либо нормализовывать звуковую дорожку перед выкладыванием видео
20. Герман (German) 30.11.11 16:48
(19) я там вначале что то "застеснялся", потом веселее становится :)
21. Алексей Усов (Natalex95) 20.01.12 13:48
Скачал, решил поэкспериментировать с секционированием, но что то не получается...
После настройки соединения высвечивается надпись "Свойства объектов доступны только для версии MSSQL 2005 и выше"
Хотя у меня стоит mssql2008, что я могу делать не так? может существуют какие-то тонкости?
Версия 1С 8.2.13.205
22. Герман (German) 20.01.12 14:00
23. Алексей Усов (Natalex95) 23.01.12 08:01
А как купить лицензию, что то с сайта переадресовывает на http://infostart.ru/public/14635/index.php?action=buy&id=79875. Где написано, что цена на продукт не определена, и в корзину не добавляется.
И вообще интересует вопрос, как это будет выглядеть, по доставке.
24. Герман (German) 23.01.12 11:29
(23) Ошибка на IS была уже исправили.
По доставке: после получения IS денег на РС сразу же EMS`ом отправляется ключ (~ 3 дня в Москву 7 по России), стоимость доставки входит в цену Ei. Потом в конце месяца получаете документы от IS. Все.
26. Сергей Беленченко (svbel85) 06.02.12 15:18
а почему пишет что доступна только для скл 2005, при попытке установки соединения??
27. Герман (German) 06.02.12 15:20
28. Лилия Корнеева (ulili) 04.05.12 12:47
29. zavedeev (zavedeev) 14.05.12 13:22
30. Алексей Олешко (retif) 17.04.13 14:48
СпасибО!

Осталось разобраться как это богатство использовать...
31. andr bat (zoytsa) 29.01.15 13:23
1C при создании наборов записей регистров, подчиненных регистратору,
при записи документа делается SELECT с отбором по регистратору. Есть ли возможность осуществить "partition elimination" в данном случае - чтобы при чтении таблицы документов использовался только раздел, соответствующий, а не шло чтение всех секций?

Возможно ли секционирование по регистратору?
32. andr bat (zoytsa) 31.01.15 10:45
Ауу, ребят, кто секционривал большие базы - сталкивались ли с зависаниями при проведении/отмене проведения? Как решали проблему partition elimination - т.к. отбор в запросах SQL идет в данных операциях по регистратору, а не по периоду?
33. Герман (German) 01.02.15 11:50
(32) zoytsa, с зависаниями не сталкивался.