CMS DataLife Engine - Система управления сайтами

Sign in to follow this  
saigontov

Повышенная нагрузка на сервер баз данных

Recommended Posts

Добрый день! Сайт: alcoexpert (dot) ru, версия DLE 13.2

Хостер одолел сообщениями о повышенной нагрузке на сервер баз данных:

Вас приветствует компания .masterhost!

Уведомляем Вас, что работой базы данных MySQL uXXXXXX создается повышенная нагрузка на сервер баз данных. Примеры запросов находятся в прикрепленном файле.

Оптимизируйте, пожалуйста, Ваши скрипты, SQL-запросы и дайте нам знать о результатах.  Например, Вы можете использовать метод EXPLAIN для выяснения "тяжелых" запросов и создание индексов (CREATE INDEX), тем самым снизив нагрузку на базу данных:
* http://masterhost.ru/support/faq/technical/mysql-optimization/

Обращаем Ваше внимание, что при сохранении нагрузки, мы будем вынуждены заблокировать
услугу MySQL.

 

 

Информация из прикрепленного хостером файла: 

SET timestamp=1578650391;
SELECT p.id, p.autor, p.date, p.short_story, CHAR_LENGTH(p.full_story) as full_story, p.xfields, p.title, p.category, p.alt_name, p.comm_num, p.allow_comm, p.fixed, p.tags, e.news_read, e.allow_rate, e.rating, e.vote_num, e.votes, e.view_edit, e.editdate, e.editor, e.reason FROM dle_post p INNER JOIN (SELECT DISTINCT(dle_post_extras_cats.news_id) FROM dle_post_extras_cats WHERE cat_id IN ('2')) c ON (p.id=c.news_id) LEFT JOIN dle_post_extras e ON (p.id=e.news_id) WHERE date < '2020-01-10 12:59:31' AND approve=1 ORDER BY fixed DESC, date DESC LIMIT 0,4;

SET timestamp=1578650391;
SELECT p.id, p.autor, p.date, p.short_story, CHAR_LENGTH(p.full_story) as full_story, p.xfields, p.title, p.category, p.alt_name, p.comm_num, p.allow_comm, p.fixed, p.tags, e.news_read, e.allow_rate, e.rating, e.vote_num, e.votes, e.view_edit, e.editdate, e.editor, e.reason FROM dle_post p INNER JOIN (SELECT DISTINCT(dle_post_extras_cats.news_id) FROM dle_post_extras_cats WHERE cat_id IN ('2')) c ON (p.id=c.news_id) LEFT JOIN dle_post_extras e ON (p.id=e.news_id) WHERE date < '2020-01-10 12:59:33' AND approve=1 ORDER BY fixed DESC, date DESC LIMIT 0,4;

SET timestamp=1578650391;
SELECT p.id, p.autor, p.date, p.short_story, CHAR_LENGTH(p.full_story) as full_story, p.xfields, p.title, p.category, p.alt_name, p.comm_num, p.allow_comm, p.fixed, p.tags, e.news_read, e.allow_rate, e.rating, e.vote_num, e.votes, e.view_edit, e.editdate, e.editor, e.reason FROM dle_post p INNER JOIN (SELECT DISTINCT(dle_post_extras_cats.news_id) FROM dle_post_extras_cats WHERE cat_id IN ('2')) c ON (p.id=c.news_id) LEFT JOIN dle_post_extras e ON (p.id=e.news_id) WHERE date < '2020-01-10 12:59:34' AND approve=1 ORDER BY fixed DESC, date DESC LIMIT 0,4;

