Советы по автоматизации. Тормоза на файловой базе - как избежать (из недавнего опыта) 1с 8.3 windows xp медленно работает

1С запускается по две минуты? Журнал документов открывается по 40 секунд? Документ проводится почти минуту?

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

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

  • быстрая работа пользователя с базой по сети в монопольном режиме и крайне медленная - при одновременной работе нескольких пользователей.
  • быстрая работа пользователя с локальной базой на сервере и медленная - по сети.
  • процессор на сервере почти не занят.
  • загрузка гигабитной сетевой карты меньше 5%.
  • обращения к файловой системе чуть менее 10 мбайт/сек.
  • При попытке одновременно провести документы один компьютер тупит около минуты, а второй вылетает из 1С с текстом ошибки "не удалось заблокировать таблицу".
  • Запуск 1С длится около 3 минут.

Советы, которые могут помочь ускорению работы файловой базы:

  • Перейти на работу в терминальном доступе. К сожалению, Windows 7 не позволяет штатными средствами превратиться в сервер терминалов - максимум одно активное подключение. При этом остальные сеансы не прекращаются, можно переподключиться под другим пользователем - "выкинув" при этом предыдущего пользователя, но не завершив его сеанс. Поэтому следует перенести 1С на серверную ОС, где таких ограничений нет, либо решить вопрос сторонней утилитой .
  • Отключить использование протокола сети IPv6, настроить адресацию на "старом" IPv4.
  • Добавить процессы 1С в исключения брандмауэра Windows, а также в исключения антивируса, либо отключить их вовсе (более рискованно, но простой тест показал увеличение скорости перепроведения документов при отключенном антивирусе Avast в разы!)
  • Запустить индексацию полнотекстового поиска в 1С либо выключить его вовсе
  • Запустить тестирование и исправление базы, проверку утилитой ChDbfl (расположена утилита в папке "bin" установленной технологической платформы).
  • Запустить в конфигурации пункт "Проверка конфигурации" (если конфигурация не типовая, это может быть полезным).
  • Отключить ненужные функциональные опции (чем меньше лишнего в управляемом интерфейсе - тем, как правило, быстрее он работает).
  • Настроить права пользователям (чем меньше лишнего в управляемом интерфейсе - тем, как правило, быстрее он работает).
  • Запустить пересчет итогов и восстановление последовательности (значительный прирост может быть только в случае, если долгое время итоги не восстанавливались).
  • Указать "Скорость соединения - низкая" в настройках списка баз.
  • Дефрагментация диска с файловой базой.
  • Свертка базы (может оказаться полезной, если база большого объема, например, за несколько лет).
  • Модернизация аппаратной части - более быстрый винчестер (SSD), новый свитч, процессор, память и т.д.
  • Установить на веб-сервер, доступ с помощью тонкого клиента.

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

P.S. В конфигурации УТ 11.1, запустить файловую 1С, используя сетевой доступ к общей папке - нереально, т.к. даше самый шустрый твердотельный диск, оперативная память и процессор утыкаются в сетевые блокировки, и работа более одного пользователя становится фактически невозможна.
Самописные небольшие конфигурации вполне могут работать весьма быстро даже в файловом варианте.

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

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

Если установлена ОС Windows 7:

Если установлена ОС Windows 8 или 10:



Также помните, что свободного места на диске должно быть не менее 2ГБ, а подключение по сети – иметь скорость не менее 100 Мб/сек.

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

При выборе конфигурации для сервера стоит помнить о следующем:

  • Один рабочий процесс сервера 1С потребляет в среднем 4 ГБ (не путать с соединением пользователя, т.к. на один рабочий процесс может приходиться столько соединений, сколько вы укажите в настройках сервера);
  • Использование на одном физическом сервере 1С и СУБД (особенно MS SQL) дает выигрыш при обработке больших массивов данных (например, закрытии месяца, расчете бюджета по модели и т.д.), но существенно снижает производительность при ненагруженных операциях (например, создание и проведение документа реализации и т.д.);
  • Помните, что сервера 1С и СУБД должны быть в связке по каналу «толщиной» от 1 ГБ;
  • Используйте высокопроизводительные диски и не совмещайте роли сервера 1С и СУБД с другими ролями (например, файловый, АД, контроллер домена и т.д.).

