Имя: Пароль:
1C
1С v8
Назначения процессоров серверу / процессам 1С
0 Минона
 
21.07.15
17:26
Можно ли назначить конкретные процессоры (ядра) процессам 1С или серверу 1С полностью?
Цель - отдать SQL свои процы, а 1С свои.
Хочется посмотреть, сможет ли SQL в таких случаях точнее паралеллизировать запросы.

В Диспетчере задач я могу "Задать соответсвие (схожесть)" процессам rphost, но после их рестарта всё по дефолту - кушают все процы.
Есть решения?
1 Провинциальный 1сник
 
21.07.15
17:31
А до рестарта - есть какой-нибудь положительный эффект от привязки процессов к ядрам?
2 piter3
 
21.07.15
17:33
свои это как?по цвету или как?
3 shuhard_серый
 
21.07.15
17:35
(0) со стороны сиквела решение есть - в лоб назначить ядра
4 Минона
 
21.07.15
17:35
(1) если sql планирует свои ядра "сама" и в них не лезет 1С, то ИМХО (!) должно быть меньше ошибок при паралеллизации запросов.
По простому - хочется уменьшить параметр CXPACKET в SQL при большом количестве процев.
5 Минона
 
21.07.15
17:35
(3) это ничего не даст, если я не уберу 1С от этих ядер
6 Минона
 
21.07.15
17:36
(2) по номеру
7 Живой Ископаемый
 
21.07.15
17:36
свойство affinity, если не путаю. Но делать это нужно уж не знаю как - батником, cmd или еще как... в самой консоли сервера такая возможность отсутсвует
https://en.wikipedia.org/wiki/Processor_affinity
8 Живой Ископаемый
 
21.07.15
17:37
9 Минона
 
21.07.15
17:38
(8) процесс уже стартован, ему можно изменить?
10 Живой Ископаемый
 
21.07.15
17:43
интерактивно - да, как сделать программно - не знаю.
11 H A D G E H O G s
 
21.07.15
17:48
(9) Легко
12 Лефмихалыч
 
21.07.15
17:48
Чтобы прямо вот назначить процессоры раз и навсегда, надо виртуальные машины поднимать и процессоры средствами гипервизора им назначать. Это будет ровно та изоляция, которую вы хотите.
Только какой смысл в этой изоляции?
13 H A D G E H O G s
 
21.07.15
17:52
1) Включить привилегию отладки
2) Получить дескриптор процесса по PID
3) Получить текущую маску
4) Сформировать новую маску битовым сдвигом.
5) Установить новую маску.
14 Лефмихалыч
 
21.07.15
18:13
(13) дело за малым - угадать pid
15 Jump
 
21.07.15
18:19
Нет, нельзя.
Этим занимается ОС, и вы ничего не измените.

Можно конечно придумать какой нибудь костыль и таки сделать это, но как правило ценой потери производительности на работу костыля.
16 floody
 
21.07.15
18:30
(6) если вы хотите, чтобы ваши запросы меньше параллелились - рулите максдопом.. привязка к ядрам тут не нужна
17 Casey1984
 
21.07.15
18:59
(14) Получить по имени процесса разве нельзя?
18 Минона
 
21.07.15
19:07
(16) не хотим "меньше", хотим "лучше"
19 Минона
 
21.07.15
19:16
по сути SQL кидает запрос на ядра
проблемы CXPACKET возникают
1) не угадали с данными (индексами) и мы ждём несколько потоков (suspended)
2) мы угадали с данными, но наше ядро процессора кто-то загрузил "не нашими" задачами - мы ждём этот поток (suspended)
20 H A D G E H O G s
 
21.07.15
19:19
Моя нетленка может выставить процессу ядра. Завтра кину тестовую демку.
21 Провинциальный 1сник
 
21.07.15
19:19
(19) Распараллеливание запросов в большинстве случаев - зло. Отключение только на пользу.
22 Feunoir
 
21.07.15
19:22
(0) Пара вопросов ТС: 1) сколько ядер в наличии? 2) После ручного назначения ядер через диспетчер задач до рестарта какое-либо заметное увеличение производительности есть?

Вопросы в никуда: Что такое NUMA знаем? А осознание того, что неправильно разделение потоков может _уменьшить_ производительность межпроцессного обмена есть?
23 Zamestas
 
21.07.15
19:42
(0) Идея изначально бредовая - любое ограничение накладываемое на многопоточный процесс не может как то увеличить производительность последнего.
24 H A D G E H O G s
 
21.07.15
19:43
(23) а как насчет производительности другого процесса?
25 Минона
 
21.07.15
19:44
(21) ну для этого можно выставить "Стоимостной порог для паралеллизма"

