Ter muitas tabelas (200 por exemplo) em uma única instância de banco de dados Mysql pode reduzir o desempenho?
mysql
performance
user25704
fonte
fonte
O número de tabelas não importa tanto quanto:
Ter tabelas em excesso significa memória e espaço no disco rígido que podem ser recuperados e usados para outras coisas. Lembre-se de que desnormalizar suas tabelas aumenta o risco de dados incorretos porque você está se livrando da integridade referencial.
fonte
Em geral, 200 tabelas não devem ser um problema, mas isso depende de várias coisas.
Servidor MySQL vs Servidor dedicado compartilhado com outro software, 128 MB vs 128 GB de RAM etc., pequenas tabelas com poucos registros versus tabelas com blobs e milhões de linhas.
O MySQL possui várias configurações e vários mecanismos, cada um afetando o desempenho das tabelas de maneiras diferentes.
O MyISAM normalmente possui três arquivos por tabela .frm, .MYD, .MYI
INNODB no modo normal possui .frm com todos os dados armazenados no arquivo central
INNODB em um arquivo por modo de tabela possui .frm, .idb
table_open_cache é o número de tabelas que podem ser abertas ao mesmo tempo (Padrão 64). Pode ser necessário que seja maior que o número de tabelas no esquema, pois está relacionado a quantas conexões estão consultando o banco de dados. 100 conexões juntam-se a 3 tabelas, pode significar que você tem 300 tabelas em cache mais quaisquer tabelas temporárias. Geralmente, um esquema ou conexões mais complexos, quanto maior o número.
open-files-limit Eu costumo definir isso como 4x table_open_cache, que deve ser generoso, em vez de se preocupar em calcular um valor exato.
O limite de manipulação de arquivos dos sistemas operacionais para o usuário mysql também pode ser um problema (no linux, o padrão geralmente pode ser 1024, ulimit -n para mostrar os limites do usuário) isso pode causar um problema com um grande número de tabelas quando é menor que o número o mysql requer. Deve ser pelo menos o mesmo que o limite de arquivos abertos.
Como em qualquer banco de dados, existem centenas de parâmetros de ajuste que você pode ajustar para otimizar o banco de dados para seu esquema específico. O MySQL é pior para isso do que para a maioria, pois você pode conectar mecanismos extras, se desejar, ou seja, o mecanismo de cluster NDB.
http://dev.mysql.com/doc/refman/5.1/en/table-cache.html
Espero que ajude
fonte
Para o índice de cada tabela, o MySQL tem seu próprio índice. O índice leva a memória para manter e usar, e há um limite global para índices. Quando existem muitas tabelas, nem todos os índices podem estar na RAM; portanto, eles vão para o disco, o que afeta diretamente o desempenho. Tente aumentar isso em
my.cnf
::key_buffer_size=256M
é a quantidade de RAM reservada para armazenar informações do índice.fonte
Pode? Certo. Mas quanto depende muito do seu aplicativo e de seus padrões de acesso, e se você estiver usando myisam ou innodb, e se o innodb estiver no modo arquivo por tabela ou não, e o tamanho dos logs do innodb. Você precisará nos fornecer mais detalhes do que isso.
fonte
Não - não acho que o número de tabelas seja o gargalo de desempenho em seu sistema. Afinal, eles são apenas arquivos no seu sistema de arquivos. Não há nada incomum em ter centenas de tabelas em um banco de dados.
Muito mais provável é que suas consultas não sejam adequadamente otimizadas. Eu recomendaria ativar o
log-slow-queries
elog-queries-not-using-indexes
. Ao identificar consultas lentas, use aexplain
opção para exibir o plano de consulta para essas consultas e identificar os locais em que os índices estão ausentes.Consulte http://dev.mysql.com/doc/refman/5.0/en/slow-query-log.html para obter mais detalhes.
fonte