Resumo do espaço de tabela independente e do espaço de tabela compartilhado do MySQL
Este artigo é uma revisão destes artigos:
http://blog.itpub.net/69955379/viewspace-2783174/
https://www.ycbbs.vip/?p=35673
1. Espaço de tabela independente e espaço de tabela compartilhado
Para o mecanismo de armazenamento InnoDB, ele pode armazenar cada tabela em um espaço de tabela independente, ou seja, tablename.ibd
um arquivo; também pode armazenar dados em ibdata
um espaço de tabela compartilhado, geralmente denominado como ibdataX
, seguido de X é um número específico.
-
Como verificar se o espaço de tabela independente está ativado? :
mysql> show variables like 'innodb_file_per_table'; +-----------------------+-------+ | Variable_name | Value | +-----------------------+-------+ | innodb_file_per_table | ON | +-----------------------+-------+ 1 row in set (0.01 sec)
- ON significa que o espaço de tabela independente foi aberto, neste momento no diretório data-dir do MySQL
- Cada tabela será armazenada como um arquivo independente. Cada tabela possui um
.frm
arquivo de descrição da tabela (isso é consistente com o mecanismo MyISAM) e um.ibd
arquivo que inclui o conteúdo dos dados e o conteúdo do índice de uma única tabela. Por padrão, seu local de armazenamento é também no local da mesa.
- Cada tabela será armazenada como um arquivo independente. Cada tabela possui um
- OFF significa fechar o espaço de tabela independente, ou seja, usar o espaço de tabela compartilhado.No momento, haverá apenas um arquivo ibdata1 no diretório data-dir do MySQL e todas as tabelas serão armazenadas em um arquivo.
- Deve-se observar que,
innodb_file_per_table
se você modificar a tabela antes de criá-la e modificá-la depois de criá-la, isso não afetará a estrutura da tabela existente.
- ON significa que o espaço de tabela independente foi aberto, neste momento no diretório data-dir do MySQL
1.1 Vantagens e desvantagens do espaço de tabela independente e do espaço de tabela compartilhado
espaço de tabela separado
-
Vantagem
- Cada tabela tem seu próprio espaço de tabela independente.
- Os dados e índices de cada tabela são armazenados em seu próprio tablespace.
- É possível mover uma única tabela em bancos de dados diferentes (porque cada tabela possui um arquivo de tabela de dados independente).
- O espaço pode ser recuperado (por meio da tabela de otimização e outros comandos).
- Não importa como você o exclua, a fragmentação do espaço de tabela não afetará seriamente o desempenho do sistema.
- Se innodb_file_per_table não estiver habilitado, os dados serão colocados no espaço de tabela do sistema, com um máximo de 64 TB. Se innodb_file_per_table for usado, cada tabela pode ter 64 TB.
-
deficiência
- O espaço no tablespace só pode ser usado por esta tabela
- A operação fsync deve ser executada em cada tabela
- mysqld deve manter um identificador de arquivo aberto, muitas tabelas afetarão o desempenho. (consome muito fd)
espaço de tabela compartilhado
-
Vantagem
- O espaço de tabela pode ser dividido em vários arquivos e armazenado em cada disco (o tamanho do arquivo de espaço de tabela não é limitado pelo tamanho da tabela, como uma tabela pode ser distribuída em arquivos diferentes).
-
deficiência
-
Todos os dados e índices são armazenados em um arquivo, o que significa que há um arquivo grande (embora um arquivo grande possa ser dividido em vários arquivos pequenos), mas várias tabelas e índices são misturados no espaço de tabela, de modo que Quando uma tabela tiver foi muito excluído, haverá muitas lacunas no espaço de tabela, especialmente para aplicativos como análise estatística e sistemas de log, é mais inadequado usar espaço de tabela compartilhado (por exemplo, quando o espaço do sistema não é suficiente), esperamos liberar algum espaço de tabela excluindo alguns dados inválidos. Neste momento, descobriremos que, se o espaço de tabela compartilhado for usado, mesmo que os dados inválidos sejam excluídos, o espaço de tabela ainda não diminuirá).
-
O gerenciamento de espaço de tabela compartilhado causará o problema de que o espaço de tabela não pode ser retraído após a alocação. espaço.
-
Para o segundo problema, geralmente use mysqldump para exportar dados, exclua o arquivo de dados do espaço de tabela compartilhado e importe novamente.
-
Como os dados de várias tabelas são salvos em um arquivo, gargalos de E/S podem ocorrer durante operações simultâneas, portanto, cenários que exigem gravação frequente não são adequados para tablespaces compartilhados.
-
Em projetos reais, é melhor escolher um espaço de tabela independente.Na verdade, a partir do MySQL5.6, um espaço de tabela independente tornou-se a opção padrão .
1.2 Como converter dados em tablespace compartilhado para tablespace independente
Se o tablespace compartilhado foi criado no início, ele ainda pode ser migrado para um tablespace independente? claro! Consulte as quatro etapas a seguir:
- Use mysqldump para exportar todos os dados da tabela do banco de dados.
- Pare o serviço MySQL, modifique
innodb_file_per_table
os parâmetros e exclua os arquivos relacionados ao InnoDB (se for uma estrutura mestre-escravo, você pode iniciar a partir do Escravo para concluir essas operações). - Reinicie o serviço MySQL e reconstrua o espaço de tabela compartilhado InnoDB (não haverá dados nele neste momento).
- Reimporte os dados.