IE 2016

Управление индексами и секциями в 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

Лучшие комментарии

11. desty 19.11.2011 21:29
(0) инструментарий действительно выглядит отлично - явно проделана огромная работа.

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

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

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

и еще: когда база достигает размеров таких, что требуется задумываться о секционировании, сжатии, и анализа индексов таблиц - необходимо подумывать о выделенном DBA, а эти люди как известно используют SQL Managment Studio и ей им достаточно для выполнения их задач.
Ответили: (13) (14)
+ 4 [ Rustig; hogik; German; Ish_2; ]
# Ответить
9. German 18.11.2011 09:55
Ish_2 пишет:
Мне поможет секционирование ?

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

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

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

Вот тут посмотри многое разъяснится http://www.sql.ru/articles/mssql/2005/073102PartitionedTablesAndIndexes.shtml#5
Ответили: (10) (11)
+ 1 [ CatMix; ]
# Ответить
13. Ish_2 19.11.2011 21:41
(11) Согласен.
Узок, чрезвычайно узок круг потребителей продукта.
В базах до 50-70 Гб ( а это огромное подавляющее большинство , думаю 95% ) 1с-нику знать про секционирование не только ненужно , а даже вредно .
Ответили: (15)
+ 1 [ Rustig; ]
# Ответить

Комментарии

1. Magister 17.11.2011 14:35
И работает это всё, как всегда, только для MsSQL? Или поддерживаются и другие СУБД?
Ответили: (2)
# Ответить
2. German 17.11.2011 14:37
(1) Ну да... поддержка в других СУБД в планах ... но уж больно тяжело именно это сделать
# Ответить
3. iov 17.11.2011 20:00
(0) Вот еще бы пару ссылок на секционирование и вообще няшно бы было :)
Ответили: (5)
# Ответить
4. smielka 17.11.2011 23:27
Спасибо очень удобный инструмент!
# Ответить
5. iov 17.11.2011 23:53
(3) Пардон http://msdn.microsoft.com/ru-ru/library/ms188706.aspx на андроиде почему то ссылка не подсвечена оказалась.
# Ответить
6. Ish_2 18.11.2011 09:22
(0) Ничего не понял.
Грамотный SQL-щик , скажи мне, простому 1с-нику .
Мы что , используя твою обработку, устанавливаем ADO-соединение со своей же базой SQL ?
Затем вводим секции для физических таблиц (меняем характеристики базы)? И что потом ?
После выгрузки базы в .dt и последующей загрузке - мы потеряем всё секционирование ? Так ?
Ответили: (7)
# Ответить
7. German 18.11.2011 09:25
(6) да соединение со своей же базой, или ее копией (главное чтобы структура метаданных была одинаковая)
конечно dt не сохраняет данную информацию... только бекап средствами SQL
Ответили: (8)
# Ответить
8. Ish_2 18.11.2011 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.2011 09:55
Ish_2 пишет:
Мне поможет секционирование ?

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

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

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

Вот тут посмотри многое разъяснится http://www.sql.ru/articles/mssql/2005/073102PartitionedTablesAndIndexes.shtml#5
Ответили: (10) (11)
+ 1 [ CatMix; ]
# Ответить
10. Ish_2 18.11.2011 10:10
(9) Ммм.. Ага, высока не то слово.
За ссылку спасибо.
Ответили: (12)
# Ответить
11. desty 19.11.2011 21:29
(0) инструментарий действительно выглядит отлично - явно проделана огромная работа.

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

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

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

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

(12) Кстати Герман - может попробуешь добавить функциональность поиска запроса вызвавшего рекомендацию о создании индекса, у меня получилось через XPath выражения к планам запросов. Думаю такая функциональность будет полезной для продукта.
Ответили: (15)
# Ответить
15. German 19.11.2011 22:10
(14) план запроса и связанные с ним фишки уже на подходе. не переключайтесь
(13) секции это не всегда следствие огромных баз.. у меня была ситуация когда секционирование применялось для увеличения параллельности работы
# Ответить
16. Mudrii_Gankster 21.11.2011 12:27
спасибо за информацию буду изучать эту тему
# Ответить
17. opiumdx 23.11.2011 07:41
Спасибо, интересно было посмотреть.
# Ответить
18. Aleskey_K 30.11.2011 10:59
Спасибо автору и комментаторам за полезную информацию.
# Ответить
19. B2B 30.11.2011 15:30
Интересная тема, не знал, что такое возможно. К автору видео: говорить в микрофон можно и погромче (и поувереннее), либо нормализовывать звуковую дорожку перед выкладыванием видео
Ответили: (20)
# Ответить
20. German 30.11.2011 16:48
(19) я там вначале что то "застеснялся", потом веселее становится :)
# Ответить
21. Natalex95 20.01.2012 13:48
Скачал, решил поэкспериментировать с секционированием, но что то не получается...
После настройки соединения высвечивается надпись "Свойства объектов доступны только для версии MSSQL 2005 и выше"
Хотя у меня стоит mssql2008, что я могу делать не так? может существуют какие-то тонкости?
Версия 1С 8.2.13.205
Ответили: (22)
# Ответить
22. German 20.01.2012 14:00
(21) используйте последнюю версию
http://code.google.com/p/enterprise-integrator/downloads/list
# Ответить
23. Natalex95 23.01.2012 08:01
А как купить лицензию, что то с сайта переадресовывает на http://infostart.ru/public/14635/index.php?action=buy&id=79875. Где написано, что цена на продукт не определена, и в корзину не добавляется.
И вообще интересует вопрос, как это будет выглядеть, по доставке.
Ответили: (24)
# Ответить
24. German 23.01.2012 11:29
(23) Ошибка на IS была уже исправили.
По доставке: после получения IS денег на РС сразу же EMS`ом отправляется ключ (~ 3 дня в Москву 7 по России), стоимость доставки входит в цену Ei. Потом в конце месяца получаете документы от IS. Все.
# Ответить
26. svbel85 06.02.2012 15:18
а почему пишет что доступна только для скл 2005, при попытке установки соединения??
Ответили: (27)
# Ответить
27. German 06.02.2012 15:20
(26) используйте последнюю версию
http://code.google.com/p/enterprise-integrator/downloads/list
# Ответить
28. ulili 04.05.2012 12:47
Спасибо автору
# Ответить
29. zavedeev 14.05.2012 13:22
Спасибо!!!
# Ответить
30. retif 17.04.2013 14:48
СпасибО!

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

Возможно ли секционирование по регистратору?
# Ответить
32. zoytsa 31.01.2015 10:45
Ауу, ребят, кто секционривал большие базы - сталкивались ли с зависаниями при проведении/отмене проведения? Как решали проблему partition elimination - т.к. отбор в запросах SQL идет в данных операциях по регистратору, а не по периоду?
Ответили: (33)
# Ответить
33. German 01.02.2015 11:50
(32) zoytsa, с зависаниями не сталкивался.
# Ответить
Внимание! За постинг в данном форуме $m не начисляются.
Внимание! Для написания сообщения необходимо авторизоваться
Текст сообщения*
Прикрепить файл