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

Программирование - Практика программирования

Одним из основных факторов производительности 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

См. также

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

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

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

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

Вот тут посмотри многое разъяснится http://www.sql.ru/articles/mssql/2005/073102PartitionedTablesAndIndexes.shtml#5
10. Игорь Исхаков (Ish_2) 986 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 Ответить
12. Герман (German) 933 19.11.11 21:38 Сейчас в теме
(11) Конечно инструмент не для DBA, они даже смотреть не будут, мировоззрение совсем другое.
Скорее для 1С стремящихся в выяснению и осознанию определенных проблем производительности MSSQL
13. Игорь Исхаков (Ish_2) 986 19.11.11 21:41 Сейчас в теме
(11) Согласен.
Узок, чрезвычайно узок круг потребителей продукта.
В базах до 50-70 Гб ( а это огромное подавляющее большинство , думаю 95% ) 1с-нику знать про секционирование не только ненужно , а даже вредно .
14. desty (lustin) 19.11.11 22:03 Сейчас в теме
(0) Но плюс то однозначным, забыл сразу поставить

(12) Кстати Герман - может попробуешь добавить функциональность поиска запроса вызвавшего рекомендацию о создании индекса, у меня получилось через XPath выражения к планам запросов. Думаю такая функциональность будет полезной для продукта.
15. Герман (German) 933 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) 11 30.11.11 10:59 Сейчас в теме
Спасибо автору и комментаторам за полезную информацию.
19. B2B (B2B) 250 30.11.11 15:30 Сейчас в теме
Интересная тема, не знал, что такое возможно. К автору видео: говорить в микрофон можно и погромче (и поувереннее), либо нормализовывать звуковую дорожку перед выкладыванием видео
20. Герман (German) 933 30.11.11 16:48 Сейчас в теме
(19) я там вначале что то "застеснялся", потом веселее становится :)
21. Алексей Усов (Natalex95) 20.01.12 13:48 Сейчас в теме
Скачал, решил поэкспериментировать с секционированием, но что то не получается...
После настройки соединения высвечивается надпись "Свойства объектов доступны только для версии MSSQL 2005 и выше"
Хотя у меня стоит mssql2008, что я могу делать не так? может существуют какие-то тонкости?
Версия 1С 8.2.13.205
22. Герман (German) 933 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) 933 23.01.12 11:29 Сейчас в теме
(23) Ошибка на IS была уже исправили.
По доставке: после получения IS денег на РС сразу же EMS`ом отправляется ключ (~ 3 дня в Москву 7 по России), стоимость доставки входит в цену Ei. Потом в конце месяца получаете документы от IS. Все.
26. Сергей Беленченко (svbel85) 18 06.02.12 15:18 Сейчас в теме
а почему пишет что доступна только для скл 2005, при попытке установки соединения??
27. Герман (German) 933 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) 933 01.02.15 11:50 Сейчас в теме
(32) zoytsa, с зависаниями не сталкивался.
Оставьте свое сообщение