Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Microsoft Windows NT/2000/2003 (http://forum.oszone.net/forumdisplay.php?f=5)
-   -   Тормозит 1С (MS SQL). Как диагностировать? (http://forum.oszone.net/showthread.php?t=208143)

Tonny_Bennet 03-06-2011 10:57 1687617

Тормозит 1С (MS SQL). Как диагностировать?
 
Здравствуйте.

Имеется сеть из 25 компьютеров, одновременно работающих с 1С. Выделенный сервер Win2003 на Xeon E5410 2.53 Ghz, 16 Gb Ram, SCSI диски, сетевой интерфейс на сервере 1 Gbit/s подключен к пассивному свитчу D-Link с 2-я гигабитными портами. Остальные клиенты подключены в этот же свитч к 100 Mbit-ным портам. База MS SQL, серверная и клиентская программы 1С работают на сервере. Папка с клиентской частью общая. Пользователи на рабочих станциях запускают программу из общей папки. Также сервер используется как сервер терминалов для работы 3-х пользователей.

На одном из серверов сети установлена система мониторинга Cacti. Средняя загрузка сервера с 1С в принципе не большая: загрузка всех 8-и ядер в среднем составляет 10-15% иногда подскакивает до 30-30%. Сеть в среднем загружена на 10 Mbit/s во время начала работы в 9-00 загрузка сети возрастает до 30 Mbit/s. Меня немного смущает загрузка оперативной памяти: если перезагрузить сервер то из всей RAM используется только 8 ГБ. После 2-х недель непрерывной работы, оперативка забивается на 12-15 ГБ. Причём основные потребители это sqlserver.exe = 3.5 Гб и несколько процессов rphost.exe*32 = 7 Гб.

Практически все пользователи в основном утром жалуются на "тормоза программы". Я не работаю в 1С и не представляю что там может тормозить. Но они говорят что медленно проводятся документы и делаются какие-то выборки... Корреляции тормозов системы с системными ресурсами я не замечал.

Подскажите пожалуйста в какую сторону копать? Где могут быть слабые стороны системы? Как можно проверить скорость текущего обмена с жёсткими дисками?

P.S. Будут интересны любые мнения.

molodoipon 03-06-2011 11:32 1687645

Tonny_Bennet, сталкивался с таким. Единственное у меня все на разных серверах, .т.е. терминальный, sql и 1с - это три разных сервера. Обошел,через еженочный рестарт служб SqlServerAgent, MsSqlServer и 1C:Enterprise 8.2 Server Agent.
Если надо могу привести скрипты.

monkkey 03-06-2011 12:25 1687688

Tonny_Bennet,
В SQL ограничьте выделение оперативной памяти. "Тормозить" 1С (кстати, Вы не указали версию) из-за одновременного составления "тяжелых" отчетов и т.п., а также (в 99% случаев) - из-за кривизны написания самих процедур отчетов.

Tonny_Bennet 03-06-2011 16:05 1687848

molodoipon, в принципе если не сложно то выложите скрипты... не мне так кому-нибудь другому понадобятся.

monkkey, если не сложно скажите где именно в SQL ограничевается выделение оперативной памяти? Для чего это нужно? И не ухудшит ли это ситуацию?

На сервере по-моему крутится 2 версии 8.1 Enterprise и 8.2.

Дописыванием базы занимается приходящий программист и насколько "кривые" у него скрипты я судить не могу...

P.S. Достаточно серьёзно занимался программированием на С#, и когда один мой знакомый кодер узнал что код в 1С пишется на кирилице - ругался благим матом и говорил ,что в жизни писать под него не станет!!!

Думаю это предрассудки....

Hector 03-06-2011 16:07 1687852

Цитата:

Цитата Tonny_Bennet
код в 1С пишется на кирилице »

там есть и латинский вариант, rtfm :)

molodoipon 03-06-2011 18:07 1687925

Tonny_Bennet
рестарт 1С
Код:

rem @echo off
rem \\----- начало скрипт остановки и запуска агента сервера 1С Предприятия----\\
set logfile="stopstartlog.txt"
set timeout=10
echo %date% %time% >>%logfile%
net stop "1C:Enterprise 8.2 Server Agent" >>%logfile%
c:\scripts\sleep %timeout%
echo %date% %time% >>%logfile%
net start "1C:Enterprise 8.2 Server Agent" >>%logfile%
c:\scripts\sleep %timeout%
rem \\----- конец скрипт остановки и запуска агента сервера 1С Предприятия----\\

рестарт SQL

Код:

echo start: %DATE% %TIME% >> C:\scripts\log\restart.log
sc stop SqlServerAgent >> C:\scripts\log\restart.log
TIMEOUT /T 20 /NOBREAK
sc stop MsSqlServer >> C:\scripts\log\restart.log 
TIMEOUT /T 120 /NOBREAK
sc start MsSqlServer >> C:\scripts\log\restart.log
TIMEOUT /T 120 /NOBREAK
sc start SqlServerAgent >> C:\scripts\log\restart.log
TIMEOUT /T 20 /NOBREAK
echo stop: %DATE% %TIME% >> C:\scripts\log\restart.log


zero55 03-06-2011 18:57 1687952

ограничьте SQL 6 гигами памяти.

Тормоза у вас оттого что у него непомерный аппетит и он читает с диска т.е. из файла подкачки.

QRS 03-06-2011 21:01 1688015

Tonny_Bennet, в целях погружения в тему производительности 1С рекомендую Вам сайт Гилев - там много интересного.

На что стоит обратить внимание с ходу:
- по опыту - службу 1С я перезапускал еженедельно по ночам (т.к. она непомерно начинает транжирить память) через скрипт, который сначала запускал start net stop, затем ждал 10 минут и taskkill все rphost оставшиеся в памяти... далее net start;
- Вы не указали тип RAID на сервере... если у Вас RAID5 - то это тормоз для Вашей SQL базы;
- дефрагментируйте диски... некоторые умельцы настраивают прирост базы SQL по 1Мб или 1%... в результате у них вся база фрагментирована; проведите shrink mdf-файла.
- если у Вас на рабочем сервере висит еще пара баз, которые используются для тестов и прочих дел - это нехорошо для производительности;
- общая загрузка CPU в 20-30% ни о чем не говорит - смотрите есть ли процессы, которые полностью занимают ядра процессоров.

При подключении 1С сервера к базе SQL в качестве адреса следует использовать "localhost" - в этом случае обмен идет через память, а не стек TCP\IP.

PS: для теста попробуйте терминально запустить 1С клиента на сервере и сравнить производительность.
PS2: пассивный коммутатор Dlink - однозначно вызывает подозрения в производительности сети.

Tonny_Bennet 06-06-2011 17:00 1689420

Отдал под MS SQL 6 ГБайт оперативки. Отрубил использование файла подкачки.

Цитата:

Цитата QRS
- Вы не указали тип RAID на сервере... если у Вас RAID5 - то это тормоз для Вашей SQL базы; »

По поводу RAID толком ничего сказать не могу. Операционку и настройку самого сервера делал предыдущий администратор. Винда показывает 2 физических диска на которых размечены 2 логических тома. База и система разнесены на разные диски. Сам сервер достаточно далеко, так что внутрь влезь смогу только при крайней необходимости.... думаю там RAID-0 или вовсе никакого RAID нет. (не ругайтесь сам понимаю что это косяк)

Цитата:

Цитата QRS
- дефрагментируйте диски... »

Дефрагметировал диск с базой (было 40% фрагметированных файлов)

Цитата:

Цитата QRS
некоторые умельцы настраивают прирост базы SQL по 1Мб или 1%... в результате у них вся база фрагментирована; проведите shrink mdf-файла. »

Поясните пожалуйста о чём речь? Я не понял.

Цитата:

Цитата QRS
- если у Вас на рабочем сервере висит еще пара баз, которые используются для тестов и прочих дел - это нехорошо для производительности; »

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

Цитата:

Цитата QRS
- общая загрузка CPU в 20-30% ни о чем не говорит - смотрите есть ли процессы, которые полностью занимают ядра процессоров. »

Как проследить какие процессы занимают ядра процессоров?

Цитата:

Цитата QRS
При подключении 1С сервера к базе SQL в качестве адреса следует использовать "localhost" - в этом случае обмен идет через память, а не стек TCP\IP. »

Проверить к чему обращается 1С при работе с MS SQL (к localhost или к servername) я не смог т.к. без пароля к настройкам базы не достучаться. Пароль поставил приходящий администратор. Запустил мониторинг loopback интерфейса. За сегодняшний день трафика на loopback интерфейсе не было. Может ли это означать что обращение идёт через tcp/ip?

Отключил ненужные роли сервера (dns, wins).

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

Tonny_Bennet 06-06-2011 17:28 1689443

zero55,
Цитата:

Цитата QRS
PS2: пассивный коммутатор Dlink - однозначно вызывает подозрения в производительности сети. »

Вот такой коммутатор http://www.dlink.ru/ru/products/3/690.html

QRS 06-06-2011 21:19 1689564

Tonny_Bennet, коммутатор не самый плохой.
Цитата:

Цитата Tonny_Bennet
Запустил мониторинг loopback интерфейса. За сегодняшний день трафика на loopback интерфейсе не было. Может ли это означать что обращение идёт через tcp/ip? »

Нет, т.к. при задании адреса SQL базы "localhost" подключение идет без TCP\IP (что и повышает быстродействие).

Цитата:

Цитата Tonny_Bennet
Сам сервер достаточно далеко, так что внутрь влезь смогу только при крайней необходимости.... думаю там RAID-0 или вовсе никакого RAID нет. »

Если на сервере стоит приложение от RAID, то оно покажет тип RAID.
Если никакого резервирования (отказоустойчивости) нет, то ругать Вас будет Ваше начальство...

Цитата:

Цитата Tonny_Bennet
Как проследить какие процессы занимают ядра процессоров? »

Если у Вас в системе видно 4 лоческих процессора, то любой процесс, стабильно (в течение 10 и более секунд) потребляющий 25% (=1/4) CPU - потенциальный источник узкого места (по процессору). Есть еще узкое место по ОЗУ и жесткому диску.
Для оценки нагрузки процесса на диск и ОЗУ - смотрите утилиту procexp (из комплекта sysinternals).

Цитата:

Цитата Tonny_Bennet
Цитата QRS: некоторые умельцы настраивают прирост базы SQL по 1Мб или 1%... в результате у них вся база фрагментирована; проведите shrink mdf-файла. »
Поясните пожалуйста о чём речь? Я не понял. »

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

Цитата:

Цитата Tonny_Bennet
Отдал под MS SQL 6 ГБайт оперативки. Отрубил использование файла подкачки. »

Требования ОЗУ для SQL под 1С определяются объемом баз (и справочниками) и определяются в основном практическим путем, чтобы оптимальный объем данных (в разумных пределах) попадал в кеш сервера. Понятно, что SQL очень лоялен к прочим процессам и может уступать память "заржавшемуся" rphost.

Цитата:

Цитата Tonny_Bennet
запускается пару копий для тестов и разработки скриптов программистом. »

Это не хорошо, т.к. приводит к "захламлению" кеша SQL и 1С-сервера левыми данными неинтересными рабочим базам - это сильно снижает производительность; проблема как правило успешно решается приобретением оотдельной рабочей станции на базе i5 с 4 ядрами + 4-8 Гб ОЗУ - разработчики счастливы, т.к. на этой машине их базы летают быстрее, чем на сервере.
Для оптимизации нагрузки, тестовые SQL-базы можно перевести в bulk recovery mode - это немного снизит нагрузку на SQL.

PS: сайт Гилева я Вам не зря рекомендовал.
PS2: PerfMon никто не отменял - начинайте с него и ищите узкое место.

Tonny_Bennet 07-06-2011 15:29 1689991

Цитата:

Цитата QRS
Если на сервере стоит приложение от RAID, то оно покажет тип RAID. »

Приложения от RAID не нашёл. Возможно RAID настроен через BIOS тогда по идее не будет видно что он есть...

Цитата:

Цитата QRS
Если у Вас в системе видно 4 лоческих процессора, то любой процесс, стабильно (в течение 10 и более секунд) потребляющий 25% (=1/4) CPU - потенциальный источник узкого места (по процессору). Есть еще узкое место по ОЗУ и жесткому диску.
Для оценки нагрузки процесса на диск и ОЗУ - смотрите утилиту procexp (из комплекта sysinternals). »

Поставил себе утилиту procexp. Очень полезная штука. У меня видно 8 логических процессов и в принципе ни на одном из них загрузка не поднимается более 15% (думаю после перезагрузки системы на выходных нужно будет как минимум неделя чтобы начались тормоза)

Цитата:

Цитата QRS
В настройках конкретной базы SQL указан параметр прироста = 1Мб, т.к. файл базы наращивается по 1Мб - это приводит к сильной фрагментации.
Shrink - стандартная процедура обслуживания SQL базы. »

Прочитал про Shrink. Решил проверить насколько поможет эта процедура одной из тестовых баз (загружать основную базу побочными операциями в рабочее время не рискнул). Процедура в процессе выполнения уже более часа. Размер базы около 10 Гб. Жду...

По поводу прироста: в настройках *mdf файла указано Autogrowth: By 1 MB, unrestricted growth; в настройках *.log фала Autogrowth: By 10 percent, restricted growth to 2095172 MB. Стоит ли увеличивать размер прироста базы чтобы избежать фрагментации? На сколько? Как сильно это приведёт к разрастанию базы?

Цитата:

Цитата QRS
проблема как правило успешно решается приобретением оотдельной рабочей станции на базе i5 с 4 ядрами + 4-8 Гб ОЗУ - разработчики счастливы, т.к. на этой машине их базы летают быстрее, чем на сервере. »

Просто я так понимаю придётся копировать бекап базы (порядка 10 ГБ) на этот комп и там подгружать в MS SQL. Думаю это будет достаточно долго.... Или есть какие-нибудь другие варианты работы?

Цитата:

Цитата QRS
Для оптимизации нагрузки, тестовые SQL-базы можно перевести в bulk recovery mode - это немного снизит нагрузку на SQL. »

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

Цитата:

Цитата QRS
PS: сайт Гилева я Вам не зря рекомендовал. »

Мне многие его советовали. Я кое-какие рекомендации по настройке MS SQL проделал. Просто там иногда достаточно сложно загнуто как мне кажется. А здесь есть обратная связь и хоть какой то разбор текущей проблемной ситуации...

QRS 09-06-2011 21:19 1691664

Цитата:

Цитата Tonny_Bennet
Приложения от RAID не нашёл. Возможно RAID настроен через BIOS тогда по идее не будет видно что он есть... »

Посмотрите как в диспетчере устройств называются Ваши накопители.

Цитата:

Цитата Tonny_Bennet
У меня видно 8 логических процессов и в принципе ни на одном из них загрузка не поднимается более 15% (думаю после перезагрузки системы на выходных нужно будет как минимум неделя чтобы начались тормоза) »

Мониторить нужно процессы, а не процессоры. Если процесс потребляет более 12% - открывайте его свойства - вкладка Threads - если потребление процессора идет одним потоком - то это узкое место по процессору.

Цитата:

Цитата Tonny_Bennet
Autogrowth: By 1 MB, unrestricted growth; в настройках *.log фала Autogrowth: By 10 percent, restricted growth to 2095172 MB. Стоит ли увеличивать размер прироста базы чтобы избежать фрагментации? На сколько? Как сильно это приведёт к разрастанию базы? »

Autogrouth mdf можно задать хотя бы 20% того объема, что у Вас освободится от shrink.
К разрастанию базы это приведет несущественно, т.к. расти она будет в том же темпе, просто скачков будет меньше, но будут они больше.

Цитата:

Цитата Tonny_Bennet
Просто я так понимаю придётся копировать бекап базы (порядка 10 ГБ) на этот комп и там подгружать в MS SQL. Думаю это будет достаточно долго.... Или есть какие-нибудь другие варианты работы? »

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

Цитата:

Цитата Tonny_Bennet
А здесь есть обратная связь и хоть какой то разбор текущей проблемной ситуации... »

Если сообщение показалось Вам полезным, то есть хорошая традиция отмечать его.

greg_b 09-06-2011 22:56 1691745

Tonny_Bennet, о коммутаторе -
Производительность

Коммутационная матрица
13,6 Гбит/с
- и это 50 Гигабитных портов? Для агрессивных нагрузок очень плохой вариант, по-мониторьте сеть на битые пакеты, можно просто при большой загрузке посмотреть на компах жалующихся - статистику сети командой netstat -e, в нормальной сети будет как-то так:
Цитата:

Статистика интерфейса

Получено Отправлено

Байт 17795872 1284077
Одноадресные пакеты 14797 9809
Многоадресные пакеты 7809 267
Отброшено 0 0
Ошибки 0 0
Неизвестный протокол 0
, если при миллионе преданных пакетов у вас до 100 ошибок - это терпимо, отброшенные говорят о плохой сетевой карте - не справляется или неправильно настроена.

Tonny_Bennet 22-08-2011 16:30 1737085

Цитата:

Цитата greg_b
13,6 Гбит/с - и это 50 Гигабитных портов? »

нет, это 48 портов по 100 Мбит/с и 2 порта по 1 Гбит/с

Присмотритесь внимательнее DES-1050G

по поводу ошибок сети: обязательно приму на заметку. Спасибо

zero55 22-08-2011 22:55 1737369

1С сам по себе может тормозить нещадно...

Надо смотреть начиная с клиента
1. процессор
2. память
3. диски

На сервере
1. процессор
2. память
3. диски

Посмотрите чтение запись в файлы данных и файлы логов.
1. какая версия SQL
2. какая конфигурация файлов данных
3. установлена ли опция AUTOSHRINK

compline-ufa 13-09-2011 12:30 1752014

а сколько бы вы порекомендовали оперативной памяти на сервер SQL 2008 R2, размер базы 80гб, 4х ядерный XEON 2,99ггц, диски 6шт в рейде 10. 2000й летал, 2008 подтормаживает.

gilev.ru@fb 15-12-2012 16:07 2045852

http://www.gilev.ru/services/online


Время: 20:21.

Время: 20:21.
© OSzone.net 2001-