Resumo do espaço de tabela independente e do espaço de tabela compartilhado do MySQL

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.ibdum arquivo; também pode armazenar dados em ibdataum 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 .frmarquivo de descrição da tabela (isso é consistente com o mecanismo MyISAM) e um .ibdarquivo 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.
    • 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_tablese você modificar a tabela antes de criá-la e modificá-la depois de criá-la, isso não afetará a estrutura da tabela existente.

1.1 Vantagens e desvantagens do espaço de tabela independente e do espaço de tabela compartilhado

espaço de tabela separado

  • Vantagem

    1. Cada tabela tem seu próprio espaço de tabela independente.
    2. Os dados e índices de cada tabela são armazenados em seu próprio tablespace.
    3. É possível mover uma única tabela em bancos de dados diferentes (porque cada tabela possui um arquivo de tabela de dados independente).
    4. O espaço pode ser recuperado (por meio da tabela de otimização e outros comandos).
    5. Não importa como você o exclua, a fragmentação do espaço de tabela não afetará seriamente o desempenho do sistema.
    6. 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

    1. O espaço no tablespace só pode ser usado por esta tabela
    2. A operação fsync deve ser executada em cada tabela
    3. mysqld deve manter um identificador de arquivo aberto, muitas tabelas afetarão o desempenho. (consome muito fd)

espaço de tabela compartilhado

  • Vantagem

    1. 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

    1. 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á).

    2. 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.

    3. Para o segundo problema, geralmente use mysqldump para exportar dados, exclua o arquivo de dados do espaço de tabela compartilhado e importe novamente.

    4. 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:

  1. Use mysqldump para exportar todos os dados da tabela do banco de dados.
  2. Pare o serviço MySQL, modifique innodb_file_per_tableos 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).
  3. Reinicie o serviço MySQL e reconstrua o espaço de tabela compartilhado InnoDB (não haverá dados nele neste momento).
  4. Reimporte os dados.

Acho que você gosta

Origin blog.csdn.net/UserFrank/article/details/124709754
Recomendado
Clasificación