Медленные MySQL Queries (Wordpress) - PullRequest
       7

Медленные MySQL Queries (Wordpress)

0 голосов
/ 08 декабря 2011

Мой веб-хост заблокировал мой аккаунт из-за перегрузки mysql, вызванной моим блогом. Они попросили меня изучить медленные запросы и исправить проблему, «проиндексировав» их, но я не совсем понимаю, что мне здесь делать:

# Query_time: 1.116245  Lock_time: 0.000202 Rows_sent: 10  Rows_examined: 3486
use mydbname
select tag, t.tag_id, count(p2t.post_id) as count, ((count(p2t.post_id)/1070)*100) as weight, ((count(p2t.post_id)/109)*100) as relativeweight
  from wp_tags t inner join wp_post2tag p2t on t.tag_id = p2t.tag_id
  inner join wp_posts p on p2t.post_id = p.ID
  WHERE post_date_gmt < '2011-12-06 09:00:01'
  AND (post_type = 'post')
  group by t.tag
  order by weight desc
  LIMIT 10

# Tue Dec  6 02:00:08 2011
# Query_time: 6.926785  Lock_time: 1.731793 Rows_sent: 10  Rows_examined: 3486
use mydbname
select tag, t.tag_id, count(p2t.post_id) as count, ((count(p2t.post_id)/1070)*100) as weight, ((count(p2t.post_id)/109)*100) as relativeweight
  from wp_tags t inner join wp_post2tag p2t on t.tag_id = p2t.tag_id
  inner join wp_posts p on p2t.post_id = p.ID
  WHERE post_date_gmt < '2011-12-06 09:00:01'
  AND (post_type = 'post')
  group by t.tag
  order by weight desc
  LIMIT 10

Буду признателен за любую помощь.

Спасибо!

Ответы [ 4 ]

3 голосов
/ 08 декабря 2011

Прежде чем делать что-либо еще, обновитесь до последней версии WordPress и импортируйте структуры тегов UTW во встроенную терминологическую архитектуру WordPress;если вы обновитесь до WP 3.x перед импортом, вам нужно будет использовать плагин для импорта, например , этот .Это все еще не самый эффективный sql, который я когда-либо видел, но он чище, чем UTW-тег sql, который не был внутренним для WordPress.

Я бы в целом согласился с точкой зрения @ Nameless # 1, за исключением того, что, посколькувы видите, что эти запросы вызывают проблемы в вашем блоге. Я полагаю, что вы используете функциональность тегов UTW, и вам нужно будет перенести структуру тегов из UTW в собственные условия WordPress, прежде чем вы сможете деактивировать UTW, иначе вы, скорее всего,потерять функции, на которые вы полагаетесь.

Если у вас нет других, не связанных с UTW, проблем с MySQL, я бы не советовал пытаться перейти на InnoDB;если у вас не очень высокий трафик, я не думаю, что выигрыш от переключения типов таблиц будет стоить этого.

1 голос
/ 08 декабря 2011

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

Но есть одна или две вещи, которые вы можете сделать.

  1. Проблемные запросы содержат таблицу wp_post2tag, которая относится не к самому wordpress, а к плагину Ultimate Tag Warrior.Может быть, удаление или отключение этого плагина может помочь.
  2. Вы можете попробовать обновить WordPress и все плагины до последней версии, возможно, проблема уже решена.
  3. По умолчанию WP использует не столь оптимальные, ноДоступны везде таблицы MyISAM.Вы можете попробовать перенести вашу базу данных в таблицы InnoDB.Но я бы не советовал делать это, если у вас нет сильного контроля над тем, как работает mysql.
0 голосов
/ 11 мая 2017
wp_posts:  INDEX(post_type, post_date_gmt)  -- in this order
wp_post2tag:  INDEX(post_id, tag_id)        -- in this order

И удалите все ссылки на wp_tags и измените GROUP BY t.tag GROUP BY p2t.tag_id, что будет иметь тот же эффект, но будет быстрее.

Между тем, вычисления неверны, поскольку JOINs произойдет до того, как COUNT() будет сделано.Таким образом, число, вероятно, сильно завышено.

Если вы хотите больше обсуждений, предоставьте SHOW CREATE TABLE и EXPLAIN SELECT ....

0 голосов
/ 08 декабря 2011

Вам нужно использовать EXPLAIN, чтобы увидеть план вашего запроса, и он покажет вам, что можно оптимизировать.Я подозреваю, что проблема связана с групповыми и заказными деталями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...