Если после проверки оборудования 1С все равно «тормозит»

У нас маленькая компания, 7 человек, а 1С «тормозит». Обращались к специалистам, и те сказали, что нас спасет только клиент-серверный вариант. Но для нас такое решение не приемлемо, это слишком дорого!

Проведите регламентные работы в базе*:

1. Запустите базу в режиме конфигуратора.


2. Выберите в главном меню пункт «Администрирование», а в нем – «Тестирование и исправление».


3. Установите все галочки, как на картинке. Нажмите «Выполнить».

*Эта процедура может занимать от 15 минут до часа в зависимости от размеров базы и характеристик вашего ПК.

Если это не помогло, то делаем клиент-серверное подключение, но без дополнительных вложений в «железо» и ПО:

1. Выберите самый не загруженный компьютер в офисе из числа стационарных (не notebook): у него должно быть не менее 4 ГБ оперативной памяти и сетевое подключение не менее 100 Мб/сек.

2. Активируйте на нем IIS (Internet Information Server). Для этого:





3. Опубликуйте свою базу на этом компьютере. По этой теме есть доступный материал на ИТС, или обратитесь к специалисту из поддержки.

4. На компьютерах пользователей настройте доступ к базе через тонкий клиент. Для этого:


Откройте окно запуска 1С.


Выберите вашу рабочую базу. Здесь это «Ваша база». Нажмите «Изменить». Установите переключатель в положение «На веб-сервере», укажите в строке под ним имя или IP-адрес сервера, на котором активировали IIS, и имя под которым публиковали базу. Нажмите кнопку «Далее».


Установите переключатель «Основной режим запуска» в режим «Тонкий клиент». Жмите «Готово».

У нас немаленькая компания, но и не очень большая, человек 50 – 60. Мы используем клиент-серверный вариант, но «тормозит» 1С жутко.

В этом случае рекомендуется разделить сервер 1С и сервер СУБД на два разных сервера. При разделении обязательно помните: если они остались на одном физическом сервере, который просто виртуализовали, то диски у этих серверов должны быть разными –разными физически! Также обязательно настройте регламентные задания на сервере СУБД, когда речь идет об MS SQL (подробнее об этом описано на сайте ИТС)

У нас немаленькая компания, более 100 пользователей. Все настроено в соответствии с рекомендациями 1С для такого варианта, но при проведении некоторых документов 1С очень сильно «тормозит», а иногда вообще возникает ошибка блокировки. Может быть, сделать свертку базы?

Подобная ситуация возникает из-за размера вполне конкретного регистра накопления или бухгалтерии (но чаще – накопления), из-за того что регистр либо вообще на «закрывается», т.е. есть движения приход, но нет движений расход, либо количество измерений, по которым считаются остатки регистра, очень велико. Может иметь место даже микс из двух предыдущих причин. Как определить, какой именно регистр все портит?

Фиксируем время, когда документы проводятся медленно, либо время и пользователя, у которого возникла ошибка блокировки.

Открываем журнал регистрации.



Находим нужный нам документ, в нужное время, по нужному пользователю с типом события «Данные.Проведение».



Отсматриваем весь блок проведения до момента отмены транзакции, если была ошибка блокировки, или отыскиваем самое долгое изменение (время от предыдущей записи больше минуты).

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

Мы очень крупная компания, более 1000 пользователей, тысячи документов в день, свой ИТ-департамент, огромный парк серверов, несколько раз оптимизировали запросы, но 1С «тормозит». Мы, видимо, переросли 1С, и нам нужно что-то более мощное.

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

  • Используйте технологии параллельного и асинхронного программирования, которые поддерживает 1С (фоновые задания и запросы в цикле).
  • При проектировании архитектуры решения откажитесь от использования регистров накопления и регистров бухгалтерии в самых «узких» местах.
  • Разрабатывая структуру данных (регистры накопления и/или сведений) придерживайтесь правила: «Самая быстрая таблица для записи и чтения – это таблица с одной колонкой». О чем идет речь, станет более ясно, если посмотреть на типовой механизм РАУЗ.
  • Для обработки больших объемов данных используйте вспомогательные кластеры, где подключена та же база (но ни в коем случае так нельзя делать при интерактивной работе!!!). Это позволит обойти стандартные блокировки 1С, что даст возможность работать с базой почти на той же скорости, что и при работе непосредственно средствами SQL.

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

Во многом оптимизация 1С и скорость работы зависит от работы с блокировками, запросами и индексами. Постараемся ответить на вопрос «как ускорить работу 1С» (вопрос, как ускорить запуск 1С, мы рассмотрим в другой статье) и избежать жалоб пользователей на «долгое проведение документов», которое неминуемо сказывается на бизнес-процессах.

Часть 3. Производительность 1С

Блокировки в 1С 8.3: поиск и устранение в коде, перевод на управляемые блокировки

Блокировки являются частью механизма ACID. Рассмотрим его концепцию, представленную в виде упрощенной схемы, на примере SQL SERVER

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

1С Управляемые блокировки

Механизм блокировок был вынесен на сервер 1С, а на уровне СУБД изоляция снизилась до минимума. На MS SQL уровень изоляции был понижен до Read Committed с механизмом разделяемых блокировок на платформе 8.2 и механизмом версионирования строк на платформе 8.3 (так называемый Read Committed Snapshot Isoliation). Точнее, это одноименное свойство базы данных и два режима работы Read Committed, зависящие от этого параметра.

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

СУБД Вид блокировки Уровень изоляции транзакций Чтение вне транзакции
Автоматические блокировки
Файловая База Данных Таблиц Serializable Dirty read
MS SQL Server Записей Dirty read
IBM DB2 Записей Repetable Read или Serializable Dirty read
PostgreSQL Таблиц Serializable Consistent reading
Oracle Database Таблиц Serializable Consistent reading
Управляемые блокировки
Файловая База Данных Таблиц Serializable Dirty read
MS SQL Server 2000 Записей Read Commited Dirty read
MS SQL Server 2005 и выше Read Commited Snapshot Consistent reading
IBM DB2 до версии 9.7 Записей Read Commited Dirty read
IBM DB2 версии 9.7 и выше Записей Read Commited Consistent reading
PostgreSQL Записей Read Commited Consistent reading
Oracle Database Записей Read Commited Consistent reading

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


Блокировки 1С. Пользователь не будет ждать на блокировках, произойдет ускорение работы 1С, если придерживаться определенных правил:

  • Продолжительность транзакций должна быть максимально сокращена по времени. Проведение в транзакции длительных расчетов в 100% случаев приведет к блокировке при работе на OLTP системе.
  • Исключены длительные внешние операции в рамках транзакции, например, отправка и принятие подтверждений по электронной почте, работа с файловой системой и другие дополнительные действия. Все операции должны быть вынесены в отложенные короткие задания.
  • Максимально оптимизированы запросы.
  • Создание индексов должно производиться только по мере необходимости, для обеспечения оптимальной производительности запросов в пределах приложения.
  • Минимизированы включения в кластерный индекс часто обновляемых столбцов. Обновления столбца/ов кластерного ключа индекса требует блокировки, как на кластерном индексе, так и на всех некластеризованных индексах (так как их строка-локатор содержит ключ кластерного индекса).
  • По возможности создан и используется покрывающий индекс для сокращения времени выборки данных.
  • Использование самого низкого уровня изоляции транзакциями, что потребует перехода на режим управляемых блокировок.

Инструменты для диагностики блокировок:

  • Технологический журнал;
  • Центр управления производительностью из инструментария 1С;
  • Облачные сервисы Гилева;

Ниже приведен пример мониторинга системы сервисом Гилева. Общая длительность блокировок ~15 часов. Более 400 активных пользователей. После принятия решений и оптимизации – время таймаутов меньше минуты, а количество блокировок сократилось в ~670раз.

Было:



Стало:


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

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



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


Фрагмент 1

//Блокировки в терминах 1C SELECT * FROM dbo.ReturnLockName1C(DEFAULT,DEFAULT) as t Where TableName1C IS NOT NULL ORDER BY t.Resource

Применение данного механизма позволяет получить полную информацию об имеющихся блокировках на текущий момент. Если в отчете одни S-блокировки, проблема может заключаться в длительном запросе или запросах. Для установления причины и места их появления в коде можно пойти разными путями: использовать объекты DMO SQL-сервера (но учитываем, что данные из них сбрасываются после перезагрузки сервера) или настроить Data Collector, сохранив данные мониторинга в таблицах на определенное время. Главное, получить тексты проблемных запросов.

