Как проверить скорость sql 1с
Итак, дано:
1. Сервер: Dell PowerEdge R815 (AMD Opteron 6276 2.3GHz, 4 процессора, 128 ГБ ОЗУ). SAS диски 10000 об/мин.
2. ОС: Windows Server 2008 R2 x64
3. СУБД: MS SQL Server 2012
4. Там же установлен сервер приложений 1С (8.3.10.2466). С SQL-сервером общаются в режиме Shared memory. Количество ИБ на процесс = 1.
5. Клиента 1С ERP пользователи (их на данный момент не более 10) запускают с сервера терминалов. Сеть между терминалкой и сервером БД - 1Гбит через коммутатор.
6. SQL-серверу выделено 90 ГБ ОЗУ (причём, что интересно, раньше он выедал классически всю выделенную ему память. Сейчас же, после последней перезагрузки, не более 500МБ). Параметр Maxdop = 1. Cost threshhold of parallelism=15. Maximum worker threads-2048. Модель восстановления БД Simple.
7. Мониторинг производительности показал что дисковых очередей значительных нет. Блокировок нет. Buffer Cache Hit Ratio стабильно в районе 100%.
8. Тест Гилёва в попугаях показал 18 пернатых (если кому интересно).
Собственно проблема заключается в том, что при открытии списков и проведении документов приходится ждать по 10-30 секунд. При этом единственное, что я заметил, резко возрастает в мониторинге значение параметра Batch requests/sec и вместе с ним SQL Re-Compilations/sec.
Развернул из выгруженного DT-шника БД у себя на рабочей машине (совсем офисная станция) в файловый вариант - всё летает. Мгновенно любые операции выполняются.
А насколько показательны вот эти вещи?
"Batch requests/sec и вместе с ним SQL Re-Compilations/sec"
Какие по ним можно сделать выводы?
Клиента 1С ERP пользователи (их на данный момент не более 10) запускают с сервера терминалов.
Тут еще проблема может быть.
Настрой 1с с локального компа.
(1) 2.2.4.31
насчет RLS, к сожалению, не знаю. Где посмотреть?
(2) Да. Переиндексация/ребилд по степени фрагментации, обновление статистики.
(3) Неоптимальные запросы, проблемы с планом выполнения. Если грешить на код.
(4) проблема повторяется даже если кэша вообще нет, с нуля. SSD нет в наличии, поэтому не вариант.
(5) Пробовал с локального - та же история.
Система 1С занимает доминирующее положение на рынке автоматизации малого и среднего бизнеса. Если компания выбрала учетную систему 1С, то обычно в ней работают практически все сотрудники, начиная от рядовых специалистов и заканчивая руководством. Соответственно, от скорости работы 1С зависит скорость бизнес-процессов компании. Если 1С работает с неудовлетворительной скоростью, то это напрямую сказывается на работе всей компании и на получении прибыли.
Фактически существует три метода ускорения 1С:
- Увеличение аппаратных мощностей.
- Оптимизация настроек операционной системы и СУБД.
- Оптимизация кода и алгоритмов в 1С.
На текущий момент мы предлагаем возможность провести бесплатный тест производительности базы 1С в нашем эталонном облаке.
Первый метод требует покупки оборудования и лицензий, третий - больших трудозатрат программистов и, как следствие, оба пути выливаются в значительные финансовые затраты. В первую очередь нужно обратить внимание на программный код, так как никаким увеличением мощностей сервера невозможно компенсировать неверный код. Любой программист знает, что с помощью всего нескольких строчек кода возможно создать процесс, который полностью загрузит ресурсы любого сервера.
В случае, если компания уверена в оптимальности кода программы, а она по-прежнему работает медленно, обычно руководство принимает решение увеличить серверные мощности. В этот момент возникает логичный вопрос: чего не хватает, сколько и что необходимо в итоге добавить.
Компания 1С на вопрос о том, сколько нужно ресурсов, дает достаточно расплывчатый ответ, о нем мы писали ранее в наших постах. И поэтому приходится самостоятельно проводить эксперименты и разбираться, от чего же зависит производительность 1С. Ниже описаны эксперименты с производительностью программы в компании EFSOL.
При работе с 1С 8.2, особенно с конфигурациями, которые используют управляемые формы, был замечен странный факт: 1С работает быстрее на рабочей станции нежели на мощном сервере. Причем все характеристики рабочей станции хуже, чем у сервера.
№ | Характеристика | Рабочая станция | Сервер |
1 | Процессор | Intel Core i5 3,0 Ghz | 2*intel xeon E5620 2,4 Ghz |
2 | Сокет | LGA 2011 | LGA 1366 |
3 | Память | 16 Gb DDR3 1333 Mhz | 48 Gb DDR3 1066 Mhz |
4 | Дисковая подсистема | Один диск SSD Intel 520 240 Gb | IBM Storage, SAS15K RAID 10 подключен по 1 Gbit iSCSI |
5 | Производительность по тесту Гилева | 44,64 | 17,53 |
6 | Версия СУБД | MSSQL 2008R2 | |
7 | Платформа 1С | 8.2.18.109 |
Таблица 1 – Конфигурации, на которых проводилось первоначальное тестирование
Рабочая станция показывает производительность на 155% больше, чем сервер 1С с превышающими характеристиками. Мы начали разбираться, в чем дело и сужать круг поисков.
Рисунок 1 – Замеры производительности на рабочей стации тестом Гилева
Первое подозрение было, что тест Гилева неадекватен. Замеры открытия форм, проведения документов, формирования отчетов и т.д инструментами КИП показали, что тест Гилева выдает оценку пропорциональную реальной скорости работы в 1С.
Количество и частота ОЗУ
Анализ доступной в интернете информации показал, что многие пишут о зависимости производительности 1С от частоты памяти. Именно от частоты, а не от объема. Решили проверить эту гипотезу, так как у нас на сервере частота ОЗУ 1066 Mhz против 1333 Mhz на рабочей станции, а объем ОЗУ на сервере и так значительно выше. Решили поставить сразу не 1066 Mhz, а 800 Mhz для того, чтобы эффект зависимости производительности от частоты памяти был нагляднее. Результат – производительность упала на 12% и составила 39,37 единиц. На сервер поставили память с частотой 1333 Mhz вместо 1066 Mhz и получили незначительный прирост производительности – около 11%. Производительность составила 19,53 единицы. Соответственно, дело не в памяти, хотя ее частота дает небольшой прирост.
Рисунок 2 – Замеры производительности на рабочей станции после понижения частоты ОЗУ
Рисунок 3 – Замеры производительности на сервере после повышения частоты ОЗУ
Дисковая подсистема
Следующая гипотеза была связана с дисковой подсистемой. Сразу возникло два предположения:
- SSD лучше, чем SAS диски, пусть даже они в 10 рейде.
- iSCSI работает медленно или некорректно.
Поэтому в рабочую станцию поставили обычный SATA-диск вместо SSD, то же самое сделали и с сервером – базу разместили на локальном SATA-диске. В результате, замеры производительности никак не изменились. Скорее всего, это происходит, поскольку есть достаточное количество ОЗУ и диски практически никак не задействованы при выполнении теста.
Процессоры на сервере, конечно, мощнее и их два, но частота немного ниже, чем на рабочей станции. Решили проверить влияние частоты процессора на быстродействие: для сервера процессоров с большей частотой под рукой не оказалось, поэтому снизили частоту процессора на рабочей станции. Снизили сразу до 1,6, чтобы корреляция проявлялась ярче. Тест показал, что производительность упала значительно, но даже с процессором 1,6 рабочая станция выдавала почти 28 единиц, что практически в 1,5 раза больше чем на сервере.
Рисунок 4 – Замеры производительности на рабочей стации с процессором 1,6 Ghz
В интернете встречается информация о том, что на производительность 1С может влиять видеокарта. Мы пробовали использовать интегрированное видео рабочей станции, профессиональный адаптер Nvidia NVIDIA® Quadro® 4000 2 Gb DDR5, старую видеокарту GeForce 16MbSDR. Во время проведения теста Гилева какой-либо значительной разницы не заметили. Возможно, видеокарта все-таки влияет, но в реальных условиях, когда нужно открывать управляемые формы и т.д.
В данный момент существует два подозрения, почему рабочая станция работает быстрее даже с заметно худшими характеристиками:
- Процессор. Тип процессора на рабочей станции лучше подходит 1С.
- Чипсет. При прочих равных условиях наша рабочая станция имеет более новый чипсет, возможно, дело в нем.
Мы планируем закупить необходимые комплектующие и продолжить тесты, чтобы окончательно выяснить, от чего же в большей степени зависит производительность 1С. Пока идет процесс согласования и закупки, мы решили выполнить оптимизацию, тем более, что это ничего не стоит. Были выделены следующие этапы:
Этап 1. Настройка системы
Для начала выполним следующие настройки в BIOS и операционной системе:
- В BIOS сервера отключаем все настройки по экономии электропитания процессора.
- Выбираем в операционной системе план «Максимальная производительность».
- Процессор также настраиваем на максимальную производительность. Это можно сделать с помощью утилиты PowerSchemeEd.
Этап 2. Настройка SQL сервера и сервера 1С:Предприятия
Вносим следующие изменения в настройки сервера СУБД и 1С:Предприятия.
- Настройка протокола Shared Memory:
- Shared Memory включится только на платформе начиная с 1С 8.2.17, на более ранних релизах включится Named Pipe – несколько уступающий в скорости работы. Данная технология работает только если службы 1С и MSSQL установлены на одном физическом или виртуальном сервере.
- Рекомендуется перевести службу 1С в режим отладки, как не парадоксально это дает прирост производительности. По умолчанию отладка на сервере выключена.
- Настройка SQL сервера:
- Нам нужен только сервер, остальные службы, которые к нему относятся и, возможно, кто-то ими пользуется, только тормозят работу. Останавливаем и отключаем такие службы как: FullText Search (у 1С собственный механизм полнотекстового поиска), Integration Services и т.д.
- Устанавливаем максимально отведенное серверу количество памяти. Это необходимо для того, чтобы sql-сервер рассчитывал на этот объем и чистил память заблаговременно.
- Устанавливаем максимальное количество потоков (Maximum worker threads) и выставляем повышенный приоритет сервера (Boost priority).
Этап 3. Настройка рабочей базы данных
После того, как сервер СУБД и 1С:Предприятия оптимизированы, переходим к настройкам баз. Если база еще не развернута из .dt файла, и вы знаете примерный ее размер, то первичному файлу размер инициализации лучше сразу указать «>=» размера базы, но это дело вкуса, он все равно вырастет при развертке. А вот Автоувеличение размера надо обязательно указать: примерно по 200 МБ на базу и по 50 МБ на лог, т.к. значения по умолчанию – рост по 1МБ и по 10% очень сильно тормозят работу сервера, когда ему при каждой 3й транзакции надо файл увеличивать. Также хранение файла базы и файла лога лучше указать на разных физических дисках или RAID группах, если используется RAID массив, и ограничить разрастание лога. Рекомендуется выносить файл Tempdb на высокоскоростной массив, так как СУБД к нему довольно часто обращается.
Этап 4. Настройка регламентных заданий
Регламентные задания создаются довольно просто с помощью Maintenance Plan в разделе Management, используя графические инструменты, поэтому подробно описывать, как это делается не будем. Остановимся на том, какие операции необходимо выполнять для повышения производительности.
- Дефрагментацию индексов и обновление статистики нужно производить ежедневно, т.к. если фрагментированность индексов > 25%, это резко снижает производительность сервера.
- Дефрагментация и обновление статистики - делается быстро и не требует отключения пользователей. Также рекомендуется делать ежедневно.
- Полная реиндексация – делается с блокировкой БД, рекомендуется делать хотя бы раз в неделю. Естественно, после полной переиндексации сразу же делается дефрагментация индексов и обновление статистики.
В итоге, с помощью тонких настроек системы, SQL сервера и рабочей базы, нам удалось повысить производительность на 46%. Замеры были проведены с помощью инструмента 1С КИП и с помощью теста Гилева. Последний показал 25,6 единиц против 17,53 которые были изначально.
Краткий вывод
- Производительность 1С не сильно зависит от частоты ОЗУ. При достижении достаточного ее объема дальнейшее наращивание памяти не имеет смысла, так как не приводит к увеличению производительности.
- Производительность 1С не зависит от видеокарты.
- Производительность 1С не зависит от дисковой подсистемы при условии, что не происходит превышения очереди чтения или записи дисков. Если установлены SATA диски и у них не превышена очередь, то установка SSD не приведет к повышению производительности.
- Производительность довольно сильно зависит от частоты процессора.
- При грамотной настройке операционной системы и MSSQL-сервера возможно добиться увеличения производительности 1С на 40-50% без каких-либо материальных затрат.
ВНИМАНИЕ! Очень важный момент! Все замеры были выполнены на тестовой базе с использованием теста Гилева и инструментов 1С КИП. Поведение реальной базы с реальными пользователями может отличаться от полученных результатов. Например, в тестовой базе мы не обнаружили зависимости производительности от видеокарты и объема ОЗУ. Данные выводы достаточно сомнительны и в реальных условиях эти факторы могут оказывать существенное влияние на производительность. При работе с конфигурациями, использующими управляемые формы, видеокарта важна и мощный графический процессор ускоряет работу с точки зрения прорисовки интерфейса программы, визуально это проявляется в более быстрой работе 1С.
Ваша 1С работает медленно? Закажите ИТ-обслуживание компьютеров и серверов специалистами компании EFSOL с многолетним стажем или перенесите свою 1С на мощный и отказоустойчивый виртуальный сервер 1С.
23.03.2020
insci
SQL Server
комментария 3
В этой статье мы рассмотрим популярные инструменты, T-SQL запросы и скрипты для обнаружения и решения различных возможных проблем с производительностью SQL Server. Эта статья поможет вам разобраться, когда вашему SQL Server недостаточно ресурсов (памяти, CPU, IOPs дисков), найти блокировки, выявить медленные запросы. Посмотрим какие есть встроенные инструменты и бесплатные сторонние скрипты и утилиты для анализа состояния Microsoft SQL Server.
Инструменты для диагностики SQL Server
Если вы правильно диагностировали проблему, то половина работы уже сделана. Рассмотрим какие инструменты обычно используются системным администратором для диагностики различных проблем в SQL Server:
Обнаружение и решение проблем с производительностью SQL Server
Самой распространенной проблемой с которой сталкивается системный администратор, работающий с SQL Server, это жалобы пользователей на производительность запросов и самого сервера: “тормозит”, “долго выполняется запрос“, и так далее.
Прежде всего нужно убедиться, что серверу хватает ресурсов. Рассмотрим, как в SQL Server быстро проанализировать использование памяти, CPU, дисков и наличие блокировок.
Анализ использования оперативной памяти SQL Server
Для начала нужно определить сколько памяти доступно SQL Server. Для этого запустите SSMS (SQL Server Management Studio), зайдите на сервер и зайдите в свойства сервера (ПКМ по названию сервера в Обозревателе объектов).
Сам по себе доступный объём RAM вам ничего не скажет. Нужно сравнить это число с используемой памятью в Диспетчере Задач и самим движком SQL Server с помощью DMV.
В Диспетчере задач, во вкладке Подробности, найдите sqlservr.exe и посмотрите сколько оперативной памяти использует этот процесс.
- Если на сервере, например, 128 GB оперативной памяти, а процесс sqlservr.exe использует 60 GB и ограничений по RAM у SQL Server нет, то оперативной памяти вам хватает.
- Если SQL Server использует 80-90% RAM от заданной или максимальной, то в таком случае нужно смотреть DMV. Имейте в виду, что sqlservr.exe не сможет использовать всю оперативную память. Если на сервере 128 GB, то sqlservr.exe может использовать только 80-90% (100-110 GB), так как остальная память резервируется для операционной системы.
Имейте в виду, что процесс SQL Server’a не отдаёт оперативную память обратно в систему. Например, ваш SQL Server обычно использует 20 GB памяти, но при месячном отчете он увеличивает потребление до 100 GB, и даже когда вычисление отчета закончится и сервер будет работать в прежнем режиме, процесс SQL Server’a всё равно будет использовать 100 GB до перезагрузки службы.
Даже если вы уверены, что оперативной памяти серверу хватает, не будет лишним точно знать объём потребляемой RAM.
Узнать реальное использование RAM можно с помощью Dynamic Management Views. DMV это административные вьюверы (представления). С помощью DMV можно диагностировать практически любую проблему в SQL Server.
Посмотрим sys.dm_os_sys_memory, для удобства используем запрос:
Рассмотрим каждый выводимый параметр:
Все эти данные полезны, если вы хотите точно определить сколько ваш SQL Server потребляет RAM. Чаще всего это используют, если есть подозрения что для экземпляра выделено слишком много оперативной памяти.
Если Вам нужно убедиться, что серверу хватает RAM, вы можете смотреть только на поля system_low_memory_signal_state, system_high_memory_signal_state и system_memory_state_desc. Если system_low_memory_signal_state = 1, то серверу явно не хватает оперативной памяти.
Загрузка процессора в SQL Server
Нагрузку на процессор определить проще, так как это можно сделать в Диспетчере задач. Чтобы узнать текущую нагрузку на процессор, найдите в Диспетчере задач процесс sqlservr.exe
Если вы хотите узнать нагрузку за прошедшее время, можно воспользоваться запросом:
В результате мы получим поминутную статистику использования процессора.
Анализ нагрузки на диск SQL Server
Посмотрим на загрузку дисков в операционной системе. Для этого запустите resmon.exe.
Нам нужна вкладка Disk. В секции Disk Activity отображаются файлы, к которым идёт обращение, и их скорость read/write на текущий момент. Отфильтруйте эту секцию по Total (кликните на Total). На самом верху будут файлы, которые на данный момент максимально используют диск. В случае с SQL Server это может быть полезно чтобы определить какая база больше всего нагружает диск на текущий момент.
В секции Storage отображаются все диски в системе. В этой секции нам нужны 2 параметра – Active Time и Disk Queue. Active Time в процентах отображает нагрузку на диск, то есть если вы видите на диске C:\ Active Time равный 90, это значит что ресурс чтения/записи диска на текущий момент используется на 90%. Столбец Disk Queue отображает очередь обращений к диску, и если значение очереди не равно нулю, то диск загружен на 100% и не справляется с нагрузкой. Так же если Active Time близок к 100, то диск используется практически на пределе своих возможностей по скорости.
Просмотр блокировок в SQL Server
После того как мы убедились, что серверу хватает ресурсов, можно переходить к просмотру блокировок.
Блокировки можно посмотреть через Activity Monitor в SSMS, но мы воспользуемся T-SQL, так как этот вариант более удобен и нагляден. Выполняем запрос:
Этот запрос возвращает список блокировок в виде дерева. Это удобно в работе, так как обычно, если возникает одна блокировка, она провоцирует за собой другие. Аналогично в Activity Monitor или в выводе sp_who2 можно увидеть поле “Blocked By”.
Если запрос ничего не вернул, то блокировок нет.
Если запрос вернул какие-то данные, то нужно проанализировать цепочку.
HEAD значит что этот запрос является причиной всех остальных блокировок ниже по дереву. 64 – это идентификатор процесса (SPID). После этого пишется тело запроса, который вызвал блокировку. Если у вас хватает ресурсов сервера, то скорее всего дело в самом запросе и во взаимном обращении к каким-то объектам. Для того чтобы сказать точнее, нужно анализировать конкретный запрос, который вызвал блокировку.
Политики SQL Server
Даже когда у вас всё работает хорошо и жалоб нет, на самом деле может быть много проблем, которые всплывут позже. Для этого в SQL Server есть политики.
Политика в SQL Server это, грубо говоря, проверка правила на соответствие заданному значению. Например, с помощью политик вы можете убедиться, что на всех базах на сервере выключен Auto Shrink. Рассмотрим пример импорта и выполнения политики
В SSMS, подключитесь к серверу, на котором хотите выполнять политики (Management -> раздел Policy Management).
Импортируем файл Database Auto Shrink.xml. Жмём Evaluate
На экземпляре node1 две базы данных, test1 и test2. На test2 включен autoshrink. Посмотрим детали.
Политика определила включенный параметр AutoShrink, в описании обычно пишется объяснения к правилам. В данном случае дается объяснение почему auto shrink лучше отключать.
Политики могут выполняться либо по расписанию, либо по требованию (разово). Результаты выполнения политики можно посмотреть в журнале политик.
При установке SQL Server нужно выбирать только используемые компоненты СУБД, и указывать настройки в соответствии с конфигурацией “железа” вашего сервера. Всегда следите чтобы серверу хватало ресурсов, и чтобы на сервере не было блокировок
Самым мощным инструментом для диагностики SQL Server является T-SQL и DMV. Так же рекомендуется построить круглосуточный мониторинг над SQL Server и над обслуживающей его инфраструктурой для обнаружения всех возможных проблем.
Недавно столкнулся с необычным случаем, у заказчика отвратительно работал сервер 1с, чтобы было понятно о чем идет речь, приведу такой пример — запуск толстого клиента мог занимать десяток минут. Когда измерили тестом Гилева, то результат был ниже худшего. Посмотрев ближайшие результаты замеров других пользователей, я понял, что это не единственный случай.
Речь не идет об оптимизации, когда надо поднять на 10-20% производительность, речь идет о поиске причин низкой производительности, и её устранению. Согласитесь это несколько разные вещи. На просторах интернета множество статей как раз о повышении производительности, которые ограничиваются только настройкой сервера 1с и (или) настройкой сервера баз данных. А вот статей, рассматривающих случаи низкой производительности, особенно если причин несколько, и эти причины находятся на разных уровнях, я не встречал.
Обычно администраторы бросаются смотреть результаты мониторинга. Тот случай, с которым я столкнулся, показывал практически нулевую загрузку процессора, наличие свободной ОЗУ, отсутствие очереди у сетевого интерфейса, и только очередь к диску показывала, что не все в порядке. Пришлось устроить проверку по полной программе, это, конечно, занимает много времени, требует исключения сервера из рабочего процесса, но зато дает результат. Возможно для кого-то подобный подход недопустим, более того, некоторые считают это непрофессиональным подходом, но им я ничем помочь не смогу.
Аппаратный уровень
Звучит банально, но именно с проверки работоспособности железа стоит начать. Дело в том, что можно только догадываться о проблемах с оборудованием, если смотреть на уровне операционной системы. В моем случае, не работал один из дисков в дисковом массиве. Как ни странно жесткий диск оказался исправным и, после водворения его на место, заработал, правда пришлось подождать некоторое время, пока не синхронизируются все данные (видать давно он был отключен). Если бы всё этим и закончилось, тогда бы и не было этой статьи. На всякий случай сервер подвергся аппаратному тестированию (стресс-тесты, тест памяти, физической проверки дисков и контроллеров), которые не выявили каких-либо проблем.
Уровень операционной системы
- привести в порядок файловую систему;
- отключить ненужные службы, удалить ненужные и, самое главное, вредоносные программы;
- проверить оптимальность настроек операционной системы.
- проверке логической структуры диска;
- удалении временных и ненужных файлов;
- дефрагментации файловой системы.
Уровень служб
В моем случае сервер 1с находился вместе с сервером баз данных MS SQL на одной машине, но аппаратная конфигурация сервера вполне обеспечивала их совместную деятельность, а вот настройки этих двух служб были совсем не оптимальными. Этим настройкам посвящено множество статей, например, эта, здесь мы сфокусируем внимание только на тех, что не требуют дополнительных вложений, например, приобретение жесткого диска.
Для сервера MS SQL в каждой базе были увеличены значения параметра авторасширения базы до 500 Мб, так как базы 1С являются быстрорастущими. Также был настроен ежедневный план обслуживания, в котором кроме создания дампа базы добавлено обновление статистики, очистка процедурного кэша и дефрагментация индексов. В моем случае, это заметно уменьшило количество операций записи. В качестве дополнительных мер можно порекомендовать еженедельно производить дефрагментацию базы и реорганизации индексов.
Для сервера 1С были изменены параметры «Количество ИБ на процесс» и «Количество соединений на процесс» рабочего сервера, первый получил значение 1, а второй 25. Подобные советы больше похожи на «танцы с бубном», но они дают результат. В рассматриваемом случае изменение этих параметров привело к значительному уменьшению операций чтения-записи на сервере, и он заработал в ожидаемом режиме. Тест Гилева также подтвердил прирост производительности.
Уровень баз
Сделав замеры под рабочей нагрузкой и после выхода пользователей, я столкнулся со странным результатом — под нагрузкой тест Гилева показывал лучшие результаты, чем при простое! Было также замечено огромное количество фоновых заданий выполняемых на тестовых базах. Тестовые базы использовались сисадминами для проведения различных тестовых задач. Я попросил удалить их — и все встало на свои места. Следует ли держать тестовые базы на рабочем сервере, решать конечно вам, но лучше для этого найти какое-то другое решение, например, использовать файловый вариант.
У одной из баз не удавалось уменьшить журнал транзакций, а у другой базы не пересоздавались индексы. Для обоих случаев есть одно простое и эффективное решение. Прежде чем его описать, следует уточнить, что здесь имеет место одинаковое наименование разных объектов: базы 1С и базы MS SQL, первые могут быть не базами MS SQL, а, например, базами PostgreSQL. В свою очередь вторые не обязательно будут базами для 1С. Исходя из этого резервные копии баз 1С (dt-файл) могут быть развернуты и на других СУБД, но ни кто не запрещает вам из этой же копии развернуть на MS SQL. Снимаем резервные копии баз 1С средствами 1С, после чего удалить 1С-базы из сервера 1С, а потом создать их вновь, залив содержимое из dt-файла.
Приведя все базы в порядок, мне уже не к чему было придраться: сервер работал ровно, дисковая подсистема работала в штатном режиме, пользователи радовались быстрой работе в 1с, администраторы удивлялись как теперь быстро проходят обновления.
Заключение
Если использовать только один уровень для поиска причин низкой производительности, то можно оставить без внимания причины, лежащие на других уровнях, то есть результат будет не достигнут. Приведенный пример наглядно показывает, что причин может быть несколько, и каждая из них может лежать на своем уровне. Надеюсь, что данный материал поможет кому-то побороть проблему низкой производительности 1С-сервера.
Есть большая база УТ и в ней есть документ, который долго проводится (45 секунд). Долго разбираемся почему.
Выяснено, что виноват типовой запрос по партиям. Выполняется 15 секунд. Видимо есть еще какие то тормозные. Если отключить партионный учет, то весь документ проводится за 8 секунд.
Переходим к части "что делать?":
Прогнали ТиИ, пересчитали статистику на сервере SQL, обновили платформу. Результата нет.
Запустили Perfomance monitor, накопили данных, поглядели. Ну в момент обработки документа подрастает очередь диска до 10. Судя по всему это не ужас. Процессор ничем не занят, памяти полно.
Поставили ЦУП. Поглядели там, увидели этот самый запрос, ничего другого не увидели. Блокировок и таймаутов нету.
Запустили MS SQL Profiler. Видим снова этот запрос (15 с лишним тысяч миллисекунд выполнения, 1.5 млн чтений), остальное время куча маленьких запросов.
Возникает предположение, что медленно работает MSSQL. Известно, что какое то время назад работал нормально. То ли база выросла, то ли что то сломалось. Надо понять.
Железо сервера не самое современное, но и не древнее. То ли менять, то ли нет. SSD диски конечно поставим, но все равно надо понять, что стряслось.
Погоняли тест Гилева. Что то показывает. Толком непонятно что.
Видно, что на рабочей станции в связке с SQL express работает быстрее (но на той же самой связке указанный документ проводится еще дольше. ).
Внимание, вопрос - как понять тормозит MSSQL или нет? Существуют ли какие то бенчмарки именно для сервера? Почему он так долго выполняет этот запрос (косой, кривой, неправильно написанный, 18 вложенных циклов и т.п.), при том, что другие инструменты страшной нагрузки не показывают? Как говорится - чего стоим, кого ждем?
типовой запрос по партиям начинает работать в 5 раз быстрее простым выносом виртуальных таблиц во временные. а вообще его можно раз в 15 заставить быстрее работать.
(2) Это я видел, но я не пойму, что с сервером не так. Разве очередь к диску 10 (в чем они ее измеряют?) это много? Я читал, что тормозить начинает после 20-30.
(3) Да, это обязательно сделаем! Вообще 1С загадка - сами пишут в книгах не делать соединения с вложенными запросами и виртуальными таблицами и сами же делают в типовых конфах!
Читайте также: