Как разбить базу на файлы и не сойти с ума

Публикация № 1039011

Администрирование - Производительность и оптимизация (HighLoad)

SQLServer SQL файловые группы оптимизация дисковая подсистема администрирование база данных

Разбиение базы данных 1C на файлы и последующее сопровождение. Нюансы, грабли и прочее.

Суть вопроса

Файловые группыВ прошлых статьях мы уже говорили о подходах к разработке и обслуживанию базы данных, которые позволяют использовать индексы произвольной структуры и даже секционирование для баз 1С. Казалось бы, тема исчерпана и для высоконагруженных баз может наступить светлое будущее, не смотря на то, что платформа 1С пока так и не поддерживает эти возможности из "коробки".

Однако, хотелось бы остановиться подробнее на такой теме как разбиение базы данных на отдельные файлы с помощью файловых групп. В статье про секционирование файловые группы уже использовались для секций, но там про них был сказано вскользь.

Сегодня мы более детально рассмотрим их использование, а также нюансы, с которыми нужно считаться при обслуживании базы данных, реструктуризациях и других моментах.

Для чего вообще может понадобиться разбивать базу данных на отдельные файлы? Самые распространенные кейсы:

  1. Есть регистр сведений, в котором хранятся двоичные данные файлов. Необходимо вынести хранение файлов на отдельный диск / хранилище, чтобы освободить место на быстрых дисках.
  2. Есть старые архивные таблицы, которые уже редко используются, но удалять данные нельзя. Почему бы такие таблицы также не перенести на отдельные диски, которые для этого и предназначены. Тем более такие файловые группы можно сделать только для чтения.
  3. Ускорить бэкапирование базы, т.к. архивные файловые группы можно не бэкапировать каждый раз. Они ведь не меняются!
  4. Улучшение производительности, за счет распределения файлов базы данных на отдельные носители.

Тему ускорения бэкапирования и производительности сейчас мы рассматривать не будем, но Вы можете прочитать об этом в публикации про секционирование. Сосредоточимся на описании настроек для файловых групп и их сопровождении. Все примеры ниже будут сделаны для SQL Server, но и для PostgreSQL это будет работать с некоторыми модификациями.

Стандартный подход

Любая база, будь то для 1С или любого другого приложения, поддерживает разбиение базы на несколько файлов (конечно, если это поддерживает СУБД). В контексте SQL Server это реализуется с помощью файловых групп.

По умолчанию база содержит лишь одну файловую группу "PRIMARY", которую 1С и использует для своих целей. Кроме таблиц и индексов в этой предопределенной группе хранится служебная информация о базе, различные заголовки и др., поэтому полностью заменить эту группу на другую нельзя, она всегда будет присутствовать.

Однако, мы можем добавить собственные файловые группы и использовать их для 1С'ных таблиц, причем сама платформа об этом не узнает.

Возьмем для примеров демобазу БСП и создадим в ней две новых файловых группы.

-- В примере имя базы данных на сервере СУБД имеет название "bsl"
USE [master]
GO
ALTER DATABASE [bsl] ADD FILEGROUP [FILEGROUP_2]
GO
ALTER DATABASE [bsl] ADD FILEGROUP [FILEGROUP_3]
GO

Но просто добавить файловые группы недостаточно. Еще нужно добавить файлы данных, для которых эти файловые группы будут задействованы.

-- Оставляем стандартные параметры инициализации файлов, для нашего примера это не критично.
-- Все файлы базы данных находятся в каталоге "D:\DBs"

-- Добавляем файлы для файловых групп
ALTER DATABASE [bsl] 
    ADD FILE ( NAME = N'bsl_fg_2', FILENAME = N'D:\DBs\bsl_fg_2.mdf' , SIZE = 8192KB , FILEGROWTH = 65536KB ) 
    TO FILEGROUP [FILEGROUP_2]
GO
ALTER DATABASE [bsl] 
    ADD FILE ( NAME = N'bsl_fg_3', FILENAME = N'D:\DBs\bsl_fg_3.mdf' , SIZE = 8192KB , FILEGROWTH = 65536KB ) 
    TO FILEGROUP [FILEGROUP_3]
GO

Отлично, у нас есть две файловые группы "FILEGROUP_2" и "FILEGROUP_3", осталось их задействовать. Есть несколько основных вариантов:

  1. Мы можем вручную изменить основную файловую группу базы и сделать реструктуризацию средствами 1С.
  2. Мы можем пересоздать кластерный или другие индексы средствами T-SQL, указав для использования нужную файловую группу.
  3. Ничего не делать.

По третьему варианту написано довольно много примеров в сети, поэтому рассмотрим только первые два пункта. Все примеры будем делать на регистре сведений "История адресных объектов", который на стороне базы представлен таблицей "_InfoRg4683" с несколькими индексами.

Вперед через реструктуризацию

И так, для начала установим основную файловой группой - одну из тех, что добавили выше.

 
 Установка основной файловой группы скриптом

Теперь нужно сделать реструктуризацию средствами платформы. Нормального способа вызвать ее для нашего случая нет, но мы можем:

  1. Добавить временно реквизит в таблицу, а потом запустить реструктуризацию.
  2. Полностью реструктуризировать базу через "Тестирование и исправление".

Оба варианта выглядят "не очень", и Вам повезет, если необходимость реструктуризации появится как-раз в этот момент для других задач. При использовании инструмента "Тестирование и исправление" Вы вообще переведете все таблицы и индексы в установленную файловую группу, поэтому этот случай мы вообще рассматривать не будем. А вот пример с добавлением временного реквизита - пожалуйста.

С помощью этих скриптов можно узнать как изменилась структура базы в части использования файловых групп. Вот какие изменения мы получили.

Таблица Индекс Файловая группа Файл
_InfoRg4683 _InfoRg4683_ByDims_NNNNNNNNNNBN FILEGROUP_2 D:\DBs\bsl_fg_2.mdf
_InfoRg4683 _InfoRg4683_ByResource4705_SNNNNNNNNNNBN FILEGROUP_2 D:\DBs\bsl_fg_2.mdf
_InfoRg4683 _InfoRg4683_ByResource4706_SNNNNNNNNNNBN FILEGROUP_2 D:\DBs\bsl_fg_2.mdf
_InfoRg4683 _InfoRg4683_ByMainFilter_NNNNNNNNNNNB FILEGROUP_2 D:\DBs\bsl_fg_2.mdf

