Долгое отображение записей Etraxis

Всё тоже самое, только по-русски.
kondrashev
Posts: 7
Joined: Mon May 25, 2015 2:36 am

Долгое отображение записей Etraxis

Postby kondrashev » Thu Jul 23, 2015 5:41 am

Доброго дня Артем,
Появилась новая проблема, проявляется она только у одного активного пользователя.
Записи на странице начали открываться по 19-20 секунд.
Мы временно решили проблему создав сотруднику новую учетную запись, но через 3 месяца ситуация вновь повторилась.
Есть подозрения что у сотрудника есть предел на количество членства в группах авторство итд... и по достижению данного предела система начинает "виснуть".
Скрин во вложении.
Attachments
etraxis.jpg
etraxis.jpg (335.84 KiB) Viewed 1213 times

User avatar
Artem
eTraxis Support
Posts: 227
Joined: Mon Sep 15, 2008 2:51 am
Location: Auckland, New Zealand
Contact:

Re: Долгое отображение записей Etraxis

Postby Artem » Fri Jul 24, 2015 12:59 am

Здравствуйте,

Да, в eTraxis до сих пор порой "всплывают" ошибки, связанные с неоптимальными SQL-запросами. Как правило, они случаются только на custom views (когда в список добавлены столбцы из шаблонов) и специфичны для конкретной СУБД (например, могут воспроизводиться только в MS SQL Server).

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

1. Какая у вас версия eTraxis?

2. Какая СУБД используется (MySQL, PostgreSQL, MS SQL Server, Oracle)? Пожалуйста, укажите также версию СУБД.

3. Сделайте, пожалуйста, экспорт конфигурации проекта "Журнал заявок ОПТО" (кнопка "Экспорт" на странице администрирования проекта) и пришлите полученный XML-файл. Данный файл будет содержать только конфигурацию шаблонов проекта и прав доступа пользователей - никаких данных из реальных задач в него не попадает. Тем не менее я рекомендую выслать его личным сообщением (в нем могут быть email-адреса пользователей, которые не стоит "светить" в интернете).

4. Сколько всего записей содержит проблемный список (число "Всего" в правом нижнем углу таблицы)?

5. Сколько всего записей в БД (т.е. каков ID самой последней записи)?

6. Теперь самое сложное. :) Необходимо включить отладочное логирование. Для этого нужно в файле "config.php" сделать следующие изменения (нужные строки там уже есть, их надо лишь изменить):

Code: Select all

define('DEBUG_MODE', 2);
define('DEBUG_LOGS', 'C:/eTraxis/Logs/');
Т.е. по сути нужно присвоить значение "2" в "DEBUG_MODE" и указать путь к лог-файлам в "DEBUG_LOGS". Путь должен содержать прямые "слэши" (т.е. "/", а не "\") и должен содержать "слэш" на конце. Путь может быть любым, я указал "C:/eTraxis/Logs/" лишь для примера.

После того, как вы включите логирование, обновите страницу с проблемным списком. Когда страница наконец загрузится, пришлите полученный лог-файл (лучше также личным сообщением).

Получив всю эту информацию, я смогу локально эмулировать ситуацию, близкую к вашей - установлю аналогичную СУБД, импортирую конфигурацию проекта, создам сходное кол-во абстрактных записей, и попробую получить такой список на основании данных из лог-файла.

Как вариант - вы можете ответить лишь на вопросы 1 и 2, и прислать (строго личным сообщением!) дамп вашей базы (постарайтесь его заархивировать, т.к. он может быть довольно ёмким). В этом случае вам будет проще/быстрее предоставить всю информацию, а мне проще и гарантированно воспроизвести проблему. Но такой дамп будет содержать всю информацию из ваших записей. Я даю гарантию, что кроме меня этот дамп никто не увидит (а после воспроизведения проблемы он будет удален), и некоторые мои клиенты идут на это, но решать вам.

Заранее спасибо за помощь.
Best regards,
Artem

kondrashev
Posts: 7
Joined: Mon May 25, 2015 2:36 am

Re: Долгое отображение записей Etraxis

Postby kondrashev » Mon Jul 27, 2015 7:56 am

Артем, Доброго дня!
1) Версия 3.7.0
2) MySQL:
Server version 5.5.44-0ubuntu0.14.04.1
Protocol version 10
Connection Localhost via UNIX socket
UNIX socket /var/run/mysqld/mysqld.sock
Uptime: 4 days 1 hour 32 min 46 sec
Threads: 2 Questions: 272292 Slow queries: 48 Opens: 190 Flush tables: 1 Open tables: 183 Queries per second avg: 0.775