А в запросах, которые на 3 минуты грузят 20 ядер на 100% почему бы и нет?
26 Zamestas
 
21.07.15
19:48
(24) Зависит от кол-ва простаивающих потоков других процессов на этом процессоре в системе. Если их много - то никак.
27 Минона
 
21.07.15
19:49
(22)
1) Окончательно будет 40 ядер (4 проца)
2) Чем измерить?

В деление потоков не лезем - пусть SQL и система сами рулят.

Насчет NUMA завтра админов спрошу.
Но допустим делим по процам - 10 ядер 1С, 30 - SQL
28 Минона
 
21.07.15
19:51
(23) Ваше заявление более бредовое.
Почитайте про рекомендации при высоких CXPACKET на SQL-сервере. Режут паралеллизацию вплоть до 1 ядра.
29 Минона
 
21.07.15
20:18
вот оно как..

Процы назначенные ragent.exe копируются в процессы  rphost.exe
30 Feunoir
 
21.07.15
20:18
(27) Ну не знаю, чем померять... APDEX, например. Или, в крайнем случае, попугаи от Гилева. Результат любого действия должен быть измерим. Иначе смысла в действии нет.

Совсем необязательно спрашивать админов. Хотя спросить, ради определения их компетентности, конечно стоит. Достаточно почитать нелюбимую википедию: https://en.wikipedia.org/wiki/Non-uniform_memory_access даю ссылку на английскую статью, так как в русской версии информации крайне мало.

Коротенько: SQL и 1С общаются между собой через общую память. В NUMA память разделяется между процессорами и один процессор напрямую получить доступ к памяти другого процессора не может - приходится делать кучу дополнительных движений и в результате тормоза. Поэтому, если 1С и SQL будут висеть на разных ядрах одного процессора, то работать это будет быстрее, чем если бы они висели на разных процессорах. Винда, начиная с Server 2008 R2, это знает и сама раскидывает процессы по процессорам так, чтобы общая память и процессы, работающие с этой памятью находились на одном процессоре.

Короче, настройка афинности, это последнее что бы я делал у связки 1С и SQL.
31 Минона
 
21.07.15
20:22
(30) а как же тогда физическое деление "сервер 1С" и "сервер SQL" ?

Да и нет уверенности, что 1С может передать/получить данные в SQL используя NUMA
32 Zamestas
 
21.07.15
20:28
(28) Для сервера 1С упоминается единственная путная рекомендация, указанная в (21), но для конфигурации в (27)- подумать надо.
(31) Передать/получить данные процессы смогут в любом случае, дело во времени.
33 Минона
 
21.07.15
20:34
(32) Ну скажем так, по NUMA больше разговоров, нежели реальных замеров и примеров.

Резать паралеллизацию простое дело. Но есть реальные тяжёлые запросы, которым это поможет. "Стоимостной порог для паралеллизма" выставим побольше.
34 Провинциальный 1сник
 
21.07.15
20:36
(25) Такие запросы надо переписывать.
35 Минона
 
21.07.15
20:37
Если уж играть с NUMA, то можно на проце 5 ядер отдать 1С, а 5 ядер SQL
36 floody
 
21.07.15
20:38
(33) Если у вас запрос на 3 минуты грузит 20 ядер на 100% - что-то в консерватории нужно менять имхо.
37 Минона
 
21.07.15
20:39
(34) Ну там прогноз закупок + прогноз производства -> прогноз снабжения (поставок материалов)

что-то можно ускорить, но немногое
сам по себе он тяжёлый

Проблема не в SQL запросах, проблема потом когда 1С начинает лопатить и на экран выводить.
38 Минона
 
21.07.15
20:39
(36) обязательно передам ваши рекомендации руководству.
39 Провинциальный 1сник
 
21.07.15
20:42
(37)  "проблема потом когда 1С начинает лопатить и на экран выводить"
При чем тут тогда параллелизм sql-сервера?
40 Минона
 
21.07.15
20:44
(39) в данном случае - не причём
Просто это скорей наоборот - пример хорошего запроса.
41 floody
 
21.07.15
20:45
(37) Прогнозы вот эти все, трехминутные, которые грузят 20 ядер - вы ведь их выполняете не часто? Точно хотите их ускорить до 2 минут 40 секунд?
42 Минона
 
21.07.15
20:47
(41) часто, по несколько раз в день
строят прогноз обеспечения пр-ва материалами, при этом им обязательно видеть "последние изменения внесённые менеджерами совместно с диспетчерами производства"

Кроме них есть ещё планирование производства (диспетчеризация), тоже ресурсоёмкая.

Для этого новый сервер и покупали.
43 Zamestas
 