Использование объектов DMO SQL-сервера

Выводим дату старта сервера для понимания актуальности данных. Разбиваем пакет по рейтингу чтения (физического, логического, нагрузке на процессор). В этом случае используются основные данные из sys.dm_exec_query_stats. Текст запроса переводим в термины 1С. Если по тексту запроса можно понять контекст вызова, то осталось посмотреть план запроса, найти проблемные операторы и понять, что можно сделать.

Фрагмент 2

//время запуска SELECT sqlserver_start_time FROM sys.dm_os_sys_info; //Toп запросов no физическому чтению SELECT TOP (50) (total_physical_reads) AS Итого_физическое_чтение,

Определение проблемных запросов в результате сбора Data Collector

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


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

Далее, включив технологический журнал и указав в настройках «поиск по строке» и часть запроса, которая гарантированно будет встречаться, можно выяснить, откуда вызван проблемный запрос. Если на сервере имеется несколько баз или известно имя пользователя, стоит добавить дополнительные поля для фильтра, чтобы снизить нагрузку на сервер при сборе технологического журнала.

Пример проблемного запроса и образец настройки технологического журнала:



Оптимизация запросов как возможность ускорить 1С 8.3


Последствия неоптимальных запросов могут проявляться в виде длительных проведений документов, мучительно долгого формирования отчетов, «зависания» системы и прочих неприятных событий.

При работе с запросами НЕЛЬЗЯ:

  • Соединять таблицы с подзапросами;
  • Соединять обычные таблицы с виртуальными;
  • Использовать логического «ИЛИ» в условиях;
  • Использовать подзапросы в условиях соединения;
  • Получать данные через точку от полей составного типа без ключевого слова «Выразить».

При работе с запросами МОЖНО:

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

Использование индексов и их влияние на качество производительности системы

Очень много написано про индексы, о необходимости их использования и влияние на качество работы системы. Постараемся разобраться в тонкостях «устройства» индексов, вариантах применения и преимуществах перед обычными таблицами.

Индексирование является важной частью ядра СУБД. Отсутствующие индексы, или наоборот, их излишнее количество, влияют на скорость выборки, модификацию, добавление и удаление данных. Рассмотрим индексирование на примере наиболее распространенной СУБД компании Microsoft.

Для общего понимания, как это работает, рассмотрим подробности устройства механизмом хранения данных, которые мы обычно представляем в виде таблицы (например, Excel).

Единицей физического хранения данных является страница - модуль размером в 8 Кбайт, принадлежащий только одному объекту (например, таблице или индексу). Страница является наименьшей единицей для чтения и записи. Страницы собраны в экстенты. Экстент состоит из 8 последовательных страниц. Страницы экстента могут принадлежать как одному, так и нескольким объектам. Если страницы принадлежат нескольким объектам, экстент называется «смешанным».

Ее содержимое можно посмотреть ниже:





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

По умолчанию, если не использовать специальных операторов T-SQL, пустая таблица создается в виде «кучи» – простого набора страниц и экстентов. Данные в «куче» не имеют никакого логического порядка. Ядро SQL Server отслеживает принадлежность страниц и экстентов к определенному объекту с помощью специальных системных страниц, называемых «картами распределения индекса» (Index Allocation Map). Каждая таблица или индекс имеет по крайней мере одну страницу IAM, называемую «первой страницей IAM».


Таким образом, после создания обычной таблицы, по умолчанию, получается хаотичное расположение данных. Посмотреть статус таблицы можно с помощью следующей процедуры:


Основные индексы, которые использует платформа 1С

Фрагмент 3

Мифы и реальность:

Миф первый: кластерные индексы и таблица данных – это две разные сущности, хранящиеся отдельно друг от друга.

Миф второй: кластерных индексов в одной таблице может быть много.

Скачал программу для оптимизации СУБД. Создал рекомендованные индексы. Скорость выборки увеличилась на 50%. Изменение и добавление данных замедлилось в 7раз.

Кластеризованный (кластерный) индекс

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

Фрагмент 4