Таким образом, мы перевели таблицу регистра сведений "История адресных объектов" и все ее индексы в файловую группу "FILEGROUP_2".

Подведем итог по данному способу.

Плюсы:

  • Простота в настройке

Минусы:

  • Нужен вызов платформенной реструктуризации, что не всегда оптимально.
  • После реструктуризации надо обратно настраивать основную файловую группу.
  • Необходимость проводить реструктуризацию таблиц в разных файловых группах отдельно друг от друга, что не всегда возможно.

Вообщем, способ неэффективный, но требует минимальных действий на стороне СУБД.

Скриптуем

Более эффективный и гибкий подход - это перенос таблиц и индексов в другую файловую группу с помощью скриптов. Вот так будет выглядеть скрипт для переноса всех индексов регистра сведений "История адресных объектов" в третью файловую группу.

 
 Перенос всех индексов таблицы в другую файловую группу

Все, теперь мы счастливые обладатели регистра сведений, который находится в дополнительной файловой группе. Смотрим итог с помощью этих скриптов.

Таблица Индекс Файловая группа Файл
_InfoRg4683 _InfoRg4683_ByDims_NNNNNNNNNNBN FILEGROUP_3 D:\DBs\bsl_fg_3.mdf
_InfoRg4683 _InfoRg4683_ByResource4705_SNNNNNNNNNNBN FILEGROUP_3 D:\DBs\bsl_fg_3.mdf
_InfoRg4683 _InfoRg4683_ByResource4706_SNNNNNNNNNNBN FILEGROUP_3 D:\DBs\bsl_fg_3.mdf
_InfoRg4683 _InfoRg4683_ByMainFilter_NNNNNNNNNNNB FILEGROUP_3 D:\DBs\bsl_fg_3.mdf

Как итог, определим плюсы и минусы.

Плюсы:

  • Быстрый и эффективный способ работы с файловыми группами.
  • Нет необходимости каких-либо действий на стороне 1С.

Минусы:

  • Нет связи с платформой 1С, даже призрачной как в прошлом примере.

Конечно, предпочтительнее использовать этот способ, если Вы бережете время, нервы и деньги.

Сложности для 1С

Все выглядит просто, но есть нюансы.

Во-первых, лицензионное соглашение 1С запрещает так работать с СУБД, т.к. эти возможности недокументированы. Начиная использовать файловые группы, Вы должны осознавать риски нарушения этого соглашения. Минимальные последствия - это отказ в технической поддержке решений на платформе 1С.

 
 Лицензионное соглашение

Вы должны четко понимать плюсы и минусы данного шага. Все, что Вы сделаете будет на Вашей совести!

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

Зачем это учитывать? Например, у Вас в базе есть регистр сведений "Присоединенные файлы" (в базе представлен таблицей "_InfoRg2133"), в котором хранятся двоичные данные разнотипных документов. Для экономии места в основном хранилище данных был выполнен перенос этих документов в отдельную файловую группу. Файл данных для нее находится на отдельном диске.

 
 Перенос данных документов в отдельную файловую группу

Все отлично сработало, мы освободили 1 ТБ данных в основном хранилище. НО! В один прекрасный день разработчики 1С внесли изменения в систему, добавив новый ресурс к регистру сведений "Присоединенные файлы". В тестовых базах все проверено, ведь там никто не держит полную копию рабочей базы. Изменение ушло в релиз, но при развертывании возникли следующие проблемы:

  • В Вот это поворотхранилище, где находится основной файл базы данных, не хватило места при выполнении реструктуризации. Ведь в процессе платформа создает таблицу заново в основной файловой группе базы, то есть в "PRIMARY". Получается, что платформа создала таблицу и "перегоняла" в нее данные из файловой группы "FILEGROUP_3", пока не заполнила диск.
  • Из-за прерванной с ошибкой реструктуризации в базе данных (в файловой группе "PRIMARY") останется таблица "_InfoRg2133NG", в которую платформа и "переливала" данные. Чтобы исправить ситуацию и освободить место ее нужно будет удалить вручную. Не будем останавливаться на описании процесса реструктуризации, лишь отметим, что платформа добавляет к пересоздаваемым таблицам постфикс "NG". Так Вы можете в базе найти таблицы, которые появились при "битой" реструктуризации базы данных.
  • Исправить последствия попытки реструктуризации может быть не просто, ведь для этого нужно выполнить шринк основного файла данных, а это может быть очень длительной и ресурсоемкой операцией. Да, в прошлом пункте мы удалили таблицу, но файл данных от этого не уменьшился в размере. Мы лишь освободили место в самом файле данных.

В итоге, если такая ситуация произойдет и добрые администраторы не смогут выделить дополнительное место да дисках, то может произойти остановка работы системы. Но это не точно и полностью зависит от Вашей инфраструктуры!

Но есть ли способ избавиться от такой проблемы? Да, есть! Вот несколько рекомендаций:

  1. Проверять перечень таблиц для реструктуризации перед каждым релизом.
  2. В случае, если изменения затронули тяжелые таблицы, для которых применены нестандартные файловые группы, то один из вариантов:
    • Отказаться от изменения на этой таблице. Вместо этого использовать внешние таблицы. Например, вместо добавления реквизита в справочник можно добавить его как доп. свойство или в дополнительный регистр сведений. Включите воображение!
    • Если изменения все же очень нужны, то необходимо делать реструктуризацию в "ручном режиме". Подробнее останавливаться на этом сейчас не будем, но на ИС уже об этом писали. Причем, чем больше изменений, тем и сложнее будет сделать это вручную.
  3. Максимально автоматизировать настройку файловых групп для таблиц и индексов базы, а также сделать заглушки для тех таблиц, где реструктуризация автоматически проходить не должна. Об этом будет ниже.

В этом и кроются основные причины усложнения сопровождения. Поэтому стоит 7 раз подумать, прежде чем начать такое у себя использовать.

Автоматизируй это!

