Довольно ценный патч для tracker

Главные вкладки

Аватар пользователя Ainur Ainur 23 сентября 2007 в 18:14

В коде тракера есть такой камент:
// TODO: These queries are very expensive, see http://drupal.org/node/105639
И в новости Improvements to the Drupal.org infrastructure говориться: «Installed a different tracker patch that hopefully displays better results.», советую пропатчиться, разница заметна, по крайней мере на крупных сайтах.

Теперь хочу memcache установить себе Smile

Комментарии

Аватар пользователя vadbars@drupal.org vadbars@drupal.org 23 сентября 2007 в 18:24

Раз уж упомянули про патч и его преимущества - коротенько опишите, что там такое. Какие преимущества, ставили ли сами и т.п.

Сэкономите другим время на чтение и перевод, а себе начнете потихоньку обеспечивать вечную память благодарных потомков. Smile

Аватар пользователя Ainur Ainur 23 сентября 2007 в 20:23

В комментариях в tracker.module написано, что запрос, который выводит страницу тракера, очень ресурсоемкий и его нужно «улучшить».
Патч сокрощает скорость выполнения ресурсоемкого SQL запроса в два раза.
Автор патча обратился за помощью к чувакам из MySQLPerformanceBlog и они, детально изучив проблему и SQL запросы, посоветовали переделать запросы используя UNIONы.
Результаты тестов были получены на сайте с 10.000 нодов и 10.000 комментариев, перегружая MySQL сервер между тестами, чтобы все было «по свежему».

До патча

Executed 75 queries in 1640.97 milliseconds. Page execution time was 1734.76 ms.
ms      #       where   query

874.04  1       pager_query     SELECT DISTINCT(n.nid), n.title, n.type, n.changed, n.uid, u.name, GREATEST(n.changed, l.last_comment_timestamp) AS last_updated, l.comment_count FROM node n INNER JOIN node_comment_statistics l ON n.nid = l.nid INNER JOIN users u ON n.uid = u.uid LEFT JOIN comments c ON n.nid = c.nid AND (c.status = 0 OR c.status IS NULL) WHERE n.status = 1 AND (n.uid = 1 OR c.uid = 1) ORDER BY last_updated DESC LIMIT 0, 25

296.64  1       pager_query     SELECT COUNT(DISTINCT(n.nid)) FROM node n LEFT JOIN comments c ON n.nid = c.nid AND (c.status = 0 OR c.status IS NULL) WHERE n.status = 1 AND (n.uid = 1 OR c.uid = 1)

С патчем используя original count query

Executed 75 queries in 586.61 milliseconds. Page execution time was 666.62 ms.
ms      #       where   query

363.42  1       pager_query     (SELECT n.nid, n.title, n.type, n.changed, n.uid, u.name, GREATEST(n.changed, l.last_comment_timestamp) AS last_updated, l.comment_count FROM users u JOIN node n ON n.uid = u.uid JOIN node_comment_statistics l ON l.nid = n.nid WHERE n.status = 1 AND n.uid = 1) UNION (SELECT n.nid, n.title, n.type, n.changed, n.uid, u.name, GREATEST(n.changed, l.last_comment_timestamp) AS last_updated, l.comment_count FROM users u JOIN comments c ON c.uid = u.uid JOIN node n ON n.nid = c.nid JOIN node_comment_statistics l ON l.nid = n.nid WHERE n.status = 1 AND c.status = 0 AND c.uid = 1) ORDER BY last_updated DESC LIMIT 0, 25

146.03  1       pager_query     SELECT COUNT(DISTINCT(n.nid)) FROM node n LEFT JOIN comments c ON n.nid = c.nid AND (c.status = 1 OR c.status IS NULL) WHERE n.status = 1 AND (n.uid = 0 OR c.uid = 1)

С патчем используяю Union для count query
У автора получились не очень хорошие результаты, но он считает что результаты могут быть лучше (кто знает что такое d.o. Data Out?)

Executed 75 queries in 851.03 milliseconds. Page execution time was 997.75 ms.
ms      #       where   query

446.17  1       pager_query     (SELECT DISTINCT(n.nid), n.title, n.type, n.changed, n.uid, u.name, GREATEST(n.changed, l.last_comment_timestamp) AS last_updated, l.comment_count FROM users u JOIN node n ON n.uid = u.uid JOIN node_comment_statistics l ON l.nid = n.nid WHERE n.status = 1 AND n.uid = 1) UNION (SELECT DISTINCT(n.nid), n.title, n.type, n.changed, n.uid, u.name, GREATEST(n.changed, l.last_comment_timestamp) AS last_updated, l.comment_count FROM users u JOIN comments c ON c.uid = u.uid JOIN node n ON n.nid = c.nid JOIN node_comment_statistics l ON l.nid = n.nid WHERE n.status = 1 AND c.status = 0 AND c.uid = 1) ORDER BY last_updated DESC LIMIT 0, 25

338.77  1       pager_query     SELECT SUM(cnt) FROM ((SELECT COUNT(DISTINCT(n.nid)) AS cnt FROM users u JOIN node n ON n.uid = u.uid WHERE n.status = 1 AND u.uid = 1) UNION (SELECT COUNT(DISTINCT(n.nid)) AS cnt FROM users u JOIN comments c ON c.uid = u.uid JOIN node n ON n.nid = c.nid WHERE c.status = 0 AND n.status = 1 AND u.uid = 1)) AS sum_cnt

Я его установил на «Италия по-русски», разница чувствуется.

Аватар пользователя Ainur Ainur 23 сентября 2007 в 20:58

Есть одно но, если смотреть «мои сообщения» то автор всех тем становишься ты, исчезает пэйджер. Но я не уточнил что я ставил этот патч на 4.7, а он для 5.0

Аватар пользователя Valeratal Valeratal 24 сентября 2007 в 21:22

поставил
авторы корректно отображаются
вроде стало быстрее, но мне сложно сравнивать
НО я верю друпальцам Smile

Аватар пользователя Ainur Ainur 26 сентября 2007 в 15:54

Отлично, значит патч не совместим с 4.7, я просто структуры баз данных не сравнивал и на пятую версию не ставил его (интересно почему?), чтоб понять это.