SET timestamp=1578650391;
SELECT p.id, p.autor, p.date, p.short_story, CHAR_LENGTH(p.full_story) as full_story, p.xfields, p.title, p.category, p.alt_name, p.comm_num, p.allow_comm, p.fixed, p.tags, e.news_read, e.allow_rate, e.rating, e.vote_num, e.votes, e.view_edit, e.editdate, e.editor, e.reason FROM dle_post p INNER JOIN (SELECT DISTINCT(dle_post_extras_cats.news_id) FROM dle_post_extras_cats WHERE cat_id IN ('2')) c ON (p.id=c.news_id) LEFT JOIN dle_post_extras e ON (p.id=e.news_id) WHERE date < '2020-01-10 12:59:23' AND approve=1 ORDER BY fixed DESC, date DESC LIMIT 0,4;

SET timestamp=1578650391;
SELECT p.id, p.autor, p.date, p.short_story, CHAR_LENGTH(p.full_story) as full_story, p.xfields, p.title, p.category, p.alt_name, p.comm_num, p.allow_comm, p.fixed, p.tags, e.news_read, e.allow_rate, e.rating, e.vote_num, e.votes, e.view_edit, e.editdate, e.editor, e.reason FROM dle_post p INNER JOIN (SELECT DISTINCT(dle_post_extras_cats.news_id) FROM dle_post_extras_cats WHERE cat_id IN ('2')) c ON (p.id=c.news_id) LEFT JOIN dle_post_extras e ON (p.id=e.news_id) WHERE date < '2020-01-10 12:59:24' AND approve=1 ORDER BY fixed DESC, date DESC LIMIT 0,4;

SET timestamp=1578650391;
SELECT p.id, p.autor, p.date, p.short_story, CHAR_LENGTH(p.full_story) as full_story, p.xfields, p.title, p.category, p.alt_name, p.comm_num, p.allow_comm, p.fixed, p.tags, e.news_read, e.allow_rate, e.rating, e.vote_num, e.votes, e.view_edit, e.editdate, e.editor, e.reason FROM dle_post p INNER JOIN (SELECT DISTINCT(dle_post_extras_cats.news_id) FROM dle_post_extras_cats WHERE cat_id IN ('2')) c ON (p.id=c.news_id) LEFT JOIN dle_post_extras e ON (p.id=e.news_id) WHERE date < '2020-01-10 12:59:24' AND approve=1 ORDER BY fixed DESC, date DESC LIMIT 0,4;

SET timestamp=1578650391;
SELECT p.id, p.autor, p.date, p.short_story, CHAR_LENGTH(p.full_story) as full_story, p.xfields, p.title, p.category, p.alt_name, p.comm_num, p.allow_comm, p.fixed, p.tags, e.news_read, e.allow_rate, e.rating, e.vote_num, e.votes, e.view_edit, e.editdate, e.editor, e.reason FROM dle_post p INNER JOIN (SELECT DISTINCT(dle_post_extras_cats.news_id) FROM dle_post_extras_cats WHERE cat_id IN ('2')) c ON (p.id=c.news_id) LEFT JOIN dle_post_extras e ON (p.id=e.news_id) WHERE date < '2020-01-10 12:59:24' AND approve=1 ORDER BY fixed DESC, date DESC LIMIT 0,4;

SET timestamp=1578650391;
SELECT p.id, p.autor, p.date, p.short_story, CHAR_LENGTH(p.full_story) as full_story, p.xfields, p.title, p.category, p.alt_name, p.comm_num, p.allow_comm, p.fixed, p.tags, e.news_read, e.allow_rate, e.rating, e.vote_num, e.votes, e.view_edit, e.editdate, e.editor, e.reason FROM dle_post p INNER JOIN (SELECT DISTINCT(dle_post_extras_cats.news_id) FROM dle_post_extras_cats WHERE cat_id IN ('2')) c ON (p.id=c.news_id) LEFT JOIN dle_post_extras e ON (p.id=e.news_id) WHERE date < '2020-01-10 12:59:24' AND approve=1 ORDER BY fixed DESC, date DESC LIMIT 0,4;