Выше мы упомянули про автоматизацию настроек файловых групп для таблиц и индексов. На самом деле здесь ничего нового нет и используется тот же самый подход по созданию произвольных индексов и применению настроек сжатия, что был в статье "Создаем свои индексы для баз 1С. Со своей структурой и настройками!". Он заключается в создании глобальных триггеров, в которых мы отлавливаем события создания таблицы или индекса и встраиваем свою логику для настройки базы данных.

CREATE TRIGGER [CustomSettingsMaintenance_OnIndexCreate]
ON ALL SERVER
AFTER CREATE_INDEX
AS
BEGIN
	SET NOCOUNT ON

	DECLARE @SchemaName SYSNAME,
		@TableName SYSNAME,
		@DatabaseName SYSNAME,
		@IndexName SYSNAME;

    SELECT @TableName = EVENTDATA().value('(/EVENT_INSTANCE/TargetObjectName)[1]','SYSNAME')
    SELECT @SchemaName = EVENTDATA().value('(/EVENT_INSTANCE/SchemaName)[1]','SYSNAME')
	SELECT @IndexName = EVENTDATA().value('(/EVENT_INSTANCE/ObjectName)[1]','SYSNAME')
	SELECT @DatabaseName = EVENTDATA().value('(/EVENT_INSTANCE/DatabaseName)[1]','SYSNAME');

	-- Здесь выполняем необходимые действия. 
    --  Например, возможные варианты:
    --      1. Пересоздаем индекс с учетом новой файловой группы
    --      2. Вызываем ошибку, если реструктуризация на этой таблице
    --      не должна проходить автоматически. В этом случае
    --      обновление базы будет доступно после отключения глобальных триггеров,
    --      зато не будет непредвиденных падений информационной системы.
    --      3. Ничего не делаем, если платформенная реструктуризация работает как надо.

END

Как пересоздать индекс с учетом новой файловой группы? Например, у нас есть таблица "_InfoRg4683" и индекс "_InfoRg4683_ByDims_NNNNNNNNNNBN" (это из примера с регистром сведений "История адресных объектов"), при этом основная файловая группа в базе это "PRIMARY". Имея уже такие данные мы можем написать такой скрипт.

 
 Универсальный (почти) скрипт пересоздания индекса с новой файловой группой

А что на счет остановки реструктуризации, если она начинается на таблице, где этого происходить не должно?

 
 Ты не пройдешь, реструктуризация!

Можно пойти дальше и не ограничиваться отдельными скриптами, а вынести все подобные ограничения и настройки в отдельный инструмент, как это было сделано здесь.Всё!

Послесловие

На первый, второй и третий взгляд все это может показаться настоящим монстром, особенно для сопровождения. Что ж, так оно и есть! Остается надеяться, что наступят светлые времена, когда платформа 1С позволит использовать возможности СУБД без таких костылей. А пока на этом все!

Удачи в бою!

Другие ссылки

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо развёрнутое
Свернуть все
1. user-z99999 22 06.04.19 10:13 Сейчас в теме
В Вот это поворотхранилище, где находится основной файл базы данных, не хватило места при выполнении реструктуризации. Ведь в процессе платформа создает таблицу заново в основной файловой группе базы, то есть в "PRIMARY". Получается, что платформа создала таблицу и "перегоняла" в нее данные из файловой группы "FILEGROUP_3", пока не заполнила диск.

Нужно на тестовой базе проверять предварительно.
Если таблица будет изменена, а в ней хранилище файлов находится, тогда делаем следущее:
Переименовываем её в своё уникальное имя, а для 1с создаем пустую таблицу (копия по структуре).
1С делает реструктуризацию и изменяет таблицу, и обновление выполнено.
Теперь нужно нашу копию обратно переименовать в таблицу 1С, изменив структуру.

Да, поддержка немного усложняется.
SerVer1C; YPermitin; +2 Ответить
3. YPermitin 8572 06.04.19 10:20 Сейчас в теме
(1) все так. Не стал усложнять, т.к. трюки с реструктуризациями это отдельная тема.

Но за комментарий спасибо!
2. user-z99999 22 06.04.19 10:13 Сейчас в теме
Исправить последствия попытки реструктуризации может быть не просто, ведь для этого нужно выполнить шринк основного файла данных

Это вы рассказывайте как совершили ошибку и её исправляете.
А при правильной работе этого не будет. Не нужно делать шнинк базы данных и файлов - при правильной работе.
Т.к. нарушается цепочка Регистрационные номера транзакций (LSN) для бэкапов при восстановлении базы.
YPermitin; +1 Ответить
4. YPermitin 8572 06.04.19 10:21 Сейчас в теме
(2) я против шринков практически в любом виде, это просто пример.

Причем против не только из-за LSN, но и из-за влияния на производительность и бессмысленности в большинстве ситуаций.
5. lunjio 63 06.04.19 10:34 Сейчас в теме
Если весь сыр-бор только из-за внешних файлов допустим, которые 1ТБ, то достаточно сделать хранение внешним и не заморачиваться вот так, другое дело, тоже самое со всякими версионированиями, изначально нужно делать с упором на внешнее хранение, единственное остаются таблицы которые содержат в себе информацию по себестоимости, в УПП таблицы производственного учета и расчета себестоимости налогового учета весят очень много, но на моей практике в базе 300 гб, 8 переделов себестоимости, самая жирная таблица 18 ГБ, НалоговыйУчет. В целом спасибо за статью.
YPermitin; +1 Ответить
6. YPermitin 8572 06.04.19 10:48 Сейчас в теме
(5) по поводу внешних хранилищ согласен.

Иногда бывают случаи, когда проблема возникает "внезапно", ведь раньше все работало, вот и не трогали :) В этом случае может быть сделано временное решение. Ну а что временно, то....

На практике большие таблицы встречал не только для файлов, но и для регистров бухгалтерии и накопления. Для накопления обычно решалось уменьшением периода рассчитанных итогов. Для регистра бухгалтерии помогали только секционирование. Но тут конечно от проблемы конкретной зависит.

Свертку в этих случаях было нельзя делать из-за различных особенностей.
7. acanta 06.04.19 10:55 Сейчас в теме
Интересно, как организуют длительные обновления при 24/7 и маленьких технологических окнах.
YPermitin; +1 Ответить
8. YPermitin 8572 06.04.19 11:04 Сейчас в теме
(7)
длительные обновления


