Explicar os espaços de tabela
Um espaço de tabela é um grupo de arquivos de dados. Cada espaço de tabela pode armazenar dados para uma ou várias tabelas. Existem três tipos de espaços de mesa:
- Espaço de tabelas do sistema
- Ficheiro por espaço de tabela
- Espaço de mesa geral
Para exibir uma lista completa de espaços de tabela no seu servidor MySQL, execute a consulta:
SELECT TABLESPACE_NAME, FILE_NAME FROM information_schema.FILES;
Isso retorna uma lista de espaços de tabela juntamente com seus nomes de arquivo.
Os arquivos de dados InnoDB têm uma extensão .ibd.
Observação
O MySQL faz uma varredura dos espaços de tabela quando inicia, então um número muito grande de espaços de tabela pode fazer com que o MySQL demore mais tempo a iniciar ou realizar failover.
Espaço de tabelas do sistema
Cada banco de dados MySQL tem pelo menos um espaço de tabela, o espaço de tabela do sistema, e você pode criar mais com a instrução CREATE TABLESPACE .
Há sempre um espaço de tabela do sistema, que é onde o dicionário de dados InnoDB e os logs de desfazer são armazenados.
No Banco de Dados do Azure para MySQL, o parâmetro de servidor innodb_data_file_path é um parâmetro estático definido como autoextend. Isso configura o espaço de tabela do sistema para extensão automática, o que significa que ele não ficará sem espaço. Esse parâmetro não pode ser modificado, portanto, você nunca precisa se preocupar em redimensionar o espaço de tabela do sistema.
Ficheiro por espaço de tabela
Por padrão, os dados de tabela e índice são armazenados em um espaço de tabela por arquivo ou em um único espaço de tabela por tabela. Um espaço de tabelas de um ficheiro por tabela contém uma tabela, incluindo os dados e índices. Quando a tabela é eliminada, o tablespace de arquivo por tabela também é eliminado.
O parâmetro server innodb_file_per_table define se cada tabela recém-criada é criada em seu próprio espaço de tabela. Por padrão, esse parâmetro é definido como ON. Se innodb_file_per_table estiver definido como OFF, novas tabelas serão criadas no espaço de tabela do sistema.
Dica
Para obter o melhor desempenho, não altere o padrão da tabela innodb_file_per .
Espaço de mesa geral
Se quiser armazenar tabelas em um espaço de tabela criado, use a sintaxe:
CREATE TABLESPACE mytablespace ADD DATAFILE '/var/lib/mysql/mytablespace.ibd' engine = Innodb;
Para criar uma tabela no espaço de tabela geral que você criou, use a seguinte sintaxe:
CREATE TABLE new_table (myID INT) TABLESPACE = mytablespace;
Quando você cria um espaço de tabela geral, o local do arquivo de dados é opcional. A sintaxe a seguir também funcionará:
CREATE TABLESPACE mytablespace ADD DATAFILE 'mytablespace.ibd' engine = Innodb;
Os espaços de tabela gerais não são descartados automaticamente, mesmo que todas as tabelas que eles contêm tenham sido descartadas. Para eliminar um espaço de tabelas geral:
DROP TABLESPACE mytablespace;
Geralmente, é melhor manter o padrão de criar cada nova tabela em seu próprio espaço de tabela com arquivo único por tabela. Se você tiver um grande número de tabelas pequenas, pode haver algum espaço não utilizado ou fragmentação, que precisa ser gerenciado, mas o desempenho geral será melhor.
Melhores práticas do Tablespace
- Crie todas as tabelas no espaço de tabela innodb_file_per_table.
- Se uma tabela tiver mais de 1 TB, considere particioná-la .
- Mesmo para tabelas grandes, considere usar o tablespace arquivo-por-tabela. Isso evita que o espaço de mesa do sistema exceda o limite máximo de armazenamento.