プロジェクト

全般

プロフィール

Vote #81795

完了

Reduce extra queries in IssueQuery.default

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

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

0%

予定工数:
category_id:
53
version_id:
0
issue_org_id:
36503
author_id:
332
assigned_to_id:
332
comments:
6
status_id:
5
tracker_id:
3
plus1:
0
affected_version:
closed_on:
affected_version_id:
ステータス-->[Closed]

説明

The attached patch reduces the total number of SQL queries during the execution of @IssueQuery.default@.

No default queries in any levels:

before:

  UserPreference Load (0.2ms)  SELECT "user_preferences".* FROM "user_preferences" WHERE "user_preferences"."user_id" = ? LIMIT ?  [["user_id", 1], ["LIMIT", 1]]
  ↳ app/models/user.rb:394:in `pref'
  IssueQuery Load (0.1ms)  SELECT "queries".* FROM "queries" WHERE "queries"."type" = ? AND "queries"."id" IS NULL LIMIT ?  [["type", "IssueQuery"], ["LIMIT", 1]]
  ↳ app/models/issue_query.rb:83:in `default'
  Setting Load (0.1ms)  SELECT "settings".* FROM "settings" WHERE "settings"."name" = ? ORDER BY "settings"."id" DESC LIMIT ?  [["name", "default_issue_query"], ["LIMIT", 1]]
  ↳ app/models/setting.rb:360:in `find_or_default'
  IssueQuery Load (0.1ms)  SELECT "queries".* FROM "queries" WHERE "queries"."type" = ? AND "queries"."id" = ? LIMIT ?  [["type", "IssueQuery"], ["id", nil], ["LIMIT", 1]]
  ↳ app/models/issue_query.rb:86:in `default'

after:

  UserPreference Load (0.1ms)  SELECT "user_preferences".* FROM "user_preferences" WHERE "user_preferences"."user_id" = ? LIMIT ?  [["user_id", 1], ["LIMIT", 1]]
  ↳ app/models/user.rb:394:in `pref'
  Setting Load (0.1ms)  SELECT "settings".* FROM "settings" WHERE "settings"."name" = ? ORDER BY "settings"."id" DESC LIMIT ?  [["name", "default_issue_query"], ["LIMIT", 1]]
  ↳ app/models/setting.rb:360:in `find_or_default'

A project-level default query defined:

before:

  UserPreference Load (0.2ms)  SELECT "user_preferences".* FROM "user_preferences" WHERE "user_preferences"."user_id" = ? LIMIT ?  [["user_id", 1], ["LIMIT", 1]]
  ↳ app/models/user.rb:394:in `pref'
  IssueQuery Load (0.2ms)  SELECT "queries".* FROM "queries" WHERE "queries"."type" = ? AND "queries"."id" IS NULL LIMIT ?  [["type", "IssueQuery"], ["LIMIT", 1]]
  ↳ app/models/issue_query.rb:83:in `default'
  IssueQuery Load (0.2ms)  SELECT "queries".* FROM "queries" WHERE "queries"."type" = ? AND "queries"."id" = ? LIMIT ?  [["type", "IssueQuery"], ["id", 4], ["LIMIT", 1]]
  ↳ app/models/issue_query.rb:85:in `default'

after:

  UserPreference Load (0.2ms)  SELECT "user_preferences".* FROM "user_preferences" WHERE "user_preferences"."user_id" = ? LIMIT ?  [["user_id", 1], ["LIMIT", 1]]
  ↳ app/models/user.rb:394:in `pref'
  IssueQuery Load (0.2ms)  SELECT "queries".* FROM "queries" WHERE "queries"."type" = ? AND "queries"."id" = ? LIMIT ?  [["type", "IssueQuery"], ["id", 4], ["LIMIT", 1]]
  ↳ app/models/issue_query.rb:87:in `default'

journals

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

--------------------------------------------------------------------------------
Committed the patch as a part of #7360.
--------------------------------------------------------------------------------
Isn't there https://www.redmine.org/projects/redmine/repository/entry/trunk/app/models/issue_query.rb#L83 also supposed to be a @present?@ at the end of second condition?

If @(query_id = user.pref.default_issue_query)@ equals to "" the query stil fires.

<pre><code class="diff">
diff --git a/app/models/issue_query.rb b/app/models/issue_query.rb
index 5a3e14474..e7ac1c821 100644
--- a/app/models/issue_query.rb
+++ b/app/models/issue_query.rb
@@ -80,7 +80,7 @@ class IssueQuery < Query
def self.default(project: nil, user: User.current)
query = nil
# user default
- if user&.logged? && (query_id = user.pref.default_issue_query)
+ if user&.logged? && (query_id = user.pref.default_issue_query).present?
query = find_by(id: query_id)
end
# project default
</code></pre>
--------------------------------------------------------------------------------

--------------------------------------------------------------------------------
Dmitry Makurin wrote:
> Isn't there https://www.redmine.org/projects/redmine/repository/entry/trunk/app/models/issue_query.rb#L83 also supposed to be a @present?@ at the end of second condition?
>
> If @(query_id = user.pref.default_issue_query)@ equals to "" the query stil fires.
>
>
> [...]

Committed the patch, thanks for pointing this out.
--------------------------------------------------------------------------------


related_issues

relates,Closed,7360,Issue custom query: default query per instance, project and user

Admin Redmine さんがほぼ4年前に更新

  • カテゴリPerformance_53 にセット

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

いいね!0
いいね!0