Даже реструктуризации можно оптимизировать. Например, включить параллелизм или...не делать изменения, которые эти реструктуризации вызывает :) Плюс можно делать реструктуризацию частями, так сказать, выпускать подготовительные релизы.

Хотя если устанавливаешь типовые обновления, например те же с переходом на ставку НДС 20% как это было с УТ, то тут очень сложно все заранее подготовить.
9. lunjio 63 06.04.19 11:06 Сейчас в теме
(8) Еще один из вариантов оптимизации реструктуризации, это временное удаление всей регистрации с предварительной выгрузкой ее, или полное удаление если по плану обмена не актуальные и просто болтаются изменения, затем возвращение после реструктуризации.
По поводу периода расчитанных итогов, имете ввиду простым пересчетом итогов на дату, на которую граница запрета установлена ?
YPermitin; +1 Ответить
10. YPermitin 8572 06.04.19 11:27 Сейчас в теме
(9) имел ввиду уменьшение периода рассчитанных итогов.

Например, в регистре данные с 2010 до 2019 год. Итоги рассчитаны также с 2010 по 2019. Отчеты по регистру строятся только за 18 и 19 года.

В этом случае можно установить период рассчитанных итогов с 2018 года, тем самым уменьшив размер таблиц итогов.

При реструктуризации итоги пересчитываются, а если их будет меньше, то и пересчитываться они будут тоже меньше.

Но тут надо смотреть а не делает ли кто еще запросов к прошлым периодам, а то они могут стать очень тяжелыми.
11. ellavs 712 06.04.19 17:47 Сейчас в теме
Спасибо, добавила в закладки.
YPermitin; +1 Ответить
12. YPermitin 8572 06.04.19 18:34 Сейчас в теме
13. 3vs 07.04.19 09:04 Сейчас в теме
Всё круто, "Как лампочка горит вижу, а как керосин по проводам течёт не понимаю..."
Юрий, завидую Вашим светлым мозгам!

Вопрос, ежели Вы, не дай Бог, конечно, вдруг внезапно померли, или решили всё бросить и уехать в глушь, в Саратов, заниматься сельским хозяйством,
что со всем этим будут делать ваши клиенты?
Кто сможет подхватить упавшее знамя?
Вы этот случай как-то предусматриваете?
YPermitin; +1 Ответить
14. YPermitin 8572 07.04.19 09:20 Сейчас в теме
(13) спасибо на добром слове :)

Все что здесь и в некоторых предыдущих публикациях написано - это не для всех. Не зря же это в разделе "Highload". Большинству клиентов это просто не надо, а тем кому надо - обычно в штате есть специалисты, которые в этом разбираются. И не один.

Мое внезапное сельское хозяйство в глуши Саратовской области не помешает бизнесу =D

Плюс ко всему, все это описано в инструкциях или местных Вики, так сказать для будущих поколений разработчиков и администраторов.
15. 3vs 07.04.19 09:48 Сейчас в теме
(14)Ну, тогда это другое дело! :-)

Согласитесь, 1С вполне себе справедливо "Лицензионное соглашение не позволяет использовать недокументированные фирмой "1С" средства для построения решений на платформе "1С:Предприятие"." не позволяет работать с базой не штатными средствами, поди разберись, если что-то пошло не так, где
грабли платформы а где "самодеятельности"! :-)

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

Как-то за державу обидно, столько в стране людей с мозгами, способными
сделать не хуже 1С, но все мозги в секте 1С!
Деньги-деньги, платная подписка, платные сервисы...

Была в своё время "Высший сорт бухгалтерия" однопользовательская бухгалтерия раздавалась бесплатно, но в 2015 году разорились и от пиратства и от нашего государства...
Сейчас и сайт-то www.v-sort.ru уже не существует - "Домен продается"... :-(
YPermitin; +1 Ответить
16. YPermitin 8572 07.04.19 10:05 Сейчас в теме
(15) нет разницы какая информационная система используется в энтерпрайзе. Будь то 1С, SAP, Dynamics или свои самописные системы на .NET/JAVA или на других крутых словах. Проблемы все одни и те же у всех.

Конечно, можно не выходить из экосистемы 1С, считать что платформа сама все оптимизирует, что SQL Server / PG работают и сами отлично из коробки и т.д. Но это будет самообман. Все же лучше разбираться что и как работает, тогда и жизнь будет проще (или не будет...). Поэтому лицензионное соглашение фирмы "1С" это вы правильно назвали - "прикрывает себе зад". Но даже оно никогда не защитит от некомпенентности или ошибок администраторов и разработчиков, так что этот их пункт полностью бесполезен.

Что касается альтернатив - они есть, но они дороже и специфичны для особых отраслей. А 1С пошла в массы со всеми вытекающими. Конкурировать с ней тяжело просто потому, что она "у всех" и поддержку для нее найти проще. А то что дешевле и проще, то и распространяется быстрее.

P.S. Это не для спора или холивара, просто мысли в коммент :)
17. 3vs 07.04.19 10:32 Сейчас в теме
(16)Согласен! :-)
А то что дешевле и проще, то и распространяется быстрее.

В настоящее время, к 1С, по моему, это уже не относится...
18. YPermitin 8572 07.04.19 10:41 Сейчас в теме
(17) относительно других продуктов пока все еще дешевле, вроде как.

Но вот для крупных внедрений недавно лицензия КОРП подорожала. Возможно, это сигнал.
19. 3vs 07.04.19 10:51 Сейчас в теме
(18)Это уже не сигнал, а свершившийся факт!
Логика развития, видимо, диктует...
YPermitin; +1 Ответить
20. ufedor 54 07.04.19 11:19 Сейчас в теме
За статью спасибо, тоже начинаю об этом думать. У нас файлы хранятся в томах, а самой большой таблицей оказались версии объектов - пользователи не хотят отказываться от истории. Буду пытаться переносить ее на медленный диск.
Насчет лицензионного соглашения позвольте не согласиться. Насколько я понимаю, речь идет о том что 1с не рекомендует работать с ДАННЫМИ (чтение/изменение) в обход стандартных средств 1с. То есть когда вы делаете удаление регистра сведений используя truncate table это уже нарушение. Тут есть разделение - администратору СУБД сами данные не нужны, а 1С не нужна структура хранения.
Если говорить применительно к обсуждаемому вопросу, никаких требований по размещению таблиц в файлах 1с не предъявляет. Со стороны сервера 1с главное чтобы таблица с таким именем была доступна, внутренняя кухня субд его не касается.
Kaval88; YPermitin; +2 Ответить
21. YPermitin 8572 07.04.19 11:37 Сейчас в теме
(20) спасибо за интерес к публикации!

