Назад | Перейти на главную страницу

Redmine низкая производительность записи (обновления не являются действительно многопоточными)

(Самостоятельный ответ уже) Я борюсь с плохой производительностью моего редмайна около 100 пользователей. Чтобы проверить это, я создал простой сценарий для обновления «Процент выполнения» для пяти различных примеров проблем. Все обновления начинаются точно в одну и ту же секунду, используя curl. К моему удивлению, обновления в Redmine кажутся сериализованными (я имею в виду не многопоточными) с такими временами:

real    0m1.122s
real    0m1.404s
real    0m2.258s
real    0m2.782s
real    0m3.151s
real    0m3.336s

Или еще одна попытка, когда некоторая обработка другими сеансами тоже мешает:

real    0m7.492s
real    0m7.803s
real    0m8.045s
real    0m8.246s
real    0m8.597s
real    0m8.825s

Ключевой момент в production.log после обработки огромного количества SQL-запросов следует этап COMMIT. Обратите внимание на то, как COMMIT выполняется за миллисекунды, но между COMMIT происходит что-то загадочное, что не только сериализует их, но и принимает секунды перейти в статус Завершено. Этот фрагмент журнала не поврежден - я не удалял никаких строк между ними.

   (0.6ms)  SELECT COUNT(*) FROM `custom_workflows` WHERE `custom_workflows`.`active` = 1 AND `custom_workflows`.`observable` = 'issue' AND (is_for_all OR EXISTS (SELECT * FROM custom_workflows_projects WHERE project_id=123 AND custom_workflow_id=id))
   (30.1ms)  COMMIT
Redirected to http://redmine.mydomain.local/issues/11973
Completed 302 Found in 7418.4ms (ActiveRecord: 135.8ms)
   (0.6ms)  SELECT COUNT(*) FROM `custom_workflows` WHERE `custom_workflows`.`active` = 1 AND `custom_workflows`.`observable` = 'issue' AND (is_for_all OR EXISTS (SELECT * FROM custom_workflows_projects WHERE project_id=123 AND custom_workflow_id=id))
   (24.8ms)  COMMIT
Redirected to http://redmine.mydomain.local/issues/9240
Completed 302 Found in 7738.3ms (ActiveRecord: 57.4ms)
   (0.4ms)  SELECT COUNT(*) FROM `custom_workflows` WHERE `custom_workflows`.`active` = 1 AND `custom_workflows`.`observable` = 'issue' AND (is_for_all OR EXISTS (SELECT * FROM custom_workflows_projects WHERE project_id=123 AND custom_workflow_id=id))
   (25.9ms)  COMMIT
Redirected to http://redmine.mydomain.local/issues/9614
Completed 302 Found in 7949.0ms (ActiveRecord: 135.7ms)
   (0.5ms)  SELECT COUNT(*) FROM `custom_workflows` WHERE `custom_workflows`.`active` = 1 AND `custom_workflows`.`observable` = 'issue' AND (is_for_all OR EXISTS (SELECT * FROM custom_workflows_projects WHERE project_id=123 AND custom_workflow_id=id))
   (24.6ms)  COMMIT
Redirected to http://redmine.mydomain.local/issues/12016
Completed 302 Found in 8058.5ms (ActiveRecord: 102.5ms)
   (0.5ms)  SELECT COUNT(*) FROM `custom_workflows` WHERE `custom_workflows`.`active` = 1 AND `custom_workflows`.`observable` = 'issue' AND (is_for_all OR EXISTS (SELECT * FROM custom_workflows_projects WHERE project_id=123 AND custom_workflow_id=id))
   (21.2ms)  COMMIT
Redirected to http://redmine.mydomain.local/issues/8853
Completed 302 Found in 8472.5ms (ActiveRecord: 90.4ms)
   (0.5ms)  SELECT COUNT(*) FROM `custom_workflows` WHERE `custom_workflows`.`active` = 1 AND `custom_workflows`.`observable` = 'issue' AND (is_for_all OR EXISTS (SELECT * FROM custom_workflows_projects WHERE project_id=123 AND custom_workflow_id=id))
   (27.9ms)  COMMIT
Redirected to http://redmine.mydomain.local/issues/10007
Completed 302 Found in 8700.4ms (ActiveRecord: 137.4ms)

Что я уже проверил:

Хорошо, это был SMTP, сериализующий вещи; он как-то разблокирован по умолчанию.

Я изменился /var/www/html/redmine/config/configuration.yml :

  email_delivery:
    # delivery_method: :smtp       # slows down everything!
    delivery_method: :async_smtp