SELECT NAME, TYPE, TYPE_DESC FROM sys.indexes WHERE object_id = OBJECT_ID("ДанныеТрассировки")

Некластеризованный индекс

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

Можно добавить неключевые столбцы на конечный уровень некластеризованного индекса и обойти существующее ограничение на ключи индексов (900 байт и 16 ключевых столбцов), выполняя полностью индексированные запросы.

После добавления некластерного индекса, произошло копирование данных, и появился еще один объект:



Фрагмент 5

SELECT NAME, TYPE, TYPE_DESC FROM sys.indexes WHERE object_id = OBJECT_ID("ДанныеТрассировки")

Схема кластерного индекса после получения его из кучи в виде сбалансированного дерева:



Схема некластерного индекса, полученного из кластерной таблицы (обратите внимание, столбец row locator имеет ключ кластерного индекса):



Влияние индексов на производительность запросов

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

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

Обратим внимание, что кластерный индекс блокировать ни в коем случае нельзя, т.к. это закроет доступ к данным таблицы. Это относится только к тем индексам, которые вы создали самостоятельно, через T-SQL. Причина создания индексов средствами T-SQL, минуя «1С:Предприятия», связана, в первую очередь, с ограниченными возможностями платформы 1С в части манипуляции индексами и включения в созданный/емый индекс дополнительных полей.

Инструкция T-SQL, которая выполняет действие по блокированию индекса:

//Блокируем отдельный индекс в таблице -ALTER INDEX _Reference22_ByPredefinedIDNotUniq ON _Reference22 DISABLE; //Включаем нужный индекс -ALTER INDEX _Reference22_ByPredefinedIDNotUniq ON _Reference22 REBUILD;

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

Определение необходимых или лишних индексов для ускорения выполнения запросов

По умолчанию 1С создает определенный базовый набор индексов. Зачастую, их просто не хватает. SQL-сервер имеет механизмы, которые позволяют понять на основании рабочей нагрузки, насколько необходимы имеющиеся индексы.

Помощник по настройке ядра СУБД (Database Engine Tuning Advisor) анализирует базы данных и составляет рекомендации по оптимизации производительности запросов. Его можно использовать для выбора и создания оптимальных наборов индексов, не обладая экспертным уровнем понимания структуры баз данных или внутренних процессов SQL Server. Помощник по настройке ядра СУБД позволяет выполнять следующие задачи:

  • Устранение неполадок производительности конкретного проблемного запроса;
  • Настройка большого набора запросов в одной или нескольких базах данных.

Объекты DMO (dynamic management objects), к которым относятся динамические административные представления и функции динамического управления. Например, инструкцией T-SQL можно получить все индексы, которые не использовались с момента последнего запуска сервера.



Фрагмент 6