По поводу лицензии, то тут спорно. Там в соглашении сказано про использование недокументированных возможностей. А на партнерском форуме вроде как офф. позиция также против сжатия данных средствами СУБД, хотя это влияет лишь на способ их хранения.

Сама фирма "1С" вроде как не спешит устанавливать границы разрешенных действий с базой. Формулировки в основном общие.
22. Aletar 08.05.19 04:32 Сейчас в теме
Спасибо за статью. Я хочу попробовать перенести на другой диск (более быстрый) системные таблицы (Config, ConfigSave, ...) своей базы для разработки, есть ли там какие-то нюансы при обслуживании, а то развалится база не ко времени?
23. DBOdin_Lab 2 30.07.19 09:51 Сейчас в теме
Добрый день!
Интересная публикация для меня, так как недавно завершил секционирование базы с разделением данных (fresh, типовая бухгалтерия).
В моем случае схема секционирования назначает каждой области данных свою файловую группу.
Не знаете, что будет при реструктуризации новым способом (v2)?
Насколько я понимаю она не создаёт новые таблицы и добавляет колонки используя Alter table. Возможно при таким способе реструктуризации у нас не будет необходимости исправлять файловые группы или схемы секционирования?
YPermitin; +1 Ответить
24. YPermitin 8572 30.07.19 11:13 Сейчас в теме
(23) интересный опыт у Вас будет.

К сожалению, я не пользовался плотно новым механизмом реструктуризации, т.к. до этого были с ним некоторые проблемы. Но , по идее, если новых таблиц не создается, то все должно быть ок.

Возможны вопросы с невыровненными по секциям индексами, т.к. не понятно к какой файловой группе их относить. Но нужно эксперементировать.

В крайнем случае, обычную реструктуризацию можно адаптировать с помощью триггеров, как я описывал в предыдущих статьях.
25. 3vs 30.07.19 11:42 Сейчас в теме
"Остается надеяться, что наступят светлые времена, когда платформа 1С позволит использовать возможности СУБД без таких костылей."
Это только если Юрий перейдёт работать в 1С! :-)
Главным по СУБД! :-)
YPermitin; +1 Ответить
26. YPermitin 8572 30.07.19 11:56 Сейчас в теме
(25) я думаю спецы в фирме "1С" получше меня, просто они статьи на ИС не публикуют :)
27. 3vs 30.07.19 14:24 Сейчас в теме
(26)Ну, ежели костыли используются, то это вряд ли... :-)
28. Dorosh 142 01.08.19 12:41 Сейчас в теме
Более эффективный и гибкий подход - это перенос таблиц и индексов в другую файловую группу с помощью скриптов. Вот так будет выглядеть скрипт для переноса всех индексов регистра сведений "История адресных объектов" в третью файловую группу.


Не проще ли заставить менеджмент студию заскриптовать создание индекса, а потом в полученном скрипте подпилить файловую группу?
29. A_Max 18 06.08.19 11:54 Сейчас в теме
В Вот это поворотхранилище, где находится основной файл базы данных, не хватило места при выполнении реструктуризации. Ведь в процессе платформа создает таблицу заново в основной файловой группе базы, то есть в "PRIMARY".

Новые платформы вроде уже делают alter вместо drop/create ?
30. user1284652 15.10.19 15:09 Сейчас в теме
Или отдать сисадмину на разбивку или схождение с ума или через обновление как вариант.

Если коротко то так
Как он отработает?

1. Для любой таблицы будет выполнена инструкция alter table. Выполняется мгновенно. Без копирования строк из старой таблицы в новую. Будет добавлена колонка в таблицу БД с указанным Вами типом. Если тип, к примеру, ссылочный - значение колонки во всех строках будет вида "ПустаяСсылка" (16-ричное число 0x00000000000000000000000000000000).

2. Для добавления индекса сразу будет запущена инструкция create index. Без копирования строк из старой таблицы в новую. Если индексов несколько - команды create выполняются параллельно. На таблице 100 млн строк индексы по 3 реквизитам добавились за 30 минут (реальный живой тест не на самом мощном ПК с обычным жестким диском, не SSD).

ну а дальше все становится более понятным и перегружать страницу не хочется
Оставьте свое сообщение

См. также

Исследование технологического журнала 1С при помощи регулярных выражений в блокноте Промо

Производительность и оптимизация (HighLoad) v8 Бесплатно (free)

Все из тех, кто пробовали сдать на сертификат "Эксперт по технологическим вопросам 1С", сталкивались с методикой ЦКТП - разбор файлов технологического журнала при помощи консоли bash. Я, в свою очередь,внёс изменения в данную методику. Мне хотелось достичь более понятного вида и сфокусироваться на Perl, в качестве предпочтительного средства обработки файлов ТЖ. Вот что из этого вышло:

30.10.2017    28819    0    MrWonder    42    

Автоматическая классификация ошибок технологического журнала

Технологический журнал v8 1cv8.cf Бесплатно (free)

В статье обсудим пример практической настройки конфигурации «Мониторинг производительности» для автоматической классификации ошибок по группам/кластерам на данных текстов описания ошибок. Используем механизм векторной модели текстов и косинусное сходство между ними.

25.06.2020    1865    0    ivanov660    12    

Выявляем и оптимизируем ресурсоемкие запросы 1С:Предприятия

Производительность и оптимизация (HighLoad) Администрирование СУБД Технологический журнал Структура метаданных v8::Запросы Бесплатно (free)

Обычно предметом оптимизации являются заранее определенные ключевые операции, т.е. действия, время выполнения которых значимо для пользователей. Причиной недостаточно быстрого выполнения ключевых операций может быть неоптимальный код, неоптимальные запросы либо же проблемы параллельности. Если выясняется, что основная доля времени выполнения ключевой операции приходится на запросы, то осуществляется оптимизация этих запросов. При высоких нагрузках на сервер СУБД в оптимизации нуждаются и те запросы, которые потребляют наибольшие ресурсы. Такие запросы не обязательно связаны с ключевыми операциями и заранее неизвестны. Но их также легко выявить и определить контекст их выполнения, чтобы оптимизировать стандартными методами.