SET timestamp=1578650391;
SELECT p.id, p.autor, p.date, p.short_story, CHAR_LENGTH(p.full_story) as full_story, p.xfields, p.title, p.category, p.alt_name, p.comm_num, p.allow_comm, p.fixed, p.tags, e.news_read, e.allow_rate, e.rating, e.vote_num, e.votes, e.view_edit, e.editdate, e.editor, e.reason FROM dle_post p INNER JOIN (SELECT DISTINCT(dle_post_extras_cats.news_id) FROM dle_post_extras_cats WHERE cat_id IN ('2')) c ON (p.id=c.news_id) LEFT JOIN dle_post_extras e ON (p.id=e.news_id) WHERE date < '2020-01-10 12:59:24' AND approve=1 ORDER BY fixed DESC, date DESC LIMIT 0,4;

SET timestamp=1578650391;
SELECT p.id, p.autor, p.date, p.short_story, CHAR_LENGTH(p.full_story) as full_story, p.xfields, p.title, p.category, p.alt_name, p.comm_num, p.allow_comm, p.fixed, p.tags, e.news_read, e.allow_rate, e.rating, e.vote_num, e.votes, e.view_edit, e.editdate, e.editor, e.reason FROM dle_post p INNER JOIN (SELECT DISTINCT(dle_post_extras_cats.news_id) FROM dle_post_extras_cats WHERE cat_id IN ('2')) c ON (p.id=c.news_id) LEFT JOIN dle_post_extras e ON (p.id=e.news_id) WHERE date < '2020-01-10 12:59:24' AND approve=1 ORDER BY fixed DESC, date DESC LIMIT 0,4;

 

 

 

Я далеко не силен по части SQL и потому не могу сообразить, каким образом снизить нагрузку на базу данных. 

Может есть с ходу какой-то вариант? В какую сторону разбирать проблему? 

 

Из предполагаемых причин рассматриваю следующие:

  • На главной странице сайта действительно много конструкций с функцией { custom category= ... } для вывода превью новостей из разных категорий с разным внешним видом, но строго говоря, раньше я никогда не получал претензий от других хостеров используя такие конструкции
  • Основные 10 категорий новостей являются дочерними категории с ID=2 (на сколько я понимаю именно она фигурирует в SQL запросах?) . При этом, мы почти не используем саму категорию ID=2 при добавлении новости. Может категории вынести из под родительской?
  • На сайте 42 000+ новостей. При обращении запроса обрабатывается вся база? 
  • Может у хостера стоят относительно низкие пороги? 

 

Подскажите пожалуйста, что думаете на этот счет? 

Share this post


Link to post
Share on other sites

Кастомы кэшированы?

 

Share this post


Link to post
Share on other sites
10 часов назад, saigontov сказал:

каким образом снизить нагрузку на базу данных. 

В самих запросах никаким. Они простые. Поэтому либо смена хостинга, либо уменьшение custom. Я бы сменил хостинг. При условии что на сайт вообще нет DDOS по какому то адресу например по адресу категории.

 

10 часов назад, saigontov сказал:

Основные 10 категорий новостей являются дочерними категории с ID=2 (на сколько я понимаю именно она фигурирует в SQL запросах?) . При этом, мы почти не используем саму категорию ID=2 при добавлении новости. Может категории вынести из под родительской?

Не играет никакой роли родительская или дочерняя выборка идет по ID, т.е. выборка идет с запросов именно только из категории 2, смотрите в шаблонах, где вы осуществляете показ из ее категори. Или например идет много обращений по адресу просмотра самой категории, это логи сервера нужно смотреть.

 

10 часов назад, saigontov сказал:

На сайте 42 000+ новостей. При обращении запроса обрабатывается вся база? 

Что вы имеете ввиду? При любом SQL идет обработка всех базы. Всегда и независимо от запроса. А вот по критериям в запросе отдается уже то что нужно. Но чтобы найти нужное нужно осмотреть всю базу, для этого и существуют например ключи БД, чтобы сделать это быстро. Ваш запрос простой и ключи точно есть для этих полей, упростить его по сути нельзя.