WITH vl as (SELECT OBJECT_NAME(I.object_id) AS objectname, I.name AS indexname, I.index_id AS indexid FROM sys.indexes AS I INNER JOIN sys.objects AS O ON O.object_id = I.object_id WHERE I.object_id > 100 AND I.type_desc = "NONCLUSTERED" AND I.index_id NOT IN (SELECT S.index_id FROM sys.dm_db_index_usage_stats AS S WHERE S.object_id=I.object_id AND I.index_id=S.index_id AND database_id = DB_ID("Имя_базы’))) SELECT objectname,T1.NameTable1C, indexid, indexname FROM vl OUTER APPLY dbo.ReturnTableName1C(objectname) as T1 ORDER BY objectname, indexname;

Инструкция, с помощью которой можно создавать необходимые индексы, которые рекомендует ядро СУБД:



Фрагмент 7

SELECT T1.NameTable1C as Наименование_таблицы_1C, "CREATE INDEX " + " ON "
Оптимизатор запросов во время генерации плана выполнения запроса выявляет необходимость создания недостающего индекса. Эту информацию он сохраняет в XML ShowPlan. Т.к. планы запросов хешируются и инструкции сохраняются (до следующего перезапуска сервера), то их можно извлечь, обработать и получить готовые инструкции создания необходимых индексов для любого плана выполнения в кэше. Стоит обратить внимание на частоту выполнения запроса: чем она выше, тем более актуальными являются результаты выполнения запроса и, соответственно, собранные показатели. Если запрос выполнялся единожды, его результаты не столь показательны.


Фрагмент 8

CROSS APPLY query_plan.nodes(’//StmtSimple") AS stmt(stmt_xml) WHERE stmt_xml.exist("QueryPlan/Missinglndexes") = 1) SELECT TOP 30 DatabaseName as Наименование_базы, TableName as Наименование_таблицы, T1.NameTable1C as Наименование_таблицы_1С, equality_columns as Столбцы_сравнения, include_columns as Столбцы_для_включения,

Фрагмент 9

USE [Имя_базы] GO CREATE NONCLUSTERED INDEX ON .[_Document497] ([_Fld12771_TYPE],[_Fld12771_RTRef]) INCLUDE ([_Date_Time],[_Fld12771_RRRef],[_Fld12782RRef],[_Fld12784]) GO Некоторые особенности индексирования по агрегатным полям и полям сортировки.

Создание индекса на столбцах, указанных в предложении «УПОРЯДОЧИТЬ ПО» (ORDER BY), помогает оптимизатору запроса быстро организовать результирующий набор данных, так как значения столбцов отсортированы в индексе заранее. Внутренняя реализация механизма «СГРУППИРОВАТЬ ПО» (GROUP BY) также сначала сортирует значения столбцов для быстрой группировки необходимых данных.

При использовании типовых рекомендаций стоит проверять результат до и после оптимизации. Приведем пример использования логического объединения «ИЛИ» и его альтернативы (для устранения проблемы типовыми рекомендациями) – методики изменения запроса через синтаксис «ОБЪЕДИНИТЬ ВСЕ».

Сам запрос 1С с «ИЛИ»:

ВЫБРАТЬ Код, Наименование, Ссылка ИЗ Справочник.Контрагенты КАК Контрагенты ГДЕ Контрагенты.Код = "000000004" ИЛИ Контрагенты.Код = "0074853" ИЛИ Контрагенты.Код = "000000024" ИЛИ Контрагенты.Код = "009679294" ИЛИ Контрагенты.Код = "0074742" ИЛИ Контрагенты.Код = "000000104";

Модификация запроса с «ОБЪЕДИНИТЬ ВСЕ»:

ВЫБРАТЬ Код, Наименование, Ссылка ИЗ Справочник.Контрагенты КАК Контрагенты ГДЕ Контрагенты.Код = "000000004" ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ Код, Наименование, Ссылка ИЗ Справочник.Контрагенты КАК Контрагенты ГДЕ Контрагенты.Код = "0074853" ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ Код, Наименование, Ссылка ИЗ Справочник.Контрагенты КАК Контрагенты ГДЕ Контрагенты.Код = "000000024" ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ Код, Наименование, Ссылка ИЗ Справочник.Контрагенты КАК Контрагенты ГДЕ

Фактический план запроса (для удобства отображения и сравнения производительности, запросы перехвачены и выполнены в SSMS):


В данном случае, после оптимизации производительность упала в два раза из-за многократного использования оператора Key Lookup, который всегда сопровождается оператором Nested Loops. Поэтому, используя схему по оптимизации запроса, следует замерять целевое время до и после использования доработок. Данный пример показан с целью «доверяй, но проверяй», поскольку между типовыми рекомендациями и практическими задачами может быть несогласованность.

2. Особенность работы программы. Часто даже при оптимальных настройках 1С работает очень медленно. Особенно сильно быстродействие падает, когда количество одновременно работающих с базой превышает 4-5 пользователей.

Кто вы в компании?

Решение проблемы медленной работы 1С зависит от того, кто вы в компании. Если вы технический специалист - просто читайте дальше. Если вы директор или бухгалтер, переходите по специальной ссылке ↓

Пропускная способность сети

Как правило, с одной информационной базой (ИБ) работает не один, а несколько пользователей. При этом, постоянно идет обмен данными между компьютером, на котором установлен клиент 1С и компьютером, на котором расположена ИБ. Объем этих данных достаточно существенный. Часто возникает ситуация, когда локальная сеть работающая на скорости 100 Мбит/с, а это наиболее часто встречающаяся скорость, просто не справляется с нагрузкой. И снова пользователь жалуется на тормоза в программе.

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

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

Решение первое. Модернизация инфраструктуры

Это, пожалуй, самое очевидное решение. Рассчитаем его минимальную стоимость.

Как минимум, на каждый компьютер нам понадобиться планка оперативной памяти на 2 Гб, стоит, в среднем, 1500 руб, сетевая карта с поддержкой скорости 1 Гбит/c, стоит около 700 руб. Дополнительно понадобиться как минимум 1 маршрутизатор, поддерживающий скорость работы 1 Гбит/с, который обойдется примерно 4000 руб. Итого, стоимость - 26000 рублей на оборудование, без учета работ.

В принципе, скорость может существенно вырасти, однако, теперь покупать в офис недорогие компьютеры уже не получится. Кроме того, данное решение не применимо для тех, кто использует Wi-Fi или хочет работать через интернет - в их случае скорость сети может быть в десятки раз ниже. Напрашивается мысль: «А нельзя ли реализовать работу программы целиком на одном мощном сервере, чтобы пользовательский компьютер не участвовал в сложных расчетах, а служил просто для передачи изображения?» Тогда можно работать даже на очень слабых компьютерах, даже в сетях с низкой пропускной способностью. Естественно такие решения существуют.

Решение второе. Сервер терминалов

Получил большую популярность еще во времена 1С 7. Реализован на серверной версии Windows и прекрасно справляется с нашей задачей. Однако, имеет свои подводные камни, а именно - стоимость лицензий.

Сама операционная система обойдется где-то в 40000 руб. Дополнительно к этому нам понадобиться для каждого, кто планирует работать в 1С еще лицензия Windows Server CAL, стоимостью примерно в 1700 руб и лицензия Windows Remote Desktop Services CAL, которая стоит около 5900 руб.

Посчитав стоимость для сети из 10 компьютеров, мы получим в итоге 116 000 руб. только на одни лицензии. Добавьте к этому стоимость самого сервера (минимум 40 000 руб) и стоимость работ по внедрению, впрочем, даже без этого, цена на лицензии получилась внушительная.

Решение третье. Сервис 1С Предприятия

Фирма 1С разработала свой решение данной проблемы, способное серьезно повысить скорость программы. Но и тут есть нюанс.

Дело в том, что стоимость такого решения составляет от 50 000 до 80 000 руб., в зависимости от редакции. Для компании до 15 пользователей получается дороговато. Большие надежды возлагались на «мини-сервер 1С предприятия», который, по заявлениям фирмы 1С, ориентирован на малый бизнес и стоит в районе 10000 - 15000 руб.

Однако, поступив в продажу, этот продукт стал большим разочарованием. Дело в том, что максимальное количество пользователей, с которыми мини-сервер можно было использовать, составляло всего 5.

Как написал на форуме один программист 1С: «До сих пор не понятно, почему 1С выбрала именно 5 подключений! От 4 пользователей проблемы только начинаются, а тут на пяти все заканчивается. Хочешь подключить шестого - доплати еще 50 тыс. Сделали бы хоть на 10 подключений…»

Конечно, мини-сервер тоже нашел своего потребителя. Однако для компаний, где с 1С работают от 5 человек, так и не появилось простого и недорогого решения.

Помимо описанных выше методов ускорения программы, существует еще один, идеально подходящий для сегмента 5 - 15 пользователей, а именно - web-доступ для 1С в файловом режиме.

Решение четвертое. Web-доступ для 1С в файловом режиме

Принцип работы следующий: на компьютере поднимается дополнительная роль web-сервера, на котором происходит публикация ИБ.

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

Таким образом, для работы в 1С можно использовать даже очень слабые машины, а пропускная способность сети становиться не критичной. Наши тесты показали, что можно комфортно работать через мобильный интернет на дешевом планшете, при этом не испытывая дискомфорт.

Данный вариант уступает серверу 1С предприятия по скорости работы, но разница эта до 15-20 пользователей визуально практически не заметна. Кстати, для реализации web-сервера можно использовать IIS (для Windows) и Apache (для Linux) и оба этих решения бесплатны!

Несмотря на очевидные преимущества, данный способ оптимизации работы 1С не получил большой популярности.

Не берусь утверждать наверняка, но скорее всего, это связано с двумя причинами:

  • Довольно слабое описание в технической документации
  • Находится на стыке ответственности системного администратора и программиста 1С

Обычно, когда с проблемой низкой скорости работы обращаются к сисадмину, он предлагает модернизацию инфраструктуры или сервер терминалов, если к специалисту 1С - предлагается сервер 1С предприятия. Так что, если в вашей компании, специалист отвечающий за инфраструктуру и специалист, отвечающий за 1С работают «рука об руку», то смело можете воспользоваться решением на базе web-сервера.

Ускорим 1С. Дистанционно, быстро и без вашего участия

Мы умеем ускорять 1Ски и при этом не дергать заказчика. Мы вникаем в проблему, делаем свою работу и уходим. Если вам хочется, чтобы программа просто нормально работала - обратитесь к нам. Мы разберемся.

Оставьте заявку - и получите бесплатную консультацию по ускорению программы.

Очень часто к нам обращаются с вопросами вида:

  • из-за чего тормозит сервер 1С?
  • компьютер с 1С работает очень медленно
  • жутко тормозит клиент 1С

Иногда, как решение вопроса, Мы предлагаем клиентам сервер для 1С в аренду без тормозов, с выбором конфигурации сервера и операционной системы, сервер Вы можете сконфигурировать онлайн на сайте нашего партнера, по ссылке https://1cloud.ru раздел Услуги , раздел Виртуальный сервер .

Что же делать и как это победить, и так по порядку:

Клиенты очень медленно работают с серверной версией 1С

Кроме медленной работы 1С, так же наблюдается медленная работа с сетевыми файлами. Проблема встречается при обычной работе и при RDP

для решения этого, после каждой установки Семерки или 2008-го сервера всегда запускаю

netsh int tcp set global autotuning=disabled

netsh int tcp set global autotuninglevel=disabled

netsh int tcp set global rss=disabled chimney=disabled

и сеть работает без проблем

иногда оптимальным является:

netsh interface tcp set global autotuning= HighlyRestricted

вот как выглядит установка

Настроить брандмауэр Антивируса или Windows

Как настроить брандмауэр Антивируса или Windows для работы сервера 1С (связка из Сервера 1С: Предприятие и MS SQL 2008, например).

Добавьте правила:

  • Если сервер SQL принимает подключения на стандартный порт TCP 1433, то разрешаем его.
  • Если порт SQL динамический, то необходимо разрешить подключения к приложению %ProgramFiles%\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Binn\sqlservr.exe.
  • Сервер 1С работает на портах 1541, кластер 1540 и диапазоне 1560-1591. По совершенно мистическим причинам иногда такой список открытых портов все равно не позволяет выполнять подключения к серверу. Чтобы заработало наверняка, разрешите диапазон 1540-1591.

Настройка производительности Сервера / Компьютера

Для того чтобы компьютер работал с максимальной производительностью - нужно настроить его на это:

1. Настройки BIOS

  • В BIOS сервера отключаем все настройки по экономии электропитания процессора.
  • Если есть «C1E» & обязательно ОТКЛЮЧАЕМ!!
  • Для некоторых не очень параллельных задач также рекомендуется выключить гипертрейдинг в биосе
  • В некоторых случаях (особенно для HP!) надо зайти в BIOS сервера, и ВЫКЛЮЧИТЬ там пункты, в названии которых есть EIST, Intel SpeedStep и C1E.
  • Взамен надо там же найти пункты, связанные с процессором, в названии которых есть Turbo Boost, и ВКЛЮЧИТЬ их.
  • Если в биосе есть общее указание режима энергосбережения & включить его в режим максимальной производительности (он ещё может называться «агрессивный»)

2. Настройки схемы в операционной системе - Высокая производительность

Сервера с архитектурой Intel Sandy Bridge умеют динамически менять частоты процессора.

Иногда решением проблемы медленной работы сервера 1С это устаревшее или сломанное оборудование, в этом случае мы предлагаем клиентам сервер для 1С в аренду без тормозов, с выбором конфигурации сервера и операционной системы, его Вы можете на сайте нашего партнера, по ссылке https://1cloud.ru раздел Услуги, раздел Виртуальный сервер.

Если у Вас есть вопросы пожалуйста обращайтесь:

  • звоните по телефону +7-812-385-55-66 в Санкт-Петербурге
  • пишите на адрес
  • оставляйте заявку у нас на сайте на странице "Онлайн заявка"