24.05.2020    6010    0    DataReducer    22    

[SQL Server] Использование trace flag 9592 для сжатия траффика в кластере AlwaysOn

Производительность и оптимизация (HighLoad) v8 Бесплатно (free)

Недавно мы столкнулись с проблемой производительности, при которой дополнительная нагрузка, связанная с записью большого массива данных, приводила к существенным задержкам в операциях записи основного траффика. Найденное решение позволило не только уменьшить влияние нового процесса на основной пользовательский трафик, но и существенно снизить сетевой траффик между синхронными репликами кластера.

18.05.2020    1652    0    Aleksey.Bochkov    3    

Долго открывается конфигуратор Промо

Производительность и оптимизация (HighLoad) v8 1cv8.cf Бесплатно (free)

В ОС Windows Server 2012 бывает полезно выключать службу Dynamic Fair Share Scheduling (DFSS позволяет балансировать и распределять ресурсы между пользователями), чтобы повысить производительность 1С:Предприятие 8 в ряде случаев.

22.04.2015    40087    0    Gilev.Vyacheslav    1    

Эти занимательные временные таблицы

Производительность и оптимизация (HighLoad) Администрирование СУБД v8 Бесплатно (free)

Кое-что интересное о временных таблицах и работе платформы 1С с ними.

06.04.2020    10091    0    YPermitin    0    

Оптимизация запросов 1С посредством индексации временных таблиц. Миф? Тестируем, смотрим, считаем

Производительность и оптимизация (HighLoad) Практика программирования v8 Бесплатно (free)

Появилось свободное время, решил проверить на работе индексацию таблиц. Решил поделиться с Вами результатами исследования. Давайте порассуждаем на эту тему? Часто ли вы пользуетесь индексацией в запросах? Платформа 8.3.16.1224

03.04.2020    3269    0    feva    14    

Как я собрал для себя высокопроизводительный и бесплатный облачный бекенд для 1С на PosgreSQL + PostgREST

Производительность и оптимизация (HighLoad) WEB Интеграция Мобильная разработка Администрирование веб-серверов v8 Бесплатно (free)

В этой статье я расскажу о проблемах бека для мобильных приложений или другого фронта, который требует производительности, быстрой реакции и отказоустойчивости, и как я решил это благодаря opensource проекту PostgREST и СУБД Postgre SQL 12. Проведу простой тест производительности для сравнения 1С с данным решением. Это может быть полезно всем, кто разрабатывает мобильные приложения либо фронтсайд-приложения для 1С на чем угодно - на мобильной платформе или на нативном языке или на Simple UI. И также обзор новых функций SimpleUI для связи с этим бекендом.

31.03.2020    11178    0    informa1555    21    

Как можно "положить" SQL сервер с помощью обычной консоли запросов 1С Промо

Производительность и оптимизация (HighLoad) v8 1cv8.cf Бесплатно (free)

Описано как из 1С, с помощью безобидной на первый взгляд обработки, можно сделать неработоспособным SQL сервер. Предложены меры, позволяющие избежать этого.

22.01.2014    66494    0    yuraos    112    

Многострочный контекст событий

Производительность и оптимизация (HighLoad) Технологический журнал v8 Бесплатно (free)

Разбор технологического журнала с группировкой событий по первой или последней строке многострочного контекста.

31.03.2020    2781    0    vasilev2015    9    

Анализ взаимоблокировок

Производительность и оптимизация (HighLoad) Технологический журнал v8 Бесплатно (free)

Скрипт Bash, который выводит полную информацию взаимоблокировок по технологическому журналу. Не имеет аналогов в отечественных публикациях.

20.03.2020    4081    0    vasilev2015    21    

Многопоточность

Практика программирования Производительность и оптимизация (HighLoad) v8 Бесплатно (free)

Увеличиваем скорость загрузки данных в 20 раз. Как следует использовать многопоточность и готовый модуль для внедрения.

18.03.2020    6140    0    kaliuzhnyi    43    

Ускорение реструктуризации таблиц Промо

Инструментарий разработчика Администрирование данных 1С Тестирование и исправление Бесплатно (free)

Иногда, может сложиться так, что на уже долгое время работающей базе нужно изменить типа реквизита, или добавить индексируемые поля, или просто добавить реквизит. Так вот после этого, нас ожидает долгий процесс (если база больших размеров)реструктуризации таблицы. В этой статье я рассмотрю алгоритм значительного сокращения времени реструктуризации.

12.09.2013    51229    0    OLEG4120    32    

Планы запросов - это просто! Разбор оптимизаций запросов PostgreSQL на живых примерах

Производительность и оптимизация (HighLoad) v8::Запросы Бесплатно (free)

Проблема быстродействия 1С напрямую зависит от производительности запросов. Но как понять механику работы СУБД с помощью плана запроса? Андрей Овсянкин и Никита Грызлов на конференции Infostart Event 2019 Inception подробно рассмотрели алгоритм работы с планом запроса СУБД PostgreSQL, полученным из технологического журнала, и рассказали, на что обратить внимание, чтобы оптимизировать работу системы.

17.02.2020    8113    0    Evil Beaver    13    

Оптимизатор запросов. Вторая часть

Производительность и оптимизация (HighLoad) v8 Бесплатно (free)

Продолжение статьи об оптимизаторе запросов. Во второй части мы попробуем создать свой оптимизатор и попутно разберемся с такими вопросами, как: хранение файлов; индексы; статистика.

23.01.2020    5885    0    darkdan77    59    

Ускоряем списание партий УПП 1.2 / 1.3 / УТ 10.3 Промо

Производительность и оптимизация (HighLoad) v8 УТ10 УПП1 Бесплатно (free)

Не секрет, что многие пользователи, использующие партионный учет (а таких очень много, даже среди огромных холдингов, несмотря на пропаганду РАУЗ) при больших нагрузках сталкиваются с резким замедлением списания партий.

21.06.2013    53283    0    Антон Ширяев    116    

Улучшаем производительность 1С. Рекомендации

Производительность и оптимизация (HighLoad) v8 1cv8.cf Россия Бесплатно (free)

