RT 4.0.3 до 4.4.3 приводит к проблемам производительности из-за проверок ACL

0

Я пытаюсь обновить старый экземпляр request-tracker 4.0.3 до 4.4.3. Обновление работает даже с 82319 пользователями (включая привилегированных пользователей LDAP; ExternalAuth).

Пока все хорошо, но я понял, что производительность для отображения очередей ужасно низка при использовании привилегированного пользователя. Чем длиннее отображаемая очередь, тем дольше время выполнения. Я говорю о минутах... Используя пользователя root или привилегированного пользователя с правами администратора "делай все или ничего" (перевод с немецкого), я сразу получил очереди.

Кроме того, я понял, что запрос mysql приводит к длительному времени выполнения. Поскольку выполнение root не требует проверки 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 строк в таблице групп в значительной степени. Старый (все еще работающий) экземпляр RT 4.0.3 с тем же не обновленным экземпляром запускается как чудо.

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

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

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

Я ничего не изменил, чтобы решить эту проблему, но, поскольку пользователь LDAP все еще может войти в систему, я думаю, что это не проблема.

У кого-нибудь есть идеи?

user: 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; 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 сек)

Теги:
rt

1 ответ

0

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню