プロジェクト

全般

プロフィール

Vote #78002

未完了

CSV Export Very slow for issues with lots of Custom Fields

Admin Redmine さんが約4年前に追加. 約4年前に更新.

ステータス:
New
優先度:
通常
担当者:
-
カテゴリ:
Performance_53
対象バージョン:
-
開始日:
2022/05/09
期日:
進捗率:

0%

予定工数:
category_id:
53
version_id:
0
issue_org_id:
24473
author_id:
123866
assigned_to_id:
0
comments:
5
status_id:
1
tracker_id:
1
plus1:
0
affected_version:
closed_on:
affected_version_id:
ステータス-->[New]

説明

Environment:
  Redmine version                3.3.0.stable
  Ruby version                   2.2.1-p85 (2015-02-26) [x86_64-linux]
  Rails version                  4.2.6
  Environment                    production
  Database adapter               Mysql2

So I tried to investigate why, when exporting an issue with lots of custom fields, my log file would look like this:

CACHE (0.0ms)  SELECT  `issues`.* FROM `issues` WHERE `issues`.`id` = 94261 LIMIT 1  [["id", 94261]]
  CACHE (0.0ms)  SELECT  `issues`.* FROM `issues` WHERE `issues`.`id` = 94261 LIMIT 1  [["id", 94261]]
  CACHE (0.0ms)  SELECT  `issues`.* FROM `issues` WHERE `issues`.`id` = 94261 LIMIT 1  [["id", 94261]]
  CACHE (0.0ms)  SELECT  `issues`.* FROM `issues` WHERE `issues`.`id` = 94261 LIMIT 1  [["id", 94261]]
  CACHE (0.0ms)  SELECT  `issues`.* FROM `issues` WHERE `issues`.`id` = 94261 LIMIT 1  [["id", 94261]]
  CACHE (0.0ms)  SELECT  `issues`.* FROM `issues` WHERE `issues`.`id` = 94261 LIMIT 1  [["id", 94261]]
  CACHE (0.0ms)  SELECT  `issues`.* FROM `issues` WHERE `issues`.`id` = 94261 LIMIT 1  [["id", 94261]]
  CACHE (0.0ms)  SELECT  `issues`.* FROM `issues` WHERE `issues`.`id` = 94261 LIMIT 1  [["id", 94261]]
  CACHE (0.0ms)  SELECT  `issues`.* FROM `issues` WHERE `issues`.`id` = 94261 LIMIT 1  [["id", 94261]]
  CACHE (0.0ms)  SELECT  `issues`.* FROM `issues` WHERE `issues`.`id` = 94261 LIMIT 1  [["id", 94261]]
  CACHE (0.0ms)  SELECT  `issues`.* FROM `issues` WHERE `issues`.`id` = 94261 LIMIT 1  [["id", 94261]]
  CACHE (0.0ms)  SELECT  `issues`.* FROM `issues` WHERE `issues`.`id` = 94261 LIMIT 1  [["id", 94261]]
  CACHE (0.0ms)  SELECT  `issues`.* FROM `issues` WHERE `issues`.`id` = 94261 LIMIT 1  [["id", 94261]]
  CACHE (0.0ms)  SELECT  `issues`.* FROM `issues` WHERE `issues`.`id` = 94261 LIMIT 1  [["id", 94261]]
  CACHE (0.0ms)  SELECT  `issues`.* FROM `issues` WHERE `issues`.`id` = 94261 LIMIT 1  [["id", 94261]]
  CACHE (0.0ms)  SELECT  `issues`.* FROM `issues` WHERE `issues`.`id` = 94261 LIMIT 1  [["id", 94261]]
  CACHE (0.0ms)  SELECT  `issues`.* FROM `issues` WHERE `issues`.`id` = 94261 LIMIT 1  [["id", 94261]]
  CACHE (0.0ms)  SELECT  `issues`.* FROM `issues` WHERE `issues`.`id` = 94261 LIMIT 1  [["id", 94261]]
  CACHE (0.0ms)  SELECT  `issues`.* FROM `issues` WHERE `issues`.`id` = 94261 LIMIT 1  [["id", 94261]]
  CACHE (0.0ms)  SELECT  `issues`.* FROM `issues` WHERE `issues`.`id` = 94261 LIMIT 1  [["id", 94261]]
  CACHE (0.0ms)  SELECT  `issues`.* FROM `issues` WHERE `issues`.`id` = 94261 LIMIT 1  [["id", 94261]]
  CACHE (0.0ms)  SELECT  `issues`.* FROM `issues` WHERE `issues`.`id` = 94261 LIMIT 1  [["id", 94261]]
  CACHE (0.0ms)  SELECT  `issues`.* FROM `issues` WHERE `issues`.`id` = 94261 LIMIT 1  [["id", 94261]]
  CACHE (0.0ms)  SELECT  `issues`.* FROM `issues` WHERE `issues`.`id` = 94261 LIMIT 1  [["id", 94261]]
  CACHE (0.0ms)  SELECT  `issues`.* FROM `issues` WHERE `issues`.`id` = 94261 LIMIT 1  [["id", 94261]]

There is one line per custom field apparently.

My investigation led this method (in lib/redmine/field_format.rb):


def formatted_custom_value(view, custom_value, html=false)
  formatted_value(view, custom_value.custom_field, custom_value.value, custom_value.customized, html)
                                                                               #   |
                                                                               #THIS CALL
end

When custom_value.customized is called, this leads to the Customized object being loaded. Here, Customized is an issue, and it would be reloaded once per custom field.

Some caching would be needed here, where we directly provide the customized object to this method, although I am not sure what's best to do...


journals

I have attached a (dirty) patch which fixed the problem for me. The export time is basically twice faster.
--------------------------------------------------------------------------------

--------------------------------------------------------------------------------

--------------------------------------------------------------------------------

--------------------------------------------------------------------------------

--------------------------------------------------------------------------------


related_issues

relates,New,24477,CSV export feature for thousand of issues
relates,New,31076,Issues CSV / PDF export via ActiveJob
duplicates,Closed,24755,Slow Queries because of Custom Fields

他の形式にエクスポート: Atom PDF

いいね!0
いいね!0