Qual é uma boa estratégia para planejar o crescimento do banco de dados do WordPress?

9

Esperando por algum feedback sobre o tema de otimizar e manter o desempenho à medida que um banco de dados WordPress cresce ... para pintar uma imagem ... digamos que você tenha um site MU / WordPress / Buddypress que começa em torno de 150kb (instalação com baunilha) ... com o tempo, os usuários adicionam blogs, fóruns, postagens e comentários e o banco de dados aumenta para 5mb .... depois 10mb no próximo ano .... Também assumindo que os controles de hospedagem são uma configuração padrão de colocações, como Cpanel ou Plesk.

  • Em que momento o número de entradas no banco de dados afeta o desempenho do site front-end?
  • O que você pode fazer como gerente de site para manter esse funcionamento sem problemas à medida que seu banco de dados cresce?
  • O que você pode esperar em termos de desempenho após o ano 5, quando seu banco de dados tiver 500 - 600mb de tamanho?

Obrigado por qualquer feedback que você possa ter sobre como manter um navio apertado.

Saudações,

S.

Simon
fonte
3
Você fez 7 perguntas e aceitou apenas 1. Não é um bom registro. :-(
8
25mb não é nada. Você deve se preocupar com o tamanho do banco de dados, pois atinge GBs.
Dunhamzzz
Obrigado pelo seu feedback! Se estamos com problemas de desempenho a 500 mb, provavelmente é nossa empresa de hospedagem. PS voltou e aceitou respostas em todas as perguntas.
Simon

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ê estiver preocupado com a escalabilidade da sua camada de banco de dados, execute-a em um cluster ou em uma caixa de nuvem ou VPS que permita redimensionar. Se o seu banco de dados começar a ficar lento, você poderá dimensioná-lo (embora geralmente a um custo extra). Essas opções aumentam o 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 arquitetura do seu banco de dados. Mas, em geral (a menos que você esteja em uma caixa realmente barata), não me preocuparia com um banco de dados WordPress de 30 MB. O WordPress faz um bom trabalho de indexação de tabelas, e mesmo uma configuração OOB MySQL deve lidar facilmente com consultas do WordPress em um banco de dados desse tamanho. Quando você entra em Gigabytes - é aí que pode ser necessário analisar seriamente as opções de otimização de desempenho.

Em geral:

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

Se depois de ajustar corretamente o MySQL e configurar uma camada de armazenamento em cache decente, você ainda estiver preocupado em superar a configuração de hardware, poderá instituir uma política de exclusão de conteúdo após x quantidade de tempo.

Nada disso é específico para o WordPress. E não tenho certeza de que a pergunta tenha respostas que não se apliquem a nenhum site ou aplicativo em execução em uma pilha LAMP. Mas talvez alguém tenha sugestões sobre estruturas de tabelas MU ou outros truques de banco de dados específicos do WP ... não sei.

MathSmath
fonte
4

Estritamente do ponto de vista do MySQL, tenho sugestões sobre como melhorar o cache de dados / índices para uma instância do MySQL.

Lembre-se de que existem dois principais mecanismos de armazenamento para MySQL

  • MyISAM
  • InnoDB

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

MyISAM

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

Melhoria MyISAM # 1

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

ALTER TABLE mydb.mytable ROW_FORMAT=Fixed;

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

Melhoria MyISAM # 2

Você precisa aumentar o cache de chaves do MyISAM (conforme o tamanho de 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 em cache dados e índices. Se você converteu todos os seus dados para o InnoDB e atualmente está executando o WordPress a partir de um banco de dados totalmente do InnoDB, é necessário dimensionar seu buffer pool do InnoDB (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 seu conjunto de dados crescerá 20 vezes mais, basta multiplicar por 20 o que esta consulta recomenda. Suponha que seu conjunto de dados MyISAM tenha 15 MB e 3 MB seja a soma dos seus índices. Se você estima que terá 20 vezes mais dados, defina o tamanho_chave_chave_chave para 60 MB como este em /etc/my.cnf:

[mysqld]
key_buffer_size=60M

depois reinicie o MySQL. O mesmo se aplica ao pool de buffers do InnoDB.

Se todos os seus dados forem do InnoDB, você precisará executar uma Limpeza completa da sua infraestrutura do InnoDB que publiquei no StackOverflow .

RolandoMySQLDBA
fonte
2

Em que momento 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 site para manter esse funcionamento sem problemas à medida que seu banco de dados cresce?

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

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

Não deve haver alteração no desempenho nesse minúsculo banco de dados.

Se você espera que seu site cresça tão lentamente, você tem tempo de sobra para aprender como gerenciar o crescimento.

shanebp
fonte