Все медленные запросы, которые вы упомянули, включают wp_postmeta
.WP имеет очень неэффективную схему для этой таблицы.Я наметил несколько исправлений для этого в здесь .Если после улучшения этой схемы все еще остаются проблемы, мы можем обсудить дальнейшие действия.
Вы не можете отрегулировать выход из проблемы высокой загрузки ЦП.Однако есть один параметр, который слишком высок:
query_cache_size = 256M -- Change to 50M
Для удобства чтения вот один из медленных запросов:
SELECT wp_posts.ID
FROM wp_posts
LEFT JOIN wp_term_relationships
ON ( wp_posts.ID = wp_term_relationships.object_id)
INNER JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id )
INNER JOIN wp_postmeta AS mt1 ON ( om16_posts.ID = mt1.post_id )
WHERE 1=1
AND ( wp_term_relationships.term_taxonomy_id IN (19,37, 38,72) )
AND ( wp_postmeta.meta_key = '_thumbnail_id'
AND ( mt1.meta_key = 'exibir_menu'
AND mt1.meta_value = '1' )
)
AND wp_posts.post_type = 'post'
AND ((wp_posts.post_status = 'publish'))
GROUP BY wp_posts.ID
ORDER BY wp_posts.post_date DESC
LIMIT 0, 7
Пожалуйста, используйте -s t
при использованииmysqldump
.
Приложения
Учитывая это:
CREATE TABLE `om16_postmeta` (
`meta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`post_id` bigint(20) unsigned NOT NULL DEFAULT '0',
`meta_key` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`meta_value` longtext COLLATE utf8_unicode_ci,
PRIMARY KEY (`meta_id`),
KEY `post_id` (`post_id`),
KEY `idx_meta_key` (`meta_key`(50)),
KEY `meta_key` (`meta_key`(191))
Это может дать вам наибольшую выгоду с наименьшими усилиями:
ALTER TABLE om16_postmeta
DROP PRIMARY KEY,
DROP INDEX post_id,
ADD PRIMARY KEY(post_id, meta_key), -- much better for queries
ADD INDEX(meta_id), -- sufficient for AUTO_INCREMENT
DROP INDEX idx_meta_key, -- prefix indexing unnecessary an inefficient
DROP INDEX meta_key,
ADD INDEX(meta_key);
Внимание: выполнение ALTER
займет некоторое время;таблица будет заблокирована.
Если это ALTER
приводит к «Дублирующему ключу», очевидно, у вас есть один и тот же «ключ» несколько раз для данного «поста».Либо
- Ошибка ввода данных.В этом случае данные должны быть очищены.Или ...
- У вас есть намеренный мета-ключ.В этом случае измените строку PK на
ADD PRIMARY KEY(post_id, meta_key, meta_id),
.