Каждый уважаемый разработчик 1С сталкивался или столкнется с вопросом производительности высоконагруженных систем. В статье агрегирован основной набор рекомендаций, который позволит повысить производительность системы. Эти рекомендации должны быть просто must have по определению.

23.01.2020    7182    0    Kaval88    26    

Активный 2019 год на Инфостарт

О сообществе О жизни Бесплатно (free)

О прошедшем 2019 годе в 100 и 500 словах.

26.12.2019    5443    0    YPermitin    24    

Мониторим производительность с помощью 1С RAS

Инструментарий разработчика Производительность и оптимизация (HighLoad) v8 1cv8.cf Бесплатно (free)

Подключаемся и анализируем данные через 1С RAS. Необходимо выполнить 5 пунктов и серьезный инструмент мониторинга будет у вас в руках.

19.12.2019    9983    0    ivanov660    16    

Сравнение скорости работы 1C+MSSQL и файлового варианта Промо

Производительность и оптимизация (HighLoad) v8 1cv8.cf Россия Бесплатно (free)

На форумах постоянно задается один и тот же вопрос: почему 1C+MSSQL медленнее обрабатывает запросы чем файловая? Затем обычно идет «флуд» на несколько десятков страниц. Есть два популярных «течения» в таких форумах — одни говорят что для клиент-серверного варианта это нормально, файловый вариант всегда должен работать быстрее, другие говорят что 1С плохо работает с субд. В результате «баталий и выяснения отношений» на форумах люди расходятся при своих мнения.

19.02.2013    53909    0    Gilev.Vyacheslav    46    

Весёлые картинки о работе Performance Monitor на Windows Server 2016 Std по мотивам расследования потери производительности на базе 1С

Производительность и оптимизация (HighLoad) v8 Бесплатно (free)

Данная публикация посвящена одной особенности Performance Monitor на Windows Server 2016 Std. Как понимать графики Performance Monitor на Windows Server 2016 Std при расследовании проблем в работе 1С.

22.10.2019    6989    0    EugeneSemyonov    11    

Обслуживание баз данных. Не так просто, как кажется

Производительность и оптимизация (HighLoad) Администрирование СУБД v8 1cv8.cf Бесплатно (free)

Считаете, что обслуживание индексов и статистик дело простое? Что ж, это не всегда так.

14.10.2019    16418    0    YPermitin    28    

Мониторинг высоконагруженной системы

Производительность и оптимизация (HighLoad) v8 Бесплатно (free)

Высоконагруженной системе (более 8000 клиентских сессий) мониторинг необходим. Про опыт использования инструментов для мониторинга – самописной системы информирования, написанной на C#, и конфигурации «Центр контроля качества» в связке с системой отображения данных Grafana, на конференции Infostart Event 2018 Education рассказал Олег Репников.

13.09.2019    8523    0    Repich    5    

Параллельные вычисления в 1С 8 Промо

Производительность и оптимизация (HighLoad) v8 1cv8.cf Бесплатно (free)

Решение позволяет ускорять выполнение запросов в 1С 8 в отчетах путем их параллельного выполнения в разных потоках.

11.02.2013    29657    0    gallam99    19    

Использование Zabbix для сбора информации о серверных вызовах и управляемых блокировках с сервера 1С Предприятия, работающего на платформе GNU/Linux

Администрирование данных 1С Zabbix v8 Бесплатно (free)

Описанные в данном опусе механизмы ни в коей мере не противопоставляются тому, что реализует КИП от 1С или какие-либо другие инструменты (решения)! Это всего лишь еще один взгляд на "проблему", который может быть полезен в некоторых ситуациях.

10.09.2019    17519    0    Sloth    24    

Хранение файлов - как уменьшить размер базы данных

Чистка базы Производительность и оптимизация (HighLoad) Практика программирования Разработка v8 Россия Бесплатно (free)

Хранение файлов в базе 1С можно оптимизировать для уменьшения размера хранимых данных.

09.09.2019    7983    0    2tvad    17    

Анализ производительности APDEX

Производительность и оптимизация (HighLoad) v8 1cv8.cf Бесплатно (free)

Отчет для просмотра и анализа замеров производительности в конфигурациях на базе БСП.

31.08.2019    9875    2    YPermitin    7    

Ubuntu vs CentOS vs Win2k8 vs Debian: производительность PostgreSQL Промо

Статистика базы данных Производительность и оптимизация (HighLoad) v8 Бесплатно (free)

Хотя интернет уже переполнен статьями о "правильной" настройке связки PostgreSQL и 1C 8.2, для подводных камней всегда остается место. При сравнении производительности СУБД PostgreSQL на разных ОС, показатели различаются в разы. Самую большую обиду принесла любимая Ubuntu (человечность). После долгих дней и ночей проведенных за консолью этой ОС, она разочаровала окончательно. Тормоза PostgreSQL в Ubuntu Server. Что с ними делать? Сколько раз можно наступать на грабли?

03.11.2012    41856    0    madmpro    32    

Неочевидные проблемы производительности: важность системного подхода при анализе

Производительность и оптимизация (HighLoad) v8 Россия Бесплатно (free)

Часто программисты и 1С-ники сталкиваются с совершенно необъяснимыми на первый взгляд проблемами. Но это потому, что их внимание направлено только на один сегмент системы, а не на всю систему полностью. О том, почему нужно стараться смотреть на ситуацию комплексно, рассказал специалист по производительности компании SOFTPOINT Александр Денисов.

19.07.2019    8487    0    Филин    12    

Ловля блокировок на связке "Microsoft SQL server - 1С"

Производительность и оптимизация (HighLoad) v8 v8::blocking Бесплатно (free)

Материал относится к базам данных на связке «1С - MS SQL Server». Один из способов отлова блокировок в бд 1С . Переход к управляемым блокировкам через режим "Автоматический и управляемый".

16.07.2019    9151    0    fhqhelp    0    

Анти-оптимизация: как мы ускорили запрос в 4 раза, сделав его неоптимальным

Производительность и оптимизация (HighLoad) Практика программирования Решение задач на 1С:Специалист Разработка v8 Бесплатно (free)

В этой статье приведен пример неочевидной "оптимизации" запроса, которая противоречит всем правилам, описанным в книгах для подготовки к сертификации "1С:Эксперт по технологическим вопросам", а также преподаваемым на курсах подготовки экспертов.