10 часов назад, saigontov сказал:

Может у хостера стоят относительно низкие пороги? 

Вполне может быть. От тарифа вашего зависит. Узнавайте лимиты и пороги для каждого тарифного плана у хостинга.

Share this post


Link to post
Share on other sites
В 11.01.2020 в 01:10, celsoft сказал:

Не играет никакой роли родительская или дочерняя выборка идет по ID, т.е. выборка идет с запросов именно только из категории 2, смотрите в шаблонах, где вы осуществляете показ из ее категори. Или например идет много обращений по адресу просмотра самой категории, это логи сервера нужно смотреть.

@celsoft, спасибо за развернутые ответы. Должен извиниться, я немного ошибся! Все же при добавлении новостей на сайте, Редактор отмечает несколько категорий: (например ID=5 и ID=2 в качестве второстепенной) и так во многих новостях.

 

Посмотрел базы: с начала по конец 2019 года к категории ID=2 присвоено 2600+ новостей (вроде не так много). 

А вот посмотрев логи за вчера ужаснулся:  так или иначе в 60 000 из 130 000 строк фигурирует категория ID=2 . 

 

Какие вижу причины: 

  • Наверное не нужно редактору ставить категорию ID=2 в качестве второстепенной, если она и так является материнской для (например той же) категории ID=5, куда и рассчитана новость. 
  • За этот вариант меня не ругайте сильно, но есть ли разница при последовательном порядке выбора категории во время добавления новости?
    Например если мы выбираем в порядке [2,5] то новость сначала присваивается к категории 2, как к основной?
    А если выбираем [5,2] то новость присваивается к категории 5, как к основной? 
    Просто мне помнится, я где-то с этим уже сталкивался.

@celsoft, подскажите, есть ли в этом логика?

 

В 11.01.2020 в 01:10, celsoft сказал:

Не играет никакой роли родительская или дочерняя выборка идет по ID, т.е. выборка идет с запросов именно только из категории 2, смотрите в шаблонах, где вы осуществляете показ из ее категори. Или например идет много обращений по адресу просмотра самой категории, это логи сервера нужно смотреть.

 

Если один из двух верхних пунктов имеет значение, то все мои конструкции {custom} разумеется «дико давят» на базу.  При этом не так много обращений идет по адресу просмотра самой категории. Словом не так-то и много трафика на сайте (менее 1000 посетителей в сутки – это же смех), чтобы существенную нагрузку на страницу категории давать в моменте (даже в моменте).

 

В 11.01.2020 в 01:10, celsoft сказал:

Вполне может быть. От тарифа вашего зависит. Узнавайте лимиты и пороги для каждого тарифного плана у хостинга

Хостер не очень адекватный имхо, посредственно ведет себя в диалогах. 

Share this post


Link to post
Share on other sites
11 часов назад, saigontov сказал:
  • Наверное не нужно редактору ставить категорию ID=2 в качестве второстепенной, если она и так является материнской для (например той же) категории ID=5, куда и рассчитана новость. 
  • За этот вариант меня не ругайте сильно, но есть ли разница при последовательном порядке выбора категории во время добавления новости?
    Например если мы выбираем в порядке [2,5] то новость сначала присваивается к категории 2, как к основной?
    А если выбираем [5,2] то новость присваивается к категории 5, как к основной? 
    Просто мне помнится, я где-то с этим уже сталкивался.

Не имеет смысла, сохраняются всё равно в порядке возрастания ID.

Share this post


Link to post
Share on other sites
18 часов назад, saigontov сказал:

Наверное не нужно редактору ставить категорию ID=2 в качестве второстепенной, если она и так является материнской для (например той же) категории ID=5, куда и рассчитана новость. 

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

 

18 часов назад, saigontov сказал:

За этот вариант меня не ругайте сильно, но есть ли разница при последовательном порядке выбора категории во время добавления новости?
Например если мы выбираем в порядке [2,5] то новость сначала присваивается к категории 2, как к основной?
А если выбираем [5,2] то новость присваивается к категории 5, как к основной? 