3) Сегодня проблему удалось локализовать: Дело в столбце представлений: Задача назначена:Срок выполнения(дата), если его включить - начинаются проблемы. Выключить - проблема исчезает. Аттач приложил.

4) Всего: 22733
5) № Последней записи 23285
6)Включил, логи в личке.
Attachments
2015-07-27_143004.jpg
2015-07-27_143004.jpg (81.61 KiB) Viewed 1202 times

User avatar
Artem
eTraxis Support
Posts: 227
Joined: Mon Sep 15, 2008 2:51 am
Location: Auckland, New Zealand
Contact:

Re: Долгое отображение записей Etraxis

Postby Artem » Mon Jul 27, 2015 9:14 pm

Здравствуйте,

Спасибо за информацию. К сожалению, логов я не получил - у меня в "личке" пусто.

Вообще, в логах меня интересует одна единственная строчка, содержащая проблемный SQL-запрос. Вы можете найти его в логах и просто процитировать здесь же. Запросов в логах может быть много - нас интересует тот, сразу после которого идет строка "SQL time" с большим кол-вом времени. Например:

Code: Select all

2015-07-28  09:06:24  [DUMP]     SQL text = select r.record_id, r.subject, r.responsible_id, r.creator_id, r.creation_time, r.change_time, r.closure_time, r.postpone_time, r.project_name, r.template_name, r.template_prefix, r.critical_age, r.state_name, r.state_abbr, r.read_time, ac.fullname as author_fullname, ar.fullname as responsible_fullname, (1438084799 - r.creation_time) as opened_age, (r.closure_time - r.creation_time) as closed_age from (select r.record_id, r.subject, r.responsible_id, r.creator_id, r.creation_time, r.change_time, r.closure_time, r.postpone_time, p.project_name, t.template_name, t.template_prefix, t.critical_age, s.state_name, s.state_abbr, 0 as read_time from tbl_projects p, tbl_states s, tbl_templates t, tbl_records r where p.project_id = t.project_id and t.template_id = s.template_id and s.state_id = r.state_id and t.guest_access = 1 and r.closure_time is null) r left outer join tbl_accounts ac on ac.account_id = r.creator_id left outer join tbl_accounts ar on ar.account_id = r.responsible_id order by closed_age desc, opened_age desc, record_id desc

2015-07-28  09:06:24  [PERFORM]  SQL time = 19.418852949142456
По возможности найдите пожалуйста и процитируйте проблемный запрос. Тем временем я буду пытаться воспроизвести проблему с тем что есть.
Best regards,
Artem

kondrashev
Posts: 7
Joined: Mon May 25, 2015 2:36 am

Re: Долгое отображение записей Etraxis

Postby kondrashev » Mon Jul 27, 2015 10:58 pm

Добрый день, высылаю SQL-запрос:

Code: Select all

