( Já respondido ) Estou lutando contra o desempenho ruim do meu redmine de cerca de 100 usuários. Para testá-lo, configurei um cenário simples para atualizar "Porcentagem concluída" em cinco problemas de exemplo diferentes. Todas as atualizações começam exatamente no mesmo segundo, usando curl
. Para minha surpresa, as atualizações no redmine parecem serializadas (quero dizer, não multithread) com tempos como este:
real 0m1.122s
real 0m1.404s
real 0m2.258s
real 0m2.782s
real 0m3.151s
real 0m3.336s
Ou outra tentativa, quando algum processamento por outras sessões também atrapalha:
real 0m7.492s
real 0m7.803s
real 0m8.045s
real 0m8.246s
real 0m8.597s
real 0m8.825s
O momento-chave no production.log
processamento de zilliards de consultas SQL é a fase COMMIT. Observe como os COMMITs são feitos em milissegundos, mas algo misterioso acontece entre os COMMITs que não apenas os serializa, mas leva segundos para chegar ao status Concluído. Este trecho de log está intacto - não excluí nenhuma linha intermediária.
(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)
O que já verifiquei:
- o status do passageiro tem mais tópicos do que o suficiente
- apache2 httpd tem mais processos do que o suficiente
- mysql 5.1 usa innodb
- innotop não mostra bloqueios
- innotop não faz E/S excessiva
- iostat não mostra E/S excessiva (cerca de 10-15 IOPS, disco máximo de 17% de uso do tempo)
- top não mostra uso excessivo da CPU (máximo de 70% dos 400% possíveis).