Добрый день!
Возник вопрос, есть ли общие темы по тому, как стоит или не стоит строить запросы во views дабы достичь максимальной производительности?
Например, у меня есть несколько типов материалов, но я знаю, что привязка к словарю таксономии есть только в одном из них.
Есть ли смысл в фильтрах ставить тип материала, или только создать фильтр на проверку наличия термина?
Ну и прочие такие вопросы...
Комментарии
включаете показ времени выполнения запроса и смотрите
тогда как-то так, для начала:
https://www.google.com/search?q=профилирование+drupal
Спасибо большое за наводку, не знал про XHProf. У меня сейчас просто проблема на сайте с превышением у хостера MySQL Bandwidth.
У меня XHProf рисует такой график, http://itmages.ru/image/view/1294413/6252e737
не подскажите, куда копать? Сильно ли все плохо? (это главная страница)
а вы с юмором)
В смысле? Не понять по графику?
зысыз намбвас нипанять....
гляжу - найден и осваивается инструментарий по профилировке,
значит понимание - что происходит растет.
так-же, банально советую применять дефолтный хромовский инструмент для вебмастеров: Shift Ctrl i на интересующей странице.
незачем бегать с кардиограммами по площади,
тут или лечиться, или лечить.
при малых объемах данных может не сработать, т.к. "кривые" запросы обычно проявляют свою кривизну именно с ростом числа записей в БД, некоторые при 100 записей отрабатывают несколько секунд, а другие и при миллиардах выполняются за пару миллисекунд, но проблема в том, что при 10 записях работать они будут одинаково, как вариант - сгенерировать много много всякого с помощью того же devel и потом уже смотреть, что получится.
когда как, в зависимости от того, что у Вас творится в БД и что из себя представляет сам запрос, то есть - в некоторых случаях она значительно ускорит выборку, чаще всего даст небольшой, еле заметный прирост в производительности, иногда не даст ничего, а в редких случаях способна наоборот заметно затормозить выборку.
Это главная проблема друпала в целом.
не наглядно. в виде таблицы удобнее смотреть.
http://gazeta-petrozavodsk.ru/xhprof/index.php?run=5270b1b202c03&source=...
Буду рад любым замечаниям.
П.С. Хостинг патруль.
а сколько у вас модулей установлено?
Вот список модулей, всего 50
content
filefield
imagefield
nodereference
nodereference_url
number
optionwidgets
relevant_content_cck
text
blog
book
locale
menu
path
php
poll
taxonomy
trigger
update
upload
block
filter
node
system
user
devel
image
image_attach
imageapi
imageapi_gd
imagecache
imagecache_ui
scroll_to_top
captcha
wysiwyg
views_litepager
views
views_rss
views_ui
fivestar
votingapi
arcal
disqus
insert
lightbox2
pathauto
relevant_content
token
tvi
yandexnews
активно используется?
Нет, только для блока с рекламой SAPE.
Пробовал отключать его (модуль PHP) ситуация не менялась.
включите в devel'е query log и сделайте скриншот "тяжелых" запросов
http://itmages.ru/image/view/1297018/be149e96
Кэш включен.
а что у вас там за count'ы?
всю ленту новостей не стоит на главной выводить, имхо
Честно говоря не пойму откуда берутся count, в Вьювсе такой запрос
SELECT node.nid AS nid, node.created AS node_created, node_data_field_annotation.field_annotation_value AS node_data_field_annotation_field_annotation_value, node_data_field_annotation.field_annotation_format AS node_data_field_annotation_field_annotation_format, node.type AS node_type, node.vid AS node_vid FROM node node LEFT JOIN content_type_news node_data_field_annotation ON node.vid = node_data_field_annotation.vid WHERE (node.vid IN ( SELECT tn.vid FROM term_node tn WHERE tn.tid = 52 )) AND (node.type in ('news')) ORDER BY node_created DESC
это пэйджер скорее всего считает. отключите его и посмотрите скорость загрузки страницы
Отключил пэйджер, все равно запрос остался.
SELECT COUNT(*) FROM (SELECT node.nid AS nid FROM node node LEFT JOIN content_type_news node_data_field_annotation ON node.vid = node_data_field_annotation.vid WHERE (node.vid IN ( SELECT tn.vid FROM term_node tn WHERE tn.tid = 52 )) AND (node.type in ('news')) ) count_alias
Скорость загрузки и кол-во запросов не поменялось особо.
ищите где генерится
Нашел COUNT сидел во вьювс в виде ссылки "ЕЩЕ"
Теперь рейтинг запросов такой
http://itmages.ru/image/view/1297270/ba483896
Напрягает огромное количество taxonomy_node_get_terms
меня тоже. найдите где они в таком количестве вызываются
Все что я понял, так это то, что выводятся taxonomy_node_get_terms связянные с материалами на вьювсах, т.е. на главной лента новостей, я сравнил, все taxonomy_node_get_terms связаны с материалами в этой ленте. И не только, на странице помимо ленты есть еще вьювсы и также вызывается taxonomy_node_get_terms.
Убрал все блоки с главной страницы, все равно вылазит куча taxonomy_node_get_terms, уже становится интересно!
у Вас там вьюха с выводом в виде сущностей?
Возможно не так понял, но у меня в представлениях стоит "Стиль строки: Поля" а не "материал"
Похоже начал догонять, когда переключил на другую тему, все эти документы появились, так понимаю из-за галочки "Отображать на главной", но я не понимаю, в моей теме создан page-front.tpl.php где я определил свою области блоков, и вывожу в них вьювсы. Откуда появляются тогда эти taxonomy_node_get_terms? Получаются откуда то лезут...
Не может ли быть это связано с кривой темой? Куда копать не знаю.
taxonomy_node_get_terms вызывается при загрузке ноды с терминами. Соль в том, что хоть и кажется, что это работает медленно, но, если попытаться получить список терминов у всех нод разом единым запросом, то практически любой сервер склеит ласты даже при небольшом числе нод и терминов, а так, 100 нод на странице = 100 вызовов taxonomy_node_get_terms, причем в этом случае совершенно неважно, сколько вообще записей в БД.
вполне, в файлы шаблонов можно напихать чего угодно, в прочем, как и в template.php, если тему делал кто-то странный, то в каком-нибудь шаблоне вполне можно будет обнаружить что-то вроде node_load
на главной я насчитал 5 вьюшек. после того, как проверите шаблоны в теме на вшивость, нужно будет посмотреть вьюшки.
но одного я не понимаю, зачем 1500 новостей выводить на главной, пусть даже пейджер работает через аякс.
Я блоки вьювсов убирал с главной страницы, все равно вылазят taxonomy_node_get_terms, думаю дело не в вьювсах.
А пейджер с 1500 новостями не моя прихоть, а редактора сайта и руководства, им так легче смотреть старые материалы. Если подскажите более здравое решение как листать и искать старые новости буду очень благодарен.
сделайте им отдельную страницу. а на главной выведите 8 новостей и внизу ссылку на все новости