Имя: Пароль:
1C
1С v8
Как ускорить MS SQL для 1С?
,
0 Garry1010
 
12.03.13
11:36
Как ускорить работу MS SQL в его взаимодействии с 1С (УПП, если что)?
Давно уже работаем с SQL'ной базой (точнее базами), но спеца по SQL нет (SQL именно MS, 2008-ой). Суть проблемы в том, что некоторые злобные отчеты, которые чуть ли не часами выполнялись в файловой базе, в SQL'ной стали выполняться быстрее, но другие вещи просто безумно тормозят. Например, документы проводятся явно дольше - полное впечатление, что нужно что-то настраивать в SQLе на ускорение записи, но вот ЧТО???
Другой очевиднейший пример. Есть у нас обработка (т.н. Робот), которая по COM'у создаёт новые документы и вызывает экспортные процедуры для их заполнения (ежемесячное закрытие по МСФО, если что). Так вот за 2 прошедших месяца, например, в файловом варианте эта штука выполняется за минуту с копейками, а в SQL'ном - по 12-15 минут! Вот такая, блин, "очередная" лажа с этим MS'ом (мать их!).
Кто-нибудь может что-нибудь ценное предложить для наладки этого уродства? (Ессно, всякие обслуживания типа дефрагментации индексов и реиндексации включены.)
194 Salimbek
 
12.03.13
15:05
(185) Если сможешь что-то дельное подсказать, я не против. Только переписывать конфу, к сожалению, а может и к счастью, нет возможности. Т.к. 1) тиражное решение, которое должно оставаться на поддержке и 2) часть запросов вынесена в длл
195 toxicoff
 
12.03.13
15:05
Проверьте регламентные операции в сиквеле:
http://programmist1s.ru/1s-ekspert-reglamentnyie-operatsii-subd/
196 Garry1010
 
12.03.13
15:10
(187) Был бы размер архива, я бы так и написал, что архива - а я написал "файловой базы".;)
Короче, дело ясное, что дело тёмное... Будем копать дальше. Thanks!
197 sapphire
 
12.03.13
15:12
(194) И? Дело явно не в самом SQL... База такого объема, как у ТС спокойно влезет в оперативку...
198 Sorm
 
12.03.13
15:12
(193) Для начал их надо вообще использовать:)
199 sapphire
 
12.03.13
15:14
(198) Всё зависит от объема.
200 Serginio1
 
12.03.13
15:22
(138)  Ты разницу между внутренним и внешним сервером автоматизации понимаешь? В одном случае нет маршалинга данных в другом он есть. Так и с базами. В случае с файловой БД это внутренний сервер, а в случае с SQL это внешний. И вызовы нужно упаковать в SQL запрос отправить его на сервер по TCP/IP. Сервер получит результат и опять по TCP/IP отправит результат. И чем больше мелких запросов тем времени больше тратится именно на маршалинг данных. В файловом варианте этого нет и все происходит в одном процессе. Выигрыш от SQL ты получишь, когда большинство вычислений будет на SQL сервере.
201 Fragster
 
гуру
12.03.13
15:25
(200) а самба - она на святом духе работает?
202 Salimbek
 
12.03.13
15:33
(197) И... дело в том, что у нас аналогичная проблема, описание и тесты производительности я описал вкратце в (183)

Именно по результатам этого теста я и порекомендовал поставить Сервер 1С на ту же тачку, что и SQL.
203 Fragster
 
гуру
12.03.13
15:36
(202) тест производительности Гилева однопоточный. пока можно воспользоваться тестом по ссылке у меня из лички, но в скором времени он будет сильно перепилен и результаты со старыми вариантами будут плохо сравниваться. Но общее представление о масштабируемости он даст и сейчас.
204 Serginio1
 
12.03.13
15:37
(201) С самбой не работал, поэтому ничего не могу ответить.
Любое межпросессное взаимодействие это по любому зло.
Но уменьшить потери времени можно на уровне драйверов или протоколов Named Pipes vs. TCP/IP Sockets
205 Fragster
 
гуру
12.03.13
15:38
(204) самба - это условное название протокола сети виндовс
206 ДенисЧ
 
12.03.13
15:41
(205) Самба - это танец такой
samba - файл-сервер под *nix
а протокол - он smb...
207 Serginio1
 
12.03.13
15:57
(205)  Это
wiki:Server_Message_Block
?
Про маршалинг я тебе уже говорил, но есть еще такая вещь как переключение контекста http://vsokovikov.narod.ru/New_MSDN_API/Process_thread/context_switch.htm

