O que é uma boa estratégia para planejar o crescimento do WordPress DB?

9

Esperando por algum feedback sobre o tópico de otimizar e ficar no topo do desempenho como um banco de dados WordPress cresce ... para pintar uma imagem .... digamos que você tenha um site WordPress / Buddypress MU que começa em torno de 150kb ( baunilha instalar) ... ao longo do tempo os usuários adicionar blogs, fóruns, posts e comentários e o banco de dados cresce para 5mb .... então 10mb no próximo ano .... Também assumindo que os controles de hospedagem são uma configuração padrão colocated como Cpanel ou Plesk.

  • Em que ponto o número de entradas no banco de dados afeta o desempenho do site de front-end?
  • O que você pode fazer como gerente de website para manter isso funcionando sem problemas enquanto seu banco de dados cresce?
  • O que você pode esperar em termos de desempenho após o ano 5, quando seu banco de dados é de 500 - 600 MB grande?

Obrigado por qualquer feedback que você possa ter sobre manter um contrato restrito.

Atenciosamente,

S.

    
por Simon 29.05.2012 / 17:55

3 respostas

4

Suas perguntas específicas:

1) Não há limite estrito para o "número de entradas" que um banco de dados pode conter antes que o desempenho seja afetado. O desempenho depende tanto do seu hardware e configuração quanto do tamanho e estrutura do banco de dados.

2) Se você está preocupado com a escalabilidade da sua camada de banco de dados, você pode executá-lo em um cluster, ou em uma caixa de nuvem ou VPS que permite redimensionamento. Se o seu banco de dados começar a ficar lento, você poderá dimensionar (embora geralmente a um custo extra). Essas opções adicionam custo, mas são realmente a melhor maneira de garantir a escalabilidade de um banco de dados.

3) Isso realmente depende da sua configuração de hospedagem e da sua arquitetura de banco de dados. Mas, em geral (a menos que você esteja em uma caixa realmente barata), eu não me preocuparia com um banco de dados WordPress de 30MB. O WordPress faz um bom trabalho de indexação de tabelas, e até mesmo uma configuração OOB MySQL deve facilmente lidar com consultas do WordPress em um DB deste tamanho. Quando você entra em Gigabytes - é quando você precisa olhar seriamente para as opções de otimização de desempenho.

Em geral:

Se você estiver preocupado com o desempenho, concentre-se em ajustar sua configuração existente do MySQL e / ou configurar uma camada de armazenamento em cache. O armazenamento em cache pode reduzir bastante a carga no MySQL (especialmente com sites do WordPress, já que eles geralmente executam um grande número de consultas ao banco de dados).

Se depois que você ajustou corretamente o MySQL e configurou uma camada de cache decente, ainda está preocupado com a configuração do hardware, você pode instituir uma política de exclusão de conteúdo após x quantidade de tempo .

Nada disso é específico para o WordPress. E eu não tenho certeza se a pergunta tem alguma resposta que não se aplica ao qualquer site ou aplicativo em execução em uma pilha LAMP. Mas talvez alguém tenha sugestões sobre estruturas de tabelas de MU ou outros truques de DB específicos para WP ... Eu não sei.

    
por MathSmath 29.05.2012 / 20:33
4

Estritamente do MySQL Point-of-View, tenho sugestões sobre como melhorar o cache de dados / índices para uma Instância MySQL.

Tenha em mente que existem dois principais mecanismos de armazenamento para o MySQL

  • MyISAM
  • InnoDB

Seus mecanismos de cache são diferentes. Há algo que você pode fazer para ajustar o mecanismo de armazenamento de sua escolha.

MyISAM

O MyISAM armazena apenas páginas de índice. Nunca armazena dados em cache. Você pode fazer duas coisas para melhorar a E / S para tabelas MyISAM.

MyISAM Improvement # 1

Qualquer tabela MyISAM que tenha colunas VARCHAR pode ser convertida internamente para CHAR sem tocar no design inicial. Suponha que você tenha uma tabela chamada mydb.mytable e queira melhorar a E / S para ela, faça o seguinte:

ALTER TABLE mydb.mytable ROW_FORMAT=Fixed;

Isso aumentará o tamanho da tabela em 60% -100%, mas resultará em um aumento de desempenho de 20-30% em E / S sem alterar mais nada . Eu escrevi sobre isso antes no DBA StackExchange:

MyISAM Improvement # 2

Você precisa aumentar o MyISAM Key Cache (dimensionado por < strong> key_buffer_size ). Execute esta consulta, por favor:

SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.4999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1))
recommended_key_buffer_size FROM
(SELECT LEAST(POWER(2,32),KBS1) KBS
FROM (SELECT SUM(index_length) KBS1
FROM information_schema.tables WHERE engine='MyISAM' AND
table_schema NOT IN ('information_schema','mysql','performance_schema')) AA ) A,
(SELECT 2 PowerOf1024) B;

Isso mostrará o key_buffer_size ideal com base no seu conjunto de dados atual.

InnoDB

O InnoDB armazena dados e índices. Se você converteu todos os seus dados para o InnoDB e está atualmente executando o WordPress a partir de um banco de dados All InnoDB, você precisa dimensionar seu InnoDB Buffer Pool (dimensionado com innodb_buffer_pool_size ). Execute esta consulta, por favor:

SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.49999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1)) recommended_innodb_buffer_pool_size
FROM (SELECT SUM(data_length+index_length) KBS FROM information_schema.tables
WHERE engine='InnoDB') A,
(SELECT 2 PowerOf1024) B;

Isso mostrará o key_buffer_size ideal com base no seu conjunto de dados atual.

Projeções

Se você projetar que o conjunto de dados crescerá 20 vezes mais, apenas o múltiplo que essa consulta recomenda em 20. Suponha que seu conjunto de dados MyISAM seja de 15 MB e 3 MB seja a soma de seus índices. Se você estimar que terá 20 vezes mais dados, defina o key_buffer_size como 60MB assim em /etc/my.cnf:

[mysqld]
key_buffer_size=60M

depois reinicie o MySQL. A mesma coisa se aplica ao InnoDB Buffer Pool.

Se todos os seus dados forem InnoDB, você precisa realizar uma limpeza completa da sua infra-estrutura InnoDB que postei no StackOverflow .

    
por RolandoMySQLDBA 05.06.2012 / 21:58
2
  

Em que ponto o número de entradas no banco de dados afeta o desempenho do site front-end?

Quando as consultas começam a atingir o limite de recursos da sua conta de hospedagem.

  

O que você pode fazer como gerente de website para manter isso funcionando sem problemas enquanto seu banco de dados cresce?

Fique de olho no uso de recursos. Tome medidas para aumentar o recurso e / ou otimizar o uso.

  

O que você pode esperar em termos de desempenho após o ano 5, quando seu banco de dados é 25 - 30mb grande?

Não deve haver alteração no desempenho naquele pequeno banco de dados.

Se você espera que seu site cresça lentamente, você terá bastante tempo para aprender como gerenciar o crescimento.

    
por shanebp 29.05.2012 / 19:09