古いリクエスト トラッカー 4.0.3 インスタンスを 4.4.3 に更新しようとしています。アップグレードは、82,319 ユーザー (特権 LDAP ユーザーを含む; ExternalAuth ) でも機能します。
ここまでは順調ですが、特権ユーザーを使用すると、キューを表示するパフォーマンスが非常に遅いことに気付きました。表示されるキューが長いほど、実行時間が長くなります。私は数分について話している.ルートユーザーまたは管理権限を持つ特権ユーザーを使用することにより、「すべてを実行するか何もしないか」(ドイツ語から翻訳)、すぐにキューを取得しました。
さらに、mysql クエリによって実行時間が長くなることがわかりました。ルート実行は ACL チェックを必要としないため、より高速に実行されます。でも、そんなに時間かかるのは普通じゃないですよね。それを理解するのに何時間もかかりました。
基本的に、クエリ (MYSQL EXPLAIN SELECT ...) による違いは次のとおりです。
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra
| SIMPLE| Groups_2| ref| groups1,groups2,groups3| groups1 | 67 | const | 693212 | Using where; Distinct
| SIMPLE | CachedGroupMembers_3 | ref | DisGrouMem,CachedGroupMembers3,cachedgroupmembers1 | DisGrouMem | 12 | rt3.Groups_2.id,const,const | 1 | Using where; Using index; Distinct
Groupsテーブルの 693212 行はかなり多いと思います。同じ更新されていないインスタンスを持つ古い (まだ実行中の) RT 4.0.3 インスタンスは、魅力的に動作します。
私は間違いを犯しましたか?
ちなみに、データベースのアップグレード中に次の警告が表示されました。
Processing 4.3.0 現在、データを挿入しています。[6564] [2018 年 8 月 29 日水曜日 22:44:51] [警告]: 列 'ExternalAuthId' の値が空でない 11141 人のユーザーがいます。コア RT はこの列を使用しないため、拡張またはローカルの変更で使用される可能性があります。このアップグレードによりこれらの列が削除されるため、これらのユーザー値をカスタム フィールドまたは属性に移行してください。./etc/upgrade/4.3.0/content 行 67. (./etc/upgrade/4.3.0/content:67) [6564] [2018 年 8 月 29 日水曜日 22:44:51] [警告]:列 'AuthSystem' の値が空でない 256 人のユーザー。コア RT はこの列を使用しないため、拡張またはローカルの変更で使用される可能性があります。このアップグレードによりこれらの列が削除されるため、これらのユーザー値をカスタム フィールドまたは属性に移行してください。./etc/upgrade/4.3.0/content 行 67 で (.
この問題を解決するために何も変更しませんでしたが、LDAP ユーザーは引き続きログインできるので、それは問題ではないと思います。
誰かアイデアはありますか?
ユーザー:
SELECT DISTINCT main.* FROM Tickets main LEFT JOIN Groups Groups_2 ON ( Groups_2.Domain = 'RT::Ticket-Role' ) AND ( Groups_2.Instance = main.id ) JOIN Queues Queues_1 ON ( Queues_1.id = main.Queue ) LEFT JOIN CachedGroupMembers CachedGroupMembers_3 ON ( CachedGroupMembers_3.Disabled = '0' ) AND ( CachedGroupMembers_3.MemberId = '1296794' ) AND ( CachedGroupMembers_3.GroupId = Groups_2.id ) WHERE ( ( main.Queue IN ('44', '59', '1', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '19', '20', '21', '22', '23', '24', '25', '26', '27', '29', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '50', '51', '52', '53', '54', '55', '57', '58', '59', '60', '62', '63', '64', '65', '66', '68', '69', '72', '78', '79', '73', '80', '82', '83', '85', '88', '90', '92', '93', '94', '97', '99', '28', '102', '103', '106', '108', '109') OR ( CachedGroupMembers_3.MemberId IS NOT NULL AND Groups_2.Name = 'Requestor' ) OR ( CachedGroupMembers_3.MemberId IS NOT NULL AND Groups_2.Name = 'Cc' AND main.Queue IN ('77') ) OR ( CachedGroupMembers_3.MemberId IS NOT NULL AND Groups_2.Name = 'AdminCc' ) OR ( main.Owner = '1296794' ) ) ) AND (main.IsMerged IS NULL) AND (main.Status != 'deleted') AND (main.Type = 'ticket') AND (main.Queue = '72' AND ( ( Queues_1.Lifecycle = 'assets' AND ( main.Status = 'new' OR main.Status = 'allocated' OR main.Status = 'in-use' ) ) OR ( Queues_1.Lifecycle = 'default' AND ( main.Status = 'new' OR main.Status = 'open' OR main.Status = 'stalled' ) ) OR ( Queues_1.Lifecycle = 'approvals' AND ( main.Status = 'new' OR main.Status = 'open' OR main.Status = 'stalled' ) ) ) ) ORDER BY main.id ASC LIMIT 50;
セットで 11 行 (37.49 秒)
根:
SELECT main.* FROM Tickets main JOIN Queues Queues_1 ON ( Queues_1.id = main.Queue ) WHERE (main.IsMerged IS NULL) AND (main.Status != 'deleted') AND (main.Type = 'ticket') AND (main.Queue = '72' AND ( ( Queues_1.Lifecycle = 'default' AND ( main.Status = 'new' OR main.Status = 'open' OR main.Status = 'stalled' ) ) OR ( Queues_1.Lifecycle = 'assets' AND ( main.Status = 'new' OR main.Status = 'allocated' OR main.Status = 'in-use' ) ) OR ( Queues_1.Lifecycle = 'approvals' AND ( main.Status = 'new' OR main.Status = 'open' OR main.Status = 'stalled' ) ) ) ) ORDER BY main.id ASC LIMIT 50;
セットで 11 行 (0.00 秒)