Em nosso log de consultas lentas do MySQL, a consulta cumulativamente mais lenta é uma atualização simples para wp_postmeta. Aqui está um exemplo:
UPDATE `wp_postmeta`
SET `meta_value` = '1392835505:386'
WHERE `post_id` = 94705 AND `meta_key` = '_edit_lock';
Detalhes relevantes sobre nossa configuração:
- Tempo de consulta lento do MySQL definido como 1s
- O mecanismo de armazenamento do wp_postmeta é o InnoDB
- Executando em uma grande instalação Multisite com dezenas de milhares de postagens no blog principal do WP (onde essas consultas lentas estão ocorrendo)
- Alta atividade na área de administração do WP (muitos escritores / editores trabalhando simultaneamente, mas geralmente por conta própria (não de outros))
- Baixa atividade no lado público do WP (não exibindo conteúdo do blog principal)
- As consultas lentas parecem estar todas usando a tecla "_edit_lock"; consultas do mesmo formato (que usam uma chave diferente de "_edit_lock") não parecem lentas.
Por que essa é a consulta mais lenta do nosso sistema? Isso tem algo a ver com o uso específico do WP de "editar bloqueios"?
Obrigado! :)
Atualização: Saída do mysqlsla abaixo:
______________________________________________________________________ 001 ___
Count : 606 (16.83%)
Time : 2257.760468 s total, 3.725677 s avg, 1.00512 s to 84.645869 s max (20.60%)
95% of Time : 1355.289277 s total, 2.357025 s avg, 1.00512 s to 12.343604 s max
Lock Time (s) : 182.502 ms total, 301 μs avg, 29 μs to 157.542 ms max (0.21%)
95% of Lock : 22.882 ms total, 40 μs avg, 29 μs to 57 μs max
Rows sent : 0 avg, 0 to 0 max (0.00%)
Rows examined : 1 avg, 1 to 2 max (0.00%)
Database : xxx_wp
Users :
xxx_wp@localhost : 98.84% (599) of query, 51.03% (1837) of all users
yyy_wp@localhost : 1.16% (7) of query, 0.94% (34) of all users
Query abstract:
SET timestamp=N; UPDATE wp_postmeta SET meta_value = 'S' WHERE post_id = N AND meta_key = 'S';
Query sample:
SET timestamp=1392835506;
UPDATE `wp_postmeta` SET `meta_value` = '1392835505:386' WHERE `post_id` = 94705 AND `meta_key` = '_edit_lock';
SELECT * FROM wp_postmeta WHERE meta_key='_edit_lock'
; ?SELECT
essa entrada? ComoSELECT * FROM
wp_postmeta` WHEREpost_id
= 94705 ANDmeta_key
= '_edit_lock'; `?Respostas:
o _edit_lock é gerado sempre que você edita uma postagem ou página. consiste no código de tempo e no usuário. então o WordPress sabe quem o está editando no momento.
se você o manipular, o WordPress reage de alguma forma sensível ... Tentei buscar quantos segundos alguém trabalhou em um post. O tempo todo quebrou o tempo de carregamento do meu banco de dados.
Como você disse, você está executando isso em um grande multisite. Não sei quantos usuários escrevem postagens lá, mas definitivamente poderia quebrar a RAM do servidor se muitas pessoas editarem uma postagem ao mesmo tempo.
Uma solução poderia ser: livrar-se de _edit_lock
Como desativar o "Post Lock / Edit Lock"?
Normalmente, o WordPress deve ter o "_edit_lock" um por Post. Alguns bancos de dados têm o problema de gerá-los sempre.
Gosto desse cara http://wordpress.org/support/topic/can-i-remove-_edit_lock-_edit_last-from-wp_postmeta
Sua solução foi excluir todos eles. Para acelerar, você pode excluí-los todas as noites às 3 horas no phpMyAdmin com
pode ser que você encontre um trabalho cron fazendo exatamente isso.
fonte
tente isso :)
fonte