RT 4.0.3至4.4.3会由于ACL检查而导致性能问题

时间:2018-11-09 18:41:38

标签: mysql perl rt

我正在尝试将旧的请求跟踪程序4.0.3实例更新为4.4.3。升级甚至适用于82'319用户(包括特权LDAP用户; ExternalAuth)。

到目前为止,还不错,但是我意识到使用特权用户,显示队列的性能非常慢。显示的队列越长,执行时间越长。我说的是分钟...通过使用root用户或具有管理权限“无所事事”的特权用户(从德语翻译而来),我立即得到了队列。

此外,我发现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实例像超级按钮一样运行。

我做错了吗?

通过我在数据库升级过程中收到此警告的方式:

  

处理4.3.0现在插入数据。 [6564] [2018年8月29日星期三22:44:51   [警告]:您有11141个用户的列非空值   “ ExternalAuthId”。 Core RT不使用此列,所以也许   扩展名或本地修改即可使用它。请迁移这些   用户将值设置为自定义字段或属性,因为此升级   将删除这些列。在./etc/upgrade/4.3.0/内容行67中。   (./etc/upgrade/4.3.0/content:67)[6564] [2018年8月29日星期三22:44:51   [警告]:您有256个用户,列的值非空   'AuthSystem'。 Core RT不使用此列,所以也许   扩展名或本地修改即可使用它。请迁移这些   用户将值设置为自定义字段或属性,因为此升级   将删除这些列。在./etc/upgrade/4.3.0/内容行67中。   (./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秒)

1 个答案:

答案 0 :(得分:0)

好的,答案是“新的”请求跟踪器功能: UseSQLForACLCheck

禁用此参数将返回整体性能。