, поэтому сейчас в моде синхронизация с использованием класса Interlocked
http://msdn.microsoft.com/ru-ru/library/system.threading.interlocked.aspx
208 Salimbek
 
12.03.13
16:41
(203) Прирост в однопоточном тесте, неминуемо скажется и на многопоточном, имхо. Разница лишь в том, на сколько повлияет на результат работа в несколько потоков.
209 Fragster
 
гуру
12.03.13
16:44
(208) не совсем так
210 Hmster
 
12.03.13
17:11
(208) производительность ... она бывает разная ...
211 Garry1010
 
13.03.13
14:11
Решил снова поднять тему.
Вот есть у меня обработка (как раз сейчас работаю с ней), которая просто подменяет значение какого-нибудь измерения регистра на другое, когда одно из них явно дублируется с другим (по разным причинам, в т.ч. и косякам при вводе начальных остатков). То есть она просто считывает набор записей регистра, заменяет данные и записывает обратно набор. Так вот в файловой базе только на первом документе она немного думает, а потом: выбор => Выполнить, выбор => Выполнить - раз-два, раз-два. А в SQL'е задолбаешься ждать выполнения - то есть причина-таки в самом SQL'е, а вовсе не в 1С-"быдло"коде.:))
212 sapphire
 
13.03.13
14:15
(211) Мдя... А еще саклю ругаешь...
213 Холст
 
13.03.13
14:20
обновление статистики SQL, переиндексацию SQL, рекомендуемую настройку параллелилизма и выделение оперативки уже делали ?
214 Smallrat
 
13.03.13
14:21
(211) И всё таки я, для интереса, попробовал бы найти другой сервер - воткнуть туда Вин2003+SQL2005 и посмотреть.
215 Garry1010
 
13.03.13
14:31
(212) Не понял? А кого же ещё ругать, если он никак не может ничего записать. И какого барабана, интересно, 1С работает с SQL'ем синхронно, а не асинхронно? Зачем ждать от него ответа? Отослали данные и забыли про них! :гы-гы:
(214)У нас вообще 2008-ой стоит - должон быть ещё быстрее, чем 205-ый. Хотя я сомневаюсь, чтобы у МСа что-то новое было быстрее старого. Предыдущий опыт как бы намекает.:((
216 Fragster
 
гуру
13.03.13
14:52
(211) хотя бы отладчиком замер делал?
217 Gamm
 
13.03.13
14:58
Не понимаю чего все накинулись на автора.
Известная история что операция записи объекта (справочника,документа,набора записей) в SQL версии выполняется на порядок медленее чем в файловой.
Это механизмы самой трехзвенной архитектуры все тормозят.
И никак это не ускоришь.
218 Garry1010
 
13.03.13
14:58
(216) В данном случае этого не нужно - на глаз видно. Говорю же: было раз-два, раз-два, а в скуле пальцы над клавишами замерзают, пока дождёшься.
219 Garry1010
 
13.03.13
15:00
(217) Что совершенно не понятно, в чем причины? :\ Ибо ни проц, ни сеть не загружены при этом - смотрел специально.
220 Fragster
 
гуру
13.03.13
15:02
(218) на? какой? строке? тормозит? если? смотреть? в? замер? производительности? кстати? отладка? на? сервере? должна? быть? включена? и? отладчик? должен? быть? подключен? к? сеансу? сервера?
221 Gamm
 
13.03.13
15:03
(219) Трехзвенная архитектура - это причина.
Сервер 1С вносит свои, довольно большие, задержки.
222 Фрэнки
 
13.03.13
15:15
(219) а может, если никто и нигде не загружен, но считывание набора записей из регистра "подмерзает" - может все дело в том, что выдерживается какой-то таймаут вокруг транзакции?

Все-таки интересно посмотреть сколько времени по отладчику по коду в обработке занимает строчка с записью набора в регистра и сколько следующее чтение из регистра.
223 Garry1010
 
13.03.13
15:15
(218) Ессно, на записи набора! :)) Как делать отладку на сервере, я в курсе - только это не нужно, ибо код не в серверном модуле и это не УП, а обычное приложение.
А что, обязательно на каждом слове вопрос ставить?
(219) Ладно, тогда на кой ляд клиент ждёт ответа от 1с-сервера? Отправил запрос с данными и забыл про них!!!
Да,.. чего от них требовать, если они ни многозадачонсть, ни многопоточность в клиенте (да и в сервере, видимо, тоже) никак реализовать не могут, хотя ей уже сто лет в обед.
224 Фрэнки
 