21.07.15
20:59
(42) Мысль конечно бредовая, но, а что если их фоном выполнять каждые 5 минуты и пихать куда нить?
44 Zamestas
 
21.07.15
20:59
*минут
45 Минона
 
21.07.15
21:04
(43) не наш вариант
мы занимаемся оптимизацией этих отчётов.

да и тема не об этом..
46 Zamestas
 
21.07.15
21:16
(45) Пытаюсь осилить вумного дядю: http://sqlspirit.blogspot.ru/2015/03/cxpacket-waits-theyre-not-evil-theyre.html
но не дает покую то, что сервер 1С х.з. на каком узле окажется и как там должен оказаться поток организатор SQL запроса я не знаю, ибо если будет (а он будет) в другой ноде - то будут тормоза.
47 Минона
 
21.07.15
21:27
(46) CXPACKET - по сути показывает, сколько SQL ждёт, пока все потоки, раскинутые на разные ядра, закончат своё выполнение и можно будет дальше по плану выполнять след. пункт

а) если запрос на 2 сек, то кидать его на 10 ядер, тратить время на подготовку и деление данных, потом ждать выполнения - смысла мало
в данном случае большой CXPACKET относительно самого времени выполнения = плохо

б) если запрос на 10 мин (грубо), то имеет смысл потратить 1 сек на его деление, потом он выполнится за 1 мин на 10 ядрах, но на некоторых из них чуть позже, нам придётся дождаться все 10. пусть мы ждём 5 сек (от 1го до 10го)
Итого 1мин 6сек (грубо)
И наше ожидание 5 сек не так страшно
48 Минона
 
21.07.15
21:29
47+ как раз и есть идея - чтобы 1С не лез на ядра SQL и цифра "задержка в 5 сек" была более прогнозируема (для SQL)
49 Минона
 
21.07.15
21:50
Походу решения 3
1. Прописать старт сервиса "через 3и руки" - чтобы сервер 1С стартовал с нужными ядрами.
Потом сервер запускает процессы с теми же ядрами.

2. Process Lasso - прога висит в памяти, мониторит и корректирует сама

3. Просто руками поправить для ragent.exe, а так как он у нас рестартует процессы с определённой периодичностью, то через некоторое время всё будет как надо.


п.2 наверное удобнее и менять можно

по NUMA - спасибо что напомнили.
возможно правильней взять у проца часть ядер
50 МихаилМ
 
21.07.15
23:22
(49)
забыли про wmi события. можно даже на vbs написать обработчик.
51 Zamestas
 
21.07.15
23:39
(50) обработчик чего?
52 МихаилМ
 
21.07.15
23:45
(51)
события создания процесса.
53 Zamestas
 
22.07.15
00:08
(52) Вам бы в Microsoft резюме кинуть, а то их тупые дятлы не могут прописать в реестре ветку с ИИ, который понял бы как балансировать потоки на физ. процах в зависимости от хотелок других процессов и пользователя.
54 Минона
 
22.07.15
10:51
(52) мы попробуем пока более протоптанным путём, но спасибо за инфу ))
55 H A D G E H O G s
 
22.07.15
11:02
Тема еще интересна?
56 Минона
 
22.07.15
13:32
кому?
57 Провинциальный 1сник
 
22.07.15
14:32
(40) Это пример плохого запроса. Хороший запрос выдает мало данных.
58 Минона
 
22.07.15
14:47
(57) Напишите лучше, кто же против.
Только сначала придётся менять структуру данных, а местами из-за этого порядок работы пользователей.

Не всегда можно легко продавить изменения, даже если они логически оправданны.
59 H A D G E H O G s
 
22.07.15
15:01
(56) Вам. Могу дать внешнюю компоненту, которая расставить процесс rphost.exe по нужным вам процессам.
60 Минона
 
22.07.15
15:06
(59) не откажусь
1c.work <гав> mail.ru
61 H A D G E H O G s
 
22.07.15
15:17
(60) Вечером ждите.
62 Минона
 
22.07.15
15:22
(61) спс!
63 ГеннадийУО
 
22.07.15
15:55
А не проще разнести 1С и SQL на разные физические сервера?
64 Минона
 
22.07.15
16:00
(63) зачем?
65 ГеннадийУО
 
22.07.15
16:01
Чтобы все нормально работало, нет?
66 Минона
 
22.07.15
16:01
(65) Так оно нормально и на одном сервере работает.
67 ГеннадийУО
 
22.07.15
16:02
(66) Если бы нормально работало - не надо было бы эту тему заводить :)
68 Минона
 
22.07.15
16:05
(67) ну мы так, цилиндры расточить, кнопку "нитро" приделать ..
69 ГеннадийУО
 
22.07.15
16:07
(68) Ну и чисто из интереса, памяти на сервере сколько?
70 Провинциальный 1сник
 
22.07.15
16:10
(69) Если упирается в проц - добавление памяти выборку не ускорит.
71 ГеннадийУО
 
22.07.15
16:19
(70) Просто интересно, сколько памяти на сервере где вместе живут 1С и SQL и выполняются такие тяжелые запросы.
72 Минона
 
22.07.15
16:25
(69) 250Гб, база в районе 180Гб
(70) в проц на старом упиралось конкретно, сейчас лучше намного - 30-50% загрузка, пропали конфликты блокировок, фоновые расчёты не мешают работе, Бух базы получше (но закрытия всё равно тупятЮ ибо не на SQL там ложится нагрузка)
73 senior
 
22.07.15
16:28
вот у людей проблемы: SQL, сколько тестов и замеров ни делал, к SQL вопросы в последнюю очередь были
74 senior
 
22.07.15
16:31
(73) добавлю, видел несколько случаев когда реально висел запрос на SQL, и это было по причине плохой статистики, оптимизатор построил неправильный план, после исправления запрос пролетал легко
75 Fram
 
22.07.15
16:31
(37) попробуйте временные файлы сервера 1с и tempdb скуля перекинуть на быстрый ССД диск или даже страйп из ССД дисков.
76 Минона
 
22.07.15
16:37
(74) у нас не висят вроде
делаем 2 раза в неделю реиндекс и апд. статистики

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

(75) очереди на нём нет, в мониторе SQL tempdb не узкое место в вводе/выводе (время ответа = 0..8 мс)
SSD от перезаписи дохнут быстро (уже похоронили один Рейд на SSD), есть мысль а) разделить на несколько файлов (не знаю актуален ли для SQL_Server_2014 этот старый совет)  б) закинуть на RAM-диск
77 Fram
 
22.07.15
16:37
+(75) 1С со времен 7.7 очень любит активно писать читать временные файлы, особенно при работе с отчетами.
78 Минона
 
22.07.15
16:38
(77) в счётчиках SQL нет жалоб на I/O
79 Fram
 
22.07.15
16:39
(78) я про собственные врем файлы 1С сервера
80 ГеннадийУО
 
22.07.15
16:40
(76) Серверные SSD не дохнут быстро... 2 года полет нормальный, сдохло пара штук по гарантии.
81 senior
 
22.07.15
16:41
(76) ну если прямо проблема в SQL (верится с трудом), то смотрели индексы, анализ в DTA делали?
82 Fram
 
22.07.15
16:41
(78) I/O лишним никогда не бывает
83 senior
 
22.07.15
16:43
(82) не согласен, если диск холодный, зачем его трогать
84 Fram
 
22.07.15
16:43
+(79) советую не просто так. нам помогло. отчеты с большим количеством информации на вывод начали работать в разы быстрее.
85 Минона
 
22.07.15
16:45
(84) а где настраивается каталог темп-файлов сервера 1С?
Или вы о темп-файлах на клиенте?
86 Fram
 
22.07.15
16:46
(85) системный параметр TEMP пользователя, под которым запускаются процессы
87 Fram
 
22.07.15
16:47
+(86) серверные. клиентам тоже не помешает, но накладно выйдет
88 H A D G E H O G s
 
22.07.15
16:48
Регламенты SQL надо делать каждую ночь. 180 гиг конечно много, но обновление статистики можно делать без fullscan-а ночью и с fullscan-ом на выходных.
89 H A D G E H O G s
 
22.07.15
16:48
(87) Им достаточно прописать в исключениях антивирусов
90 Минона
 
22.07.15
16:53
(86) Это получается "Юзер..\AppData\Local\Temp" - эту чтоли? Вроде по диску C очереди не наблюдается.

Попробуем, как сервак ребутать будем ..
91 Минона
 
22.07.15
16:54
(88) старый не справлялся, поэтому так стояло.
Там правда скрипт запускали, который анализировал какие индексы юзаются и тока их апдейтил.
На новом наверное сделаем ежедневное.
92 Fram
 
22.07.15
17:04
(90) еще бы вы очередь наблюдали. тогда бы совсем плохо было.
93 H A D G E H O G s
 
22.07.15
17:46
Интересные наблюдения про своппинг процесса rphost.exe
Для rphost.exe получил:
минимальный размер рабочего набора 205 Кбайта
максимальный размер рабочего набора 1,5 мегабайта.
(стандарт)

Ежам на смех.

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

Ну и посмотрите на ваш сервер 1С, проработавший день и на счетчик "Page Fault" в диспетчере задач.

Будет свободное время - назначу на наш сервер набор в 2 гига, потестирую.
2 + 2 = 3.9999999999999999999999999999999...