Это напрямую зависит не от ID, а от порядка сортировки категорий в разделе управления категориями. В каком порядке вы их отсортируете, в том они и будут. Основной соответственно будет первая которая идет по этому списку.

 

18 часов назад, saigontov сказал:

Если один из двух верхних пунктов имеет значение, то все мои конструкции {custom} разумеется «дико давят» на базу.  При этом не так много обращений идет по адресу просмотра самой категории. Словом не так-то и много трафика на сайте (менее 1000 посетителей в сутки – это же смех), чтобы существенную нагрузку на страницу категории давать в моменте (даже в моменте).

Выборка идет независимо от того как и что добавили. Это не влияет на нагрузку. Влияет на нагрузку уже другие настройки. Например есть ли поддержка мультикатегорий, количество этих самых custom. и т.д. В админпанели есть раздел анализ производительности, он покажет вам все настройки которые влияют на нагрузку сайта. Все что вам не нужно обязательно отключите. От цвета зависит степень нагрузки, красное отключайте в первую очередь.

Share this post


Link to post
Share on other sites
20 часов назад, celsoft сказал:

Это напрямую зависит не от ID, а от порядка сортировки категорий в разделе управления категориями. В каком порядке вы их отсортируете, в том они и будут. Основной соответственно будет первая которая идет по этому списку.

Раньше же по ID в порядке возрастания они писались в колонку category?

Share this post


Link to post
Share on other sites
8 часов назад, mr. Freeman сказал:

Раньше же по ID в порядке возрастания они писались в колонку category?

Вы не знаете принципов работы DLE. Никогда и ни в одной версии подобного не было. Сортировка категорий всегда в DLE выставлялась в админпанели в разделе управления категориями. Начиная с самой первой версии DLE.

Share this post


Link to post
Share on other sites

Тоже сайт клиента был на masterhost и получал такие же сообщения. Сменили хостинг (на timeweb, не реклама), никаких сообщений не приходит больше.

Два года назад у masterhost даже memcache не было и let's encrypt не подключали(только платные SSL сертификаты), сейчас не знаю как. Бегите )

Edited by webair

Share this post


Link to post
Share on other sites
3 часа назад, celsoft сказал:

Вы не знаете принципов работы DLE. Никогда и ни в одной версии подобного не было. Сортировка категорий всегда в DLE выставлялась в админпанели в разделе управления категориями. Начиная с самой первой версии DLE.

Причём тут сортировка отображения категорий, если человек спрашивал про то как оно "внутри" DLE хранится при привязке новости к категориям?
На что я ответил что в колонку category выбранные категории попадают по ID в порядке возрастания.

2 часа назад, webair сказал:

Тоже сайт клиента был на masterhost и получал такие же сообщения. Сменили хостинг (на timeweb, не реклама), никаких сообщений не приходит больше.

Два года назад у masterhost даже memcache не было и let's encrypt не подключали(только платные SSL сертификаты), сейчас не знаю как. Бегите )

Ну да, побежим к тем кто не видит ничего такого, что одни их клиенты бомбят спамом других их клиентов, и считают такое в порядке вещей. Попутно забывают обновить свои сертификаты, по этому часто то один их сервис ляжет, то другой.
Анекдот про мышей и кактус слышали? Вот это про них в точности, по этому советовать их как пример качества и надёжности мягко говоря как то не очень, по уровню ничуть не лучше текучего хостера ТСа.

Share this post


Link to post
Share on other sites
19 часов назад, mr. Freeman сказал:

Причём тут сортировка отображения категорий, если человек спрашивал про то как оно "внутри" DLE хранится при привязке новости к категориям?
На что я ответил что в колонку category выбранные категории попадают по ID в порядке возрастания.

При том. К новости категории добавляются в том порядке, в котором они отсортированы. И ответили вы человеку в принципе неверно.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this