13.03.13
15:21
(223) Оберни запись набора в транзакцию и зафиксируй ее по завершению обработки - получится или нет?

Теорититчески, если внутри встроенного метода "Записать Набор" должна быть дефолтная транзакция для обработки набора, то при установки еще одной внешней скорость записи резко возрастет. Обработка транзакций в файловом и серверном варианте будет реализована вызовом разных процедур. Скорей всего, что в файловой версии транзакции вообще непохожи на синвельный вариант.
225 Hmster
 
13.03.13
15:25
(223) так уж прямо и нету?ну-ну
226 ДенисЧ
 
13.03.13
15:28
(223) @Отправил запрос с данными и забыл про них@
Ага. Записал движения. А потом решил проверить остатки получившиеся... А движения-то до сервера ещё не доехали...
227 Garry1010
 
13.03.13
15:32
(226) Если сразу-сразу, то вот тогда и придётся ждать.;) А если просто записать, то ускорение на лицо.
(225) Многодачности-то? А что, есть? [ржу]
Тогда бы она грузила не одно ядро, а более, и загрузка проца было бы не 1/колво_ядер, а более.
228 Garry1010
 
13.03.13
15:34
(224) А вот это мысль - проверю.
229 Hmster
 
13.03.13
15:41
(227) ну допустим 1 операция не может грузить более одного ядра. это нормально. далее сервер 1С легко может загрузить все ядра в проце - вопрос в количестве клиентских соединений.
Далее какие интересно операции тебе в клиенте надо выполнять в несколько потоков? или чем не устраивает механизм фоновых заданий(есть нарекания но в целом работает на ура)
а вообще опыт работы с многопоточностью есть? портфолио есть?
мы много умных слов знаем, а вот пользоваться не всегда
230 Stagor
 
13.03.13
15:43
(5) опять анимэ :)
231 rs_trade
 
13.03.13
15:46
(220) Как ты это сделал?
232 Fragster
 
гуру
13.03.13
15:47
(223) а вот не "естественно". в модуле набора записей может быть код, в подписках может быть код, в РЛС могут быть шаблоны кривые. по этому и интересует, именно на Набор.Записать() 99% или там еще есть вложенные в него запрос.Выполнить() и прочие?

Скриншот с замером будет?

Кстати, на скуле реально медленнее работает что-то подобное
Переменная = Выборка.Объект.Реквизит, особенно заметно в цикле
233 Hmster
 
13.03.13
15:51
(227) сделай Многопоточный тест производительности 1с
http://fragster.ru/perfomanceTest/
много станет ясного
234 Fragster
 
гуру
13.03.13
15:53
(233) вот будет (возможно) в версии 2.1 там тест файловых баз. вот тогда народ поймет.
235 Fragster
 
гуру
13.03.13
15:53
а версия 2.0 почти готова
236 Sammo
 
13.03.13
16:07
(227) Запускай запись набора отдельным фоновым заданием, без ожидания его завершения - вот тее и асинхронность
237 Fragster
 
гуру
13.03.13
16:09
(236) это да, главное подобрать количество и очереди разбить правильно - ускорение до десятков раз.

Но меня смущает то что "на файловой на порядок быстрее".
238 NcSteel
 
13.03.13
16:10
(0) Удалите УПП, переходите на ИТРП.
239 NcSteel
 
13.03.13
16:11
(237) Файловая всегда работала быстрее.
240 Fragster
 
гуру
13.03.13
16:13
(239) "на порядок"? т.е. набор в файловой записывается 0.01 секунды, а в скуляке 0.1?
ну и на файловой сложные запросы никогда быстро не работали.
241 NcSteel
 
13.03.13
16:14
(240) Не на порядок, моя оценка - 2 - 3 раза.
242 Fragster
 
гуру
13.03.13
16:14
(241) в один поток - может быть. и именно на запись. На чтение далеко не всегда.
243 NcSteel
 
13.03.13
16:15
(242) А если монопольно , то и чтение вполне.
244 NcSteel
 
13.03.13
16:18
А вообще базы и в терабайт на MS SQL нормально кувыркались и без особых проблем.
245 Garry1010
 
13.03.13
16:49
(229) (а вообще опыт работы с многопоточностью есть?)
Есть! [бе-бе] И не на каких-то там непонятных net'ах чи чо, а на самом что на есть уровне виндового API - на С. Не шибко большой, но оно работало - только для меня, правда.:\
(238) А вот это ни мне и ни вам это решать.;) И что это за Юдо? (поиском посмотрел уже - не напоминайте)
(232) Конфа типовая - в модуле набора дописок нет.
(236) Так его же записать надо сейчас, а не по расписанию...
246 Gamm
 
