Долгие запросы MySql

InstantCMS 2.X

Как бороться с задумчивостью мускула?

#31 5 марта 2018 в 08:55
@ivanpolyakov,
В robots.txt Crawl-delay: 100
#32 5 марта 2018 в 09:15

В robots.txt Crawl-delay: 100

Ris

С добрым утром! В гугле и недавно в яше это уже не работает.
#33 5 марта 2018 в 09:25

С добрым утром! В гугле и недавно в яше это уже не работает.

lokanaft
Утро доброе!
И как теперь с этим бороться?
Пока закрыл перелистывание комментариев
Disallow: /comments/all?page*
Но все равно надо что-то придумывать…
#34 6 марта 2018 в 05:39
Ris, по сути система кэширования должна помогать.
Метод кеширования выбрать файлы, поставить кэш на недельку, запустить на кроне скриптик чтоб прошелся по всем страничкам с комментами и нагенерировал кэш файлы и посмотреть как яша быстро пройдется по сайту.
либо все же не жадничать и докупить ресурса на VPS руб за 500-700.
#35 6 марта 2018 в 09:40

поставить кэш на недельку

kirkr
Сейчас стоит 2 минуты. И то народ возмущается, почему посты на форуме с задержкой появляются.

не жадничать и докупить ресурса на VPS руб за 500-700.

kirkr
Не прикупить ли мне выделенный сервер для яндексовых упражнений? laugh
Пока нормально работает это решение:
instantcms.ru/forum/thread28414-2.html#284257
А дальше посмотрим, может что новое в голову придет или кто-нибудь что интересное предложит…
#36 6 марта 2018 в 09:57
У вас в подзапросе идёт выборка только по лимиту, а в основном вдруг ни с того ни с сего WHERE (i.is_deleted IS NULL) AND (i.is_approved = '1')
#37 6 марта 2018 в 10:03
lokanaft,
Это функция инстанта getComments().
Я только дорисовал подзапрос с выборкой ид по лимиту.
#38 6 марта 2018 в 10:52
Я об этом и говорю. Что подзапрос и должен заниматься фильтрацией — тогда это будет работать правильно.
#39 6 марта 2018 в 11:32

Что подзапрос и должен заниматься фильтрацией — тогда это будет работать правильно.

lokanaft
Так оно и работает правильно, когда с подзапросом:
  1. SELECT i.*, r.score AS is_rated, u.nickname AS user_nickname, u.avatar AS user_avatar
  2. FROM cms_comments i
  3. JOIN (SELECT id FROM cms_comments WHERE is_deleted IS NULL ORDER BY id DESC LIMIT 961880, 20 ) c ON c.id = i.id LEFT JOIN cms_users AS u ON u.id = i.user_id
  4. LEFT JOIN cms_comments_rating AS r ON r.comment_id = i.id AND r.user_id='86'
  5. WHERE (i.is_deleted IS NULL) AND (i.is_approved = '1')
  6. ORDER BY i.date_pub DESC
  7. LIMIT 20
  8. Время выполнения 1.07298 секунд
Проблема в том, что в mysql_slow_queries.log то и дело появляются долгие запросы, в которых почему-то подзапрос не срабатывает:
  1. # TIME: 180306 11:28:25
  2. # USER@Host: ******** @ localhost []
  3. # Thread_id: 115670 Schema: ***** QC_hit: No
  4. # Query_time: 31.944684 Lock_time: 0.000539 Rows_sent: 20 Rows_examined: 1853053
  5. SET TIMESTAMP=1520324905;
  6. SELECT i.*, r.score AS is_rated, u.nickname AS user_nickname, u.avatar AS user_avatar
  7. FROM cms_comments i
  8. LEFT JOIN cms_users AS u ON u.id = i.user_id
  9. LEFT JOIN cms_comments_rating AS r ON r.comment_id = i.id AND r.user_id='0'
  10. WHERE (i.is_private = '0') AND (i.is_deleted IS NULL) AND (i.is_approved = '1')
  11. ORDER BY i.date_pub DESC
  12. LIMIT 926580, 20;
#40 6 марта 2018 в 14:45

Так оно и работает правильно

Ris

Нет. Без фильтрации листов может быть больше. То есть на последнем листе с этим подзапросом на самом деле не последние записи, на некоторых листах будет меньше 20 записей, ладно хоть сортировка по ид совпадает с по дате.
#41 6 марта 2018 в 15:30
lokanaft,
Я давно уже дописал фильтрацию и в подзапрос. Это видно там в первом спойлере.
#42 6 марта 2018 в 16:33
Вот фильтрация в подзапросе
  1. JOIN (SELECT id FROM cms_comments WHERE is_deleted IS NULL AND is_approved = '1' ORDER BY id DESC LIMIT 961880, 20 ) c ON c.id = i.id
  2. LEFT JOIN cms_users AS u ON u.id = i.user_id
  3. LEFT JOIN cms_comments_rating AS r ON r.comment_id = i.id AND r.user_id='86'
  4. ORDER BY i.date_pub DESC
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.