02.07.2019    10639    0    igordynets    119    

Ускорение чтения правил обмена в УПП 1.3 в 20 раз!

Производительность и оптимизация (HighLoad) v8 1cv8.cf Бесплатно (free)

Способ оптимизации чтения правил обмена конвертации данных. Может понадобиться при большом размере правил и высокой периодичности обмена.

27.06.2019    9344    0    YPermitin    16    

Хотите снизить нагрузку на процессор сервера в 2 раза?

Производительность и оптимизация (HighLoad) v8 Бесплатно (free)

В статье рассмотрено влияние частого запуска регламентных заданий на процессор сервера 1С.

27.06.2019    8975    0    Дмитрий74Чел    6    

Непридуманные истории по оптимизации. История 1

Производительность и оптимизация (HighLoad) v8 1cv8.cf Россия Бесплатно (free)

Первая статья из планируемого цикла об оптимизации приложений на базе 1С. Без теории. Одна практика.

13.06.2019    12113    0    Repich    117    

Оптимизация: неэффективные запросы

Производительность и оптимизация (HighLoad) Практика программирования Разработка v8 1cv8.cf Бесплатно (free)

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

13.06.2019    5602    0    slayer-ekb    10    

Многопоточное ускорение однопользовательских нагрузок в 1С + Microsoft SQL Server 2017

Практика программирования Производительность и оптимизация (HighLoad) v8 v8::Запросы Бесплатно (free)

Взаимодействие с Microsoft SQL Server нередко вызывает трудности у 1С-ников, а потому интересны любые моменты, связанные с его использованием. О своем опыте работы с новым SQL Server 2017 участникам конференции Infostart-2018 рассказал директор ООО «Аналитика софт» Дмитрий Дудин.

11.06.2019    22903    0    dmurk    144    

За 5 шагов добавляем мониторинг счетчиков производительности серверов MS SQL и 1С

Статистика базы данных Производительность и оптимизация (HighLoad) v8 Бесплатно (free)

Мы расскажем и покажем, как добавить данные счетчиков производительности серверов 1С и MS SQL в нашу базу мониторинга за 15 минут. Приведем список наиболее важных из них, опишем основные особенности.

28.05.2019    17784    0    ivanov660    9    

Не думать о секундах свысока...

Производительность и оптимизация (HighLoad) v8 1cv8.cf Бесплатно (free)

Несколько примеров оптимизации типовой конфигурации УТ11. Описанные приемы подходят для многих других конфигураций.

21.05.2019    7628    0    vasilev2015    21    

Альтернативная стратегия управления блокировками

Производительность и оптимизация (HighLoad) v8 v8::blocking 1cv8.cf Россия Бесплатно (free)

Данная публикация освещает одну из альтернативных стратегий блокирования данных на уровне MS SQL Server, которая недоступна средствами 1С, но может быть весьма полезной. Разбирается практический пример.

20.05.2019    6841    0    zhichkin    15    

Как работают управляемые блокировки

Производительность и оптимизация (HighLoad) v8 Бесплатно (free)

Все типовые конфигурации содержат ошибки, потому как управляемые блокировки в 1С слишком уж "управляемые", при понижении уровня изоляции про некоторые "нюансы" просто забыли. Для создания и эксплуатации качественной системы, которая способна поддерживать транзакционную целостность данных при параллельной работе, информацию в этой статье желательно знать, хотя, конечно, ничего особо нового я не открыл.

29.04.2019    21349    0    comol    198    

Странное потребление места на диске С

Производительность и оптимизация (HighLoad) v8 Бесплатно (free)

Решение проблемы постоянного роста папки %AppData%/Local/Temp.

26.04.2019    13745    0    kuzyara    12    

Включение встроенного в платформу механизма "Копии базы данных" и использование "Дата Акселератора". Новый стандартный механизм использования баз OLAP в 1С

Производительность и оптимизация (HighLoad) v8 Россия Бесплатно (free)

С версии 1С 8.3.14 в платформе появился новый функционал «Копии базы данных». В данной публикации я хочу рассказать, как включить использование данного механизма в платформе 1с и как его использовать для получения отчетов с копии базы данных, которая может быть вынесена на внешний сервер относительно текущей базы данных, а также как использовать систему «Дата акселератор», в которой база данных целиком размещена в оперативной памяти рабочего сервера кластера серверов «1С:Предприятия».

25.04.2019    13157    0    Elf1k    27    

5 простых шагов и 15 минут на разворачивание инструмента мониторинга проблем производительности базы 1С

Производительность и оптимизация (HighLoad) v8 Бесплатно (free)

В этой статье мы разберем механизм использования конфигурации "Анализ технологического журнала" на практике, и всего через 15 минут работы вы получите функциональный, удобный инструмент мониторинга проблем производительности базы 1С.

18.04.2019    27796    0    ivanov660    77    

Как одно изменение конфигурации PostgreSQL улучшило производительность медленных запросов в 50 раз

Производительность и оптимизация (HighLoad) v8 1cv8.cf Россия Бесплатно (free)

В связи с санкциями и другими событиями сейчас все более и более актуальна тема перевода ПО компаний на отечественное и свободное программное обеспечение. Одной из самых востребанных СУБД на рынке на данный момент является PostgreSQL - надежная, высокопроизводительная и хорошо масштабируемая СУБД, которая является прямым конкуретном таким крупным компаниям с их топовыми продуктами, как Oracle, IBM и Microsoft. Однако каждый, кто переходит на PostgreSQL, сталкивается с трудностями, прежде всего с настройкой и производительностью. Не обошли проблемы с производительностью "слоника" и меня. Предлагаю вашему вниманию перевод статьи "How a single PostgreSQL config change improved slow query performance by 50x" автора Pavan Patibandla, которая мне помогла улучшить производительность PostgreSQL.

18.03.2019    15064    0    w.r.    23    

Простое программное решение проблем с блокировками SQL

Производительность и оптимизация (HighLoad) v8 v8::blocking 1cv8.cf Россия Бесплатно (free)

Описание одного из способов программного решения проблемы блокировок при проведении документов в клиент-серверной 1С.

06.03.2019    8648    0    dmitrydemenew    38