13.03.13
16:52
(224) Транзакции в 8-ке на скорость записи не влияют.
Этот совет из времен 7-ки.
247 Fragster
 
гуру
13.03.13
17:04
(245) фоновые задания работают не по расписанию, только тсссс!
248 Garry1010
 
13.03.13
17:06
(247) Да я как-то не пользовался ими никогда, не вникал.
...
Кстати, а у нас SQL весь из себя Энтерпрайзный, а ни разу не видел, чтобы он использовал более 1 ядра (загрузка ЦП не более 25%). Хммм.О_О
249 Fragster
 
гуру
13.03.13
17:07
(248) хочешь на это посмотреть? запусти (233)
250 Фрэнки
 
13.03.13
17:07
(246) А в текстах модулей наборов записей по этим регистрам ничего не висит? или где-то еще?
251 Sammo
 
13.03.13
17:16
(248) И потом говоришь про отсутствие в 1с асинхронности. Угу...
252 МуМу
 
13.03.13
17:17
Я так понимаю автор аккуратно мерять ничего не жаелает:) Тогда вряд ли можно будет помочь, ибо общего диагноза не бывает. Ну а порассуждать это конечно мы всегда за.
253 Serginio1
 
13.03.13
17:20
(211) Угу я в свое время боролся с регистрами сведений, когда мне нужно загружать миллионные прайсы. Разница между конструкцией Merge и записью регистров сведений вЕЕЕЕсьма ощутима. Попробуй записать напрямую, и ты удивишься.
254 Garry1010
 
13.03.13
17:23
(211) И как это делать?
(224) Не-а, ноль эмоций.
255 Garry1010
 
13.03.13
17:24
(252) Чего именно? Обработку, с которой начал подъём темы? Увы, уже всё сделано, а второй sql'ной нет, а ваять не буду.
256 NcSteel
 
13.03.13
17:25
(252) +100500
257 Garry1010
 
13.03.13
17:33
(251) Одно с другим никак не связано.;)
258 МуМу
 
13.03.13
17:35
А может быть все до банального просто. Например батарейка контроллера отсутсвует.(или кешировние на запись выключенно) Да мало ли чего может быть.
259 МуМу
 
13.03.13
17:39
А вообще скорость в слабоструктурированный файл всегда будет выше чем в СУБД. Потому как там выше издержки. Например на поддержание транзакционной целостности. Впрочем тема какая то сумбурная.
260 МуМу
 
13.03.13
17:42
+(259) Скорость записи имеласть ввиду:)
261 Sorm
 
13.03.13
18:07
(0) Ну если не слезать с вируталки - можно много чего предъявить к SQL-серверу.
262 КонецЦикла
 
13.03.13
18:11
(0) Переведу на низколетающие клюшки. Дорого.
263 Garry1010
 
13.03.13
19:03
Эх, блин, вон оно чО - http://forum.ixbt.com/topic.cgi?id=7:42617 пост 13 (не знаю как тут оформлять ссылки:().
Короче, получается, что больше всего ASYNC_NETWORK_IO, то есть "Проверьте, что клиент обрабатывает данные от сервера"ОО_ОО. То есть надо настраивать 1с-сервер??? Что-то впервые слышу об этом...
Можно ему указать точный порт SQL'я? То есть настроить и первого, и второго на один порт, чтобы они не шарились в попытках найти друг друга?
264 Fragster
 
гуру
13.03.13
19:06
(263) между серверами 10мбит?
265 Garry1010
 
13.03.13
19:20
(264) Ясно, что нет.;) Только вот SQL-то ругается на это!
266 Garry1010
 
13.03.13
19:21
Там ещё и WRITELOG есть, но он много меньше именно нетворка...
267 Fragster
 
гуру
13.03.13
19:26
а сколько % на сеть?
268 Fragster
 
гуру
13.03.13
19:27
Writelog - если ты не знаешь, зачем у базы модель восстановления full - поменяй на simble
269 Garry1010
 
13.03.13
19:32
(268) 32,6% в графе percent_total_signal_waits.
270 Fragster
 
гуру
13.03.13
19:34
можно попробовать соединить сервера напрямую, а не через свич
271 Garry1010
 
13.03.13
19:38
(269) - в смысле, что ответ на (267).
(268) У всех баз и так Простая модель восстановления.
(270) Это вряд ли! :гы-гы: У нас такой мелочи не стоит. У нас там Циски всякие злобные.
272 Fragster
 
гуру
13.03.13
19:49
и все же прямой линк уменьшит задержки
273 Garry1010
 
