Как только в админке ставлю выводить на главной статьи (даже если в настройках статей ставлю выводить не больше 10 штук) — тут же по данным tools.pingdom.com
сайт начинает загружаться от 5 и до 11 секунд
без вывода компонента — загружается 1.8 секунды
Возможно ли внедрить какое-то кэширование?
очень медленно работает движок
Включите в админке отладку (Настройки — отладка).
Потом внизу ткнитесь в цифру SQL.
Там время выполнения запросов к базе отображается. Гляньте, какой там запрос самый долгий.
FROM cms_content con
INNER JOIN cms_category cat ON cat.id = con.category_id AND cat.NSLeft >= '6' AND cat.NSRight <= '7'
WHERE con.published = 1 AND con.is_arhive = 0
Запрос занял 0.63732 с.
SELECT 1
FROM cms_content con
INNER JOIN cms_category cat ON cat.id = con.category_id
WHERE con.is_arhive = 0
AND (cat.NSLeft >= '1' AND cat.NSRight <= '100' AND cat.parent_id > 0)
AND (con.published = 1 AND con.pubdate <= '2017-01-04 13:35:59'
AND (con.is_end=0 OR (con.is_end=1 AND con.enddate >= '2017-01-04 13:35:59')))
Запрос занял 0.10058 с.
SELECT con.*,
cat.title as cat_title, cat.seolink as catseolink,
cat.showdesc,
u.nickname as author,
u.login as user_login
FROM cms_content con
INNER JOIN cms_category cat ON cat.id = con.category_id
LEFT JOIN cms_users u ON u.id = con.user_id
WHERE con.is_arhive = 0
AND (cat.NSLeft >= '1' AND cat.NSRight <= '100' AND cat.parent_id > 0)
AND (con.published = 1 AND con.pubdate <= '2017-01-04 13:35:59'
AND (con.is_end=0 OR (con.is_end=1 AND con.enddate >= '2017-01-04 13:35:59')))
ORDER BY pubdate DESC
LIMIT 0, 10
Запрос занял 1.86591 с.
Все остальные запросы заняли от 0.0002с и до 0,00100 с.
Можете запрос скопировать и воткнуть в phpmyadmin увидите сколько обрабатывается и как тяжко все это.
Это так всегда было из-за того, что запрос не по id последним 10 штукам, а сразу в трех таблицах
Вот запрос из четырех таблиц, причем в каждой больше тысячи строк, а в cms_anec_quests — больше 85000.
/components/anec/frontend.php => anec() SELECT q.*, c.title cat_title, c.id cid, u.login, u.nickname, r.item_id rid FROM cms_anec_quests q LEFT JOIN cms_ratings r ON r.target = 'quest' AND r.item_id = q.id AND r.user_id = 86 LEFT JOIN cms_anec_cats c ON c.id = q.category_id LEFT JOIN cms_users u ON u.id = q.user_id WHERE q.published = 1 ORDER BY q.id DESC LIMIT 0, 40 Запрос занял 0.03168 с.
Кэширование надо обязательно как-то настроить.
Да хоть на час, уже движку легче будет.поставьте кэш на сутки
AND (con.published = 1 AND con.pubdate <= '2017-01-04 13:35:59'
AND (con.is_end=0 OR (con.is_end=1 AND con.enddate >= '2017-01-04 13:35:59')))
Может на pubdate и enddate индекс поставить? По любому быстрее будет.
пока он сам запрос не перепроверит и таблицы не оптимизирует облегчения не стоит ждать.Может на pubdate и enddate индекс поставить? По любому быстрее будет.
Причем если у вас статей более 1000 штук...
36к статей
то без memcahce и еже сними будет туго вам.
Ставил memcached — он грузил очень сильно систему. Посещаемость ресурса около 1500 человек в день. При такой нагрузке mem… как-то совсем бесполезен. Он висит в памяти, и грузит систему.
с включением mem, а у меня php Версии 5.3
главная с отключенными компонентами по данным tools pingdom — 0.8 секунды (отдача самой страницы, без JS и т.п.)
с включенным mem на это уходит 1.3 сек.
Как часто добавляются статьи? поставьте кэш на сутки, ночью можно по крону делать запрос страницы, чтоб кэш обновлялся когда никого нет на сайте.
Статьи, форум, объявления, комментарии — по 25-30 в день
тяжко… согласен
Вот запрос из четырех таблиц, причем в каждой больше тысячи строк, а в cms_anec_quests — больше 85000.
Что-то у топикстартера не так.
Кэширование надо обязательно как-то настроить.
Может на pubdate и enddate индекс поставить? По любому быстрее будет.
SELECT con.*,
cat.title as cat_title, cat.seolink as catseolink,
cat.showdesc,
u.nickname as author,
u.login as user_login
FROM cms_content con
INNER JOIN cms_category cat ON cat.id = con.category_id
LEFT JOIN cms_users u ON u.id = con.user_id
WHERE con.is_arhive = 0
AND (cat.NSLeft >= '1' AND cat.NSRight <= '100' AND cat.parent_id > 0)
AND (con.published = 1 AND con.pubdate <= '2017-01-04 18:47:11'
AND (con.is_end=0 OR (con.is_end=1 AND con.enddate >= '2017-01-04 18:47:11')))
ORDER BY pubdate DESC
LIMIT 0, 10
Запрос обращается к этим таблицам (те, что сейчас на сервере стоят):
`id` int(11) NOT NULL AUTO_INCREMENT,
`category_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL DEFAULT '1',
`pubdate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`enddate` date NOT NULL,
`is_end` int(11) NOT NULL,
`title` varchar(200) NOT NULL,
`description` text NOT NULL,
`content` mediumtext,
`published` int(11) NOT NULL DEFAULT '1',
`is_favorite` int(1) NOT NULL DEFAULT '0',
`hits` int(11) NOT NULL DEFAULT '0',
`rating` int(11) NOT NULL DEFAULT '0',
`meta_desc` mediumtext NOT NULL,
`meta_keys` mediumtext NOT NULL,
`showtitle` int(11) NOT NULL DEFAULT '1',
`showdate` int(11) NOT NULL DEFAULT '1',
`showlatest` int(11) NOT NULL DEFAULT '1',
`showpath` int(11) NOT NULL DEFAULT '1',
`ordering` int(1) NOT NULL,
`comments` int(11) NOT NULL DEFAULT '1',
`is_arhive` int(11) NOT NULL,
`seolink` varchar(200) NOT NULL,
`canrate` int(11) NOT NULL DEFAULT '1',
`pagetitle` varchar(255) NOT NULL,
`url` varchar(100) NOT NULL,
`tpl` varchar(50) NOT NULL DEFAULT 'com_content_read.tpl',
`parse` varchar(500) NOT NULL,
`images` text,
PRIMARY KEY (`id`),
KEY `category_id` (`category_id`),
KEY `user_id` (`user_id`),
KEY `seolink` (`seolink`),
FULLTEXT KEY `title` (`title`),
FULLTEXT KEY `content` (`content`)
) ENGINE=MyISAM AUTO_INCREMENT=23405 DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED;
/*!40101 SET character_set_client = @saved_cs_client */;
`id` int(11) NOT NULL AUTO_INCREMENT,
`parent_id` int(11) DEFAULT NULL,
`title` varchar(200) NOT NULL,
`description` text NOT NULL,
`published` tinyint(1) NOT NULL,
`showdate` tinyint(1) NOT NULL DEFAULT '1',
`showcomm` tinyint(1) NOT NULL DEFAULT '1',
`orderby` varchar(30) NOT NULL DEFAULT 'date',
`orderto` varchar(4) NOT NULL DEFAULT 'asc',
`modgrp_id` int(11) NOT NULL,
`NSLeft` int(11) NOT NULL,
`NSRight` int(11) NOT NULL,
`NSLevel` int(11) NOT NULL,
`NSDiffer` varchar(11) NOT NULL,
`NSIgnore` int(11) NOT NULL,
`ordering` int(11) NOT NULL,
`maxcols` int(11) NOT NULL DEFAULT '1',
`showtags` tinyint(1) NOT NULL DEFAULT '1',
`showrss` tinyint(1) NOT NULL DEFAULT '1',
`showdesc` tinyint(1) NOT NULL,
`is_public` tinyint(1) NOT NULL,
`photoalbum` text NOT NULL,
`seolink` varchar(200) NOT NULL,
`url` varchar(100) NOT NULL,
`tpl` varchar(50) NOT NULL DEFAULT 'com_content_view.tpl',
`cost` varchar(5) NOT NULL,
`metakeys` varchar(250) NOT NULL,
`metadesc` varchar(250) NOT NULL,
`categorytitle` varchar(100) NOT NULL,
`pagetitle` varchar(200) NOT NULL DEFAULT '',
`meta_keys` varchar(250) NOT NULL DEFAULT '',
`meta_desc` varchar(250) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
KEY `seolink` (`seolink`),
KEY `parent_id` (`parent_id`),
KEY `NSLeft` (`NSLeft`,`NSRight`)
) ENGINE=MyISAM AUTO_INCREMENT=129 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
`id` int(11) NOT NULL AUTO_INCREMENT,
`group_id` int(11) NOT NULL DEFAULT '1',
`login` varchar(100) NOT NULL,
`nickname` varchar(100) NOT NULL,
`password` varchar(100) NOT NULL,
`email` varchar(100) NOT NULL,
`phone` varchar(12) NOT NULL DEFAULT '',
`icq` varchar(15) NOT NULL,
`regdate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`logdate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`birthdate` date NOT NULL DEFAULT '0000-00-00',
`is_locked` int(11) NOT NULL,
`is_deleted` int(11) NOT NULL,
`is_logged_once` tinyint(4) NOT NULL DEFAULT '0',
`rating` int(11) NOT NULL,
`points` int(11) NOT NULL,
`video_count` int(11) NOT NULL,
`video_hits_count` int(11) unsigned NOT NULL DEFAULT '0',
`last_ip` varchar(15) NOT NULL,
`status` varchar(255) NOT NULL,
`status_date` datetime NOT NULL,
`invited_by` int(11) DEFAULT NULL,
`invdate` datetime DEFAULT NULL,
`balance` float NOT NULL DEFAULT '0',
`ref_id` int(11) NOT NULL DEFAULT '0',
`openid` varchar(250) DEFAULT NULL,
`poputi` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `login` (`login`),
KEY `openid` (`openid`),
KEY `email` (`email`),
KEY `birthdate` (`birthdate`),
KEY `group_id` (`group_id`),
KEY `invited_by` (`invited_by`)
) ENGINE=MyISAM AUTO_INCREMENT=1397 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
/*!40101 SET character_set_client = @saved_cs_client */;
может в них ключи не прописаны какие-нибудь?
Вы зря мне все эти таблицы выводите. У меня есть сайт на первой ветке.Вот вывод статей компонентом на главной:
/components/content/frontend.php => getArticlesList() SELECT con.*, con.pubdate AS fpubdate, cat.title AS cat_title, cat.seolink AS catseolink, cat.showdesc, u.nickname AS author, u.login AS user_login FROM cms_content con INNER JOIN cms_category cat ON cat.id = con.category_id LEFT JOIN cms_users u ON u.id = con.user_id WHERE con.is_arhive = 0 AND (con.category_id = '6') AND (con.published = 1 AND con.pubdate <= '2017-01-04 20:26:06' AND (con.is_end=0 OR (con.is_end=1 AND con.enddate >= '2017-01-04 20:26:06'))) ORDER BY pubdate ASC LIMIT 0, 100 Запрос занял 0.00035 с.
Если честно, мне вообще непонятно, как выборка статей может так долго длиться.
Такое ощущение, что проблема с хостингом.
Я бы рекомендовал скачать базу данных на комп, развернуть локальный сайт на каком-нибудь денвере\опенсервере, подключить к тому сайту эту базу данных и посмотреть, как оно будет работать на локальном.
А выкладывал для того, чтобы участники дискуссии проверили, если не затруднит, все у меня выставлены ключи в этих таблицах правильно
или нет
cms_content Показать
cms_category Показать
cms_users
правильно ключи стоят?
в некоторых случаях запрос занимает до 11 секунд!
SELECT con.*,
cat.title as cat_title, cat.seolink as catseolink,
cat.showdesc,
u.nickname as author,
u.login as user_login
FROM cms_content con
INNER JOIN cms_category cat ON cat.id = con.category_id
LEFT JOIN cms_users u ON u.id = con.user_id
WHERE con.is_arhive = 0
AND (cat.NSLeft >= '1' AND cat.NSRight <= '100' AND cat.parent_id > 0)
AND (con.published = 1 AND con.pubdate <= '2017-01-05 00:27:58'
AND (con.is_end=0 OR (con.is_end=1 AND con.enddate >= '2017-01-05 00:27:58')))
ORDER BY pubdate DESC
LIMIT 0, 10
Запрос занял 11.37947 с.
у меня версия 1.10.7
действительно, когда убираешь "хак" позволяющий выводить все статьи из подкатегорий в родительской категории
то нагрузка падает, и компонент статьи очень шустро работает
вот этот хак: в компонентс/контент/фронтэнд.пхп
// Условия //$model->whereCatIs($cat['id']); $model->whereThisAndNestedCats($cat['NSLeft'], $cat['NSRight']);
но вот проблема —
это дает большую нагрузку на базу данных.
может можно KEY какой-нибудь, чтобы оптимизировать скорость?
ALTER TABLE `cms_category` ADD INDEX ( `parent_id` , `NSLeft` , `NSRight` ) ;