2015-07-27  17:24:14  [DUMP]     SQL text = select r.record_id, r.subject, r.responsible_id, r.creator_id, r.creation_time, r.change_time, r.closure_time, r.postpone_time, r.project_name, r.template_name, r.template_prefix, r.critical_age, r.state_name, r.state_abbr, r.read_time, ac.fullname as author_fullname, ar.fullname as responsible_fullname, (1438005599 - r.creation_time) as opened_age, (r.closure_time - r.creation_time) as closed_age, v7490.value7490 from (select r.record_id, r.subject, r.responsible_id, r.creator_id, r.creation_time, r.change_time, r.closure_time, r.postpone_time, p.project_name, t.template_name, t.template_prefix, t.critical_age, s.state_name, s.state_abbr, rd.read_time from tbl_projects p, tbl_states s, tbl_templates t left outer join (select gp.template_id, count(gp.group_id) as gnum from tbl_membership ms, tbl_group_perms gp where ms.account_id = 441 and ms.group_id = gp.group_id and (gp.perms & 1073741824) <> 0 group by template_id) perms on t.template_id = perms.template_id, tbl_records r left outer join tbl_reads rd on rd.record_id = r.record_id and rd.account_id = 441 where p.project_id = t.project_id and t.template_id = s.template_id and s.state_id = r.state_id and (perms.gnum is not null or r.creator_id = 441 or r.responsible_id = 441 or (t.registered_perm & 1073741824) <> 0 or t.guest_access = 1)) r left outer join tbl_accounts ac on ac.account_id = r.creator_id left outer join tbl_accounts ar on ar.account_id = r.responsible_id left outer join (select r.record_id, fv.value_id as value7490 from tbl_records r, tbl_states s, tbl_fields f, tbl_events e, tbl_field_values fv where r.record_id = e.record_id and s.state_id = f.state_id and s.state_name = 'Задача назначена' and f.field_id = fv.field_id and f.field_name = 'Срок выполнения' and f.field_type = 7 and e.event_id = fv.event_id and fv.is_latest = 1 and (
        f.field_id in (select f.field_id
                       from
                           tbl_group_perms  gp,
                           tbl_membership   ms,
                           tbl_field_perms  fp,
                           tbl_fields f
                       where
                           fp.field_id   = f.field_id  and
                           fp.group_id   = gp.group_id and
                           ms.group_id   = gp.group_id and
                           ms.account_id = 441 and
                           fp.perms      = 1)

        or r.creator_id = 441 and
           f.field_id in (select f.field_id
                          from tbl_fields f
                          where f.author_perm >= 1)

        or r.responsible_id = 441 and
           f.field_id in (select f.field_id
                          from tbl_fields f
                          where f.responsible_perm >= 1)

        or f.field_id in (select f.field_id
                          from tbl_fields f
                          where f.registered_perm >= 1 or f.guest_access = 1))) v7490 on r.record_id = v7490.record_id order by closed_age desc, opened_age desc, record_id desc
2015-07-27  17:24:14  [PERFORM]  SQL time = 28.135813951492

User avatar
Artem
eTraxis Support
Posts: 227
Joined: Mon Sep 15, 2008 2:51 am
Location: Auckland, New Zealand
Contact:

Re: Долгое отображение записей Etraxis

Postby Artem » Sun Aug 09, 2015 7:59 am

Добрый день,

Спасибо за помощь - создав 25 тысяч записей и добавив в представление "пользовательский" столбец, я воспроизвел проблему. Выяснилось, что MySQL содержит ошибку, связанную с неоптимальной реализацией LEFT JOIN для некоторых сценариев, приводящую к тому, что два источника данных по 25 тысяч объединяются до исключения заведомо ненужных строк. В результате в какой-то момент MySQL вынужден обработать 625 миллионов (25000 x 25000) записей, прежде чем вернуть ожидаемые 25 тысяч.

Дальнейшее исследование показало, что данная ошибка была исправлена в MySQL 5.6. Я попробовал всопроизвести проблему в нем (Ubuntu 15.04) - проблемы нет.

К сожалению, реорганизовать существующий SQL-запрос довольно сложная и трудоемкая задача. Я бы предпочел оставить все как есть в линейке 3.6, и однозначно обратить внимание на этот случай в линейке 4.0, которая сейчас находится в активной разработке.

Можете попробовать перейти на MySQL 5.6, если у вас есть такая возможность. Если нет, я бы рекомендовал вашему пользователю сделать фильтр более ограничивающим - например, не показывать уже закрытые записи. Если же видеть все записи без исключения важно в рамках какого-то бизнес-процесса, можно на этот случай создать отдельное вью, не содержащее "пользовательских" столбцов.
Best regards,
Artem

kondrashev
Posts: 7
Joined: Mon May 25, 2015 2:36 am

Re: Долгое отображение записей Etraxis

Postby kondrashev » Tue Aug 18, 2015 2:00 am

Добрый день, Артем.
Спасибо за помошь.
Действительно, обновление mysql до версии 5.6 решило все проблемы.


Who is online

Users browsing this forum: No registered users and 1 guest