13.03.13
19:52
(272) Так я его не смогу сделать - я не сисадмин в серверной.
274 Garry1010
 
13.03.13
20:18
(248) А нет... Наврал. Сейчас увидел и 29, и 33, и 36, и даже 39% загрузки скуля. Значит, жужжит, родимый!
275 Fragster
 
гуру
13.03.13
20:22
(274) запусти (233), увидишь 100% (наверное :))
276 zladenuw
 
13.03.13
21:18
(275) а столько времени должен выполняться тест ? описалово есть ?
277 Hmster
 
13.03.13
23:19
(276) около 30 минут
278 Serginio1
 
14.03.13
11:26
(263) Это сообщение? http://forum.ixbt.com/topic.cgi?id=7:42617#13
Правой кнопкой на (написано)
279 Garry1010
 
14.03.13
12:02
(275) Запустил. Вроде как нормально - даже лучше, чем на картинке отчета на инфостарте. От 500 на 1 потоке до 2500-4000 на 32 потоках и до 2500-5500 на 112. Хотя в сравнении с другими на http://fragster.ru/perfomanceTest/ как-то хиловато.:((
Кстати, проц до 100% так и не дошёл. Причём SQL вообще больше напрягался при меньшем кол-ве потоков (~8-32), чем при большем. Типовая загрузка сети никакая - 1-2% с редкими скачками до ~10% (на гигабитке), причём с ростом потоков нагрузка наоборот падала :гы-гы: до 0,4-0,6%. А вот 1с-сервер умудрялся нагружать 8 потоков на 100%, но, увы, ненадолго.
280 Hmster
 
14.03.13
12:34
(279) Не надолго это из-за того что тест идет кусками по 10 секунд
Это твой там тест датой 2013-03-14 11:54:37 ?

что интересно вроде как в мс скл регистры сведений хуже себя показывают чем на постгре
281 Fragster
 
гуру
14.03.13
13:05
(279) на ИС картинка от коре2 дуо с выключенным ХТ :)
282 Fragster
 
гуру
14.03.13
13:05
в версии 2.0 нагрузка на скуль будет сильно больше, а на 1с - меньше
283 Garry1010
 
14.03.13
13:10
(280) Угу. А что там за кол-во пользователей в настройках? Я поставил 8.
(281) С кем выключенным?
(282) В версии 2.0 - этого теста? А как там можно регулировать такие вещи? О_О
284 Fragster
 
гуру
14.03.13
13:11
хипер треадингом
285 Fragster
 
гуру
14.03.13
13:12
регулировать - кодом. который дает больше нагрузки на скуль и меньше на рпхост
286 Fragster
 
гуру
14.03.13
13:13
количество пользователей - это типа для статистики - сколько реальных польлзователей работает на этой связке и какая их субъективная оценка производительности этой самой связки
287 Garry1010
 
14.03.13
13:20
(284) Это по-каковски? :)) По-русски его обычно называют Гипер-трейдингом, а через "Х" - это глупые мерикосы пишут. У них и Гарри почему-то Харри. О_О
(286) Аааа, то есть я должен был самого себя написать...
(285) То есть крутить-вертеть, пока не получится то, что хочется? Ясно.
288 Fragster
 
гуру
14.03.13
13:36
289 Fragster
 
гуру
14.03.13
13:49
(287).1 не Геракх, а Херакл, не богиня Гера...
.2 если на том сервере боевых баз нет - ничего не пиши
.3 нет, в 2.0 переработаны тесты таким образом, что они больше нагружают скуль, чем сервер 1с
290 ДенисЧ
 
14.03.13
13:49
(289) богиня чего, пrостите?
291 Garry1010
 
14.03.13
14:23
(289).3 Я это и имел в виду. Не я, конечно, буду крутить-вертеть, а автор.
.1 Всё-таки Геракл лучше звучит, чем Херакл.;) Особенно учитывая неблагозвучность первых трёх букв.:)
292 Garry1010
 
14.03.13
14:26
(280) Так не подскажете, как вам мои результаты? Это нормально или всё-таки плоховато? Кстати, тест шёл не 15 и не 30 минут, а минут 40-45.
293 Hmster
 
14.03.13
14:53
(292) на мелких однопоточных операциях очень плохо себя связка ведет, но масштабируемость неплоха вроде как.
большие куски должна быстро по идее обрабатывать.
с другой стороны запись в РС очень плохо себя показала. тут сказать ничего не могу статистики мало собрано. может еще чего и выявится.
а вообще похоже издержек/потерь много
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший