Нагрузочное тестирование Salary: производительность расчётов для 130 000+ сотрудников

Нагрузочное тестирование Salary подтвердило, что система справляется с большими объёмами данных, поддерживает эффективную многопоточность и обеспечивает предсказуемое время расчёта. Делимся подробностями и результатами проверки производительности системы, созданной для расчёта заработной платы и базовых HR-процессов крупных компаний.

Технические характеристики тестовой среды

Тестирование проводилось на типовой серверной конфигурации без искусственного завышения производительности.
Важно: мы намеренно проводили испытания в «‎стрессовых» для софта условиях, на сервере без SSD-накопителей. Несмотря на то, что отсутствие SSD замедляет операции чтения и записи в базу данных, система Salary продемонстрировала высокие показатели скорости. Это гарантирует запас прочности, в реальной производственной среде на современном оборудовании скорость расчётов будет выше.

Конфигурация сервера

СоставОписание/ХарактеристикиКоличество
Аппаратная конфигурация
Серверная платформа 2UСерверная плата Intel® S2600WTT (C610, 2x2011v3, 24xDDR4 RDIMM, 12x3.5 HotSwap, (SW RAID 0, 1, 10, opt. 5), 2x10GLan, 1x1100W)1
ПроцессорIntel Xeon E5-2670 v3 OEM, Число ядер: 12. Частота ядра: 2.30 ГГц, 2014 год выпуска1
ПамятьKVR21R15D4/16 DDR4 PC4-17000 (DDR4 2133 МГц) CL15 16 Гб8
КонтроллерAdaptec ASR-8805 SGL 2277500-R1
БатареяAdaptec AFM-700 SUPERCAP Kit 2275400-R1
КабельSAS Adaptec 2279700-R
НакопительЖёсткий диск HDD 300 Gb SAS 12Gb/s HGST Ultrastar C15K6004
Накопитель 2.5" 15000rpm 128Mb2
НакопительЖёсткий диск HDD 300 Gb SAS 12Gb/s Toshiba3
Накопитель 2.5" 15000rpm 128Mb1
НакопительЖёсткий диск HDD 900 Gb SAS 12Gb/s Seagate Exos2
Программное обеспечение
ОСCentOS 7
СУБДPostgreSQL 11

Исходные данные

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

ПоказательЗначениеПроцент от общего количества сотрудников
Всего физических лиц139 998
Всего сотрудников136 611
Работающих сотрудников136 611
Всего подразделений в структуре18 147
Листовых подразделений9 508
Штатных единиц136 612
Всего видов начислений и удержаний35
Оклад/тариф: Тарифная ставка58 54843
Оклад/тариф: Оклад78 06457
Надбавки/доплаты: Надбавка за ненормированный рабочий день136 611100
Надбавки/доплаты: Доплата за наставничество136 611100
Разовые начисления: [712] Материальная помощь, оказываемая работодателями своим работникам, а также бывшим своим работникам, уволившимся в связи с выходом на пенсию по инвалидности или по возрасту136 611100
Разовые начисления: [414] Индивидуальная премия136 611100
Удержания: профсоюзные взносы136 611100
Удержания: [816] Удержание по предоставленным работодателем займам и ссудам6 8295
Удержания: [810] Исполнительные документы (взыскание алиментов на несовершеннолетних детей)6 8295
Отвлечения: Простой по вине работодателя1 3671

Результаты расчётов

Результаты расчётаЗначение
Результаты расчёта заработной платы (ЗП). Всего в результатах расчёта строк:686 227
Результаты расчёта ЗП. Всего в результатах расчёта начислений:686 227
Результаты расчёта ЗП. Всего в результатах расчёта удержаний:283 327
Результаты расчёта ЗП: [001] Оплата по окладу78 064
Результаты расчёта ЗП: [801] НДФЛ 13%136 611
Результаты расчёта ЗП: [003] Оплата по часовой тарифной ставке58 548
Результаты расчёта ЗП: [270] Надбавка за ненормированный рабочий день137 668
Результаты расчёта ЗП: [260] Доплата за наставничество137 668
Результаты расчёта ЗП: [712] Материальная помощь, оказываемая работодателями своим работникам, а также бывшим работникам, уволившимся в связи с выходом на пенсию по инвалидности или по возрасту136 611
Результаты расчёта ЗП: [817] Профсоюзные взносы136 611
Результаты расчёта ЗП: [414] Индивидуальная премия136 611
Результаты расчёта ЗП: [810] Исполнительные документы (взыскание алиментов на несовершеннолетних детей)6 829
Результаты расчёта ЗП: [816] Удержание по предоставленным работодателем займам и ссудам3 276
Результаты расчёта ЗП: [710] Оплата простоя по вине работодателя1 057
Результаты расчёта страховых взносов (СВ): Всего строк:546 444
Результаты расчёта СВ: Всего строк (детализация в разрезе начислений):3 415 275

Показатели производительности расчётов на тестовой системе

Система поддерживает различные сценарии запуска расчётов в зависимости от организационного регламента предприятия. Расчёты могут выполняться:

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

Для централизованных расчётов на крупных предприятиях применяется механизм распараллеливания расчётов.

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

При запуске расчёта сотрудники автоматически разделяются по группам (сотрудников в группе равно количеству сотрудников в каждом потоке). Из сформированных групп запускается необходимое (максимальное) количество потоков (по потоку на ядро процессора). По мере расчёта каждого потока система последовательно подгружает новые группы сотрудников, обеспечивая равномерную загрузку ресурсов.

Для нагрузочного тестирования использовались пяти и десятипоточные расчёты.

  • Расчёт табелей и нарядов (оплаты за отработанное время и сдельной оплаты труда)

136 611 сотрудников в 10 потоков — 20 минут по 500 сотрудников.

  • Итоговый расчёт заработной платы и налогов (НДФЛ) (включая распределение по аналитикам затрат и генерацию проводок)

136 611 сотрудник за 1 час 21 минуту в 5 потоков по 50 сотрудников

или

136 611 сотрудник за 33 минуты в 10 потоков по 50 сотрудников.

  • Расчёт страховых взносов (включая распределение по аналитикам затрат и генерацию проводок)

136 611 сотрудников один фонд (кроме ПФР) за 10 минут в 5 потоков по 1000 сотрудников

136 611 сотрудников один фонд (ПФР) за 20 минут в 5 потоков по 1000 сотрудников

136 611 сотрудников все фонды за 30 минут в 5 потоков по 1000 сотрудников.

Особенности расчётов в Salary

Исключение одновременного расчёта одного сотрудника

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

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

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

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

Как влияет месяц года на время расчёта зарплаты при накопительном перерасчёте НДФЛ с начала года

Расчет НДФЛ – основной показатель, влияющий на увеличение времени расчёта заработной платы в течение года в связи с особенностями алгоритма (расчет накопительным итогом). Также стоит отметить, что на увеличение продолжительности влияет большой объем факторов, включая и объём перерасчётов предыдущих периодов (сторнированные начисления, табели).

На практике это приводит к постепенному увеличению времени расчётов к концу года. Ниже на графике приведена усредненная оценка (статистически, на основании опыта эксплуатации системы) изменения времени расчёта зависимости от глубины пересчёта.

Нагрузочное тестирование Core HR. Изменение расчетов к концу года