RT 4.0.3 до 4.4.3 приводит к проблемам производительности из-за проверок ACL - PullRequest
0 голосов
/ 09 ноября 2018

Я пытаюсь обновить старый экземпляр системы отслеживания запросов 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

Я думаю, 693212 строк в таблице Groups в значительной степени. Старый (все еще работающий) экземпляр RT 4.0.3 с тем же не обновленным экземпляром работает как чудо.

Я сделал ошибку?

Кстати, я получил это предупреждение во время обновления базы данных:

Обработка 4.3.0 Теперь вставка данных. [6564] [Ср. 29 августа 22:44:51 2018] [предупреждение]: у вас есть 11141 пользователей с непустым значением для столбца 'ExternalAuthId. Core RT не использует этот столбец, поэтому, возможно, расширение или локальная модификация использует его. Пожалуйста, перенесите эти пользовательские значения в настраиваемое поле или атрибут, потому что это обновление опустит эти столбцы. at ./etc/upgrade/4.3.0/content line 67. (./etc/upgrade/4.3.0/content:67) [6564] [ср. 29 августа 22:44:51 2018] [предупреждение]: у вас есть 256 пользователей с непустым значением для столбца 'AuthSystem. Core RT не использует этот столбец, поэтому, возможно, расширение или локальная модификация использует его. Пожалуйста, перенесите эти пользовательские значения в настраиваемое поле или атрибут, потому что это обновление опустит эти столбцы. at ./etc/upgrade/4.3.0/content line 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 голосов
/ 07 февраля 2019

Хорошо, ответ - «новая» функция Request-Tracker: UseSQLForACLCheck .

Отключение этого параметра возвращает все исполнение.

...