Tablespace no MySQL 🐬

Fala rapaziada, so na paz? espero que sim.

Hoje vou abordar um assunto simples e pratico que assim como no Oracle, também existe no MySQL, TABLESPACES.

Essa Ă© nova pra vocĂȘ? ou ja sabia que no MySQL tambĂ©m existe TABLESPACES?

Bom, se Ă© novidade ou nĂŁo vale dar uma lida para aprender ou relembrar detalhes sobre o assunto.

No MySQL, existem trĂȘs tipos principais de tablespaces:

  1. System Tablespace: Armazena metadados e dados do sistema.
  2. File-per-Table Tablespace: Cada tabela Ă© armazenada em seu prĂłprio arquivo .ibd (O que eu acho zoado por ser DBA Oracle kkk).
  3. General Tablespace: Permite que mĂșltiplas tabelas compartilhem o mesmo arquivo de dados .ibd.

Por que usar Tablespaces no MySQL?

O uso de tablespaces oferece vĂĄrias vantagens para o DBA desorganizado đŸ€­:

  • Flexibilidade: VocĂȘ pode escolher onde armazenar os dados (em um diretĂłrio especĂ­fico, por exemplo).
  • Desempenho: Tablespaces permitem otimizar o armazenamento para cenĂĄrios especĂ­ficos, como compressĂŁo de dados.
  • Gerenciamento Simplificado: Facilita a administração de grandes volumes de dados, especialmente em ambientes com mĂșltiplas tabelas.
  • CompressĂŁo: Tablespaces suportam tabelas comprimidas, reduzindo o uso de espaço em disco.

Tipos de Tablespaces no MySQL

1. System Tablespace

A System tablespace Ă© o coração do MySQL. Ele armazena metadados do sistema, como o dicionĂĄrio de dados e os logs de undo. Por padrĂŁo, ele Ă© armazenado no arquivo ibdata1. Embora seja essencial para o funcionamento do MySQL, ele nĂŁo Ă© recomendado para armazenar dados de usuĂĄrio, pois pode crescer indefinidamente (sim, tem doido pra tudo).

2. File-per-Table Tablespace

No modo file-per-table, cada tabela Ă© armazenada em seu prĂłprio arquivo .ibd. Isso oferece maior flexibilidade, pois vocĂȘ pode mover, copiar ou excluir tabelas individualmente. AlĂ©m disso, facilita a recuperação de dados em caso de falhas.

Exemplo de criação de uma tabela no modo file-per-table:

CREATE TABLE tabela_braba (
    cfp INT PRIMARY KEY,
    dba VARCHAR(100)
) ENGINE=InnoDB;

3. General Tablespace

General tablespaces permitem que mĂșltiplas tabelas compartilhem o mesmo arquivo .ibd. Eles sĂŁo ideais para cenĂĄrios onde vocĂȘ deseja centralizar o armazenamento de vĂĄrias tabelas ou utilizar compressĂŁo de dados.

Suporte aos seguintes row format:

  • REDUNDANT
  • COMPACT
  • DYNAMIC
  • COMPRESSED

Exemplo de criação de um general tablespace:

CREATE TABLESPACE tablespace_braba
ADD DATAFILE '/u01/para/df_brabo_01.ibd'
ENGINE=InnoDB;

Ou vocĂȘ tambĂ©m pode apenas executar:

CREATE TABLESPACE tablespace_braba Engine=InnoDB;

Se a clĂĄusula ADD DATAFILE nĂŁo for especificada ao criar uma tablespace, um datafile com um nome muito louco serĂĄ criado no lugar (nessa pegada: aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee).

E para adicionar uma tabela a nova tablespace?

VocĂȘ pode apenas criar a tabela atribuindo-a sua tablespace:

CREATE TABLE tabela_braba (
    cfp INT PRIMARY KEY,
    dba VARCHAR(100)
) TABLESPACE tablespace_braba;

Mas vocĂȘ tambĂ©m pode vincular uma tabela existente a uma tablespace:

ALTER TABLE tabela_braba TABLESPACE tablespace_braba;

Podemos validar, verificar e entender a relação tabelas por tablespaces com a consulta:

SELECT a.NAME AS space_name, b.NAME AS table_name FROM INFORMATION_SCHEMA.INNODB_TABLESPACES a,
       INFORMATION_SCHEMA.INNODB_TABLES b WHERE a.SPACE=b.SPACE AND a.NAME LIKE 'tablespace_braba';
+-----------------+--------------------+
| space_name      | table_name         |
+-----------------+--------------------+
| tablespace_braba| teste/tabela_braba |
+-----------------+--------------------+

Também como no Oracle é possivel adicionar datafiles a essas tablespaces criadas:

ALTER TABLESPACE tablespace_braba ADD DATAFILE '/u01/oradata/df_brabo_02.ibd' INITIAL_SIZE 48M ENGINE InnoDB;

Nesse caso acima ja estamos pre-alocando 48M para o arquivo de datafile, mas podemos também adicionar datafile sem alocar espaço previamente, assim:

ALTER TABLESPACE tablespace_braba ADD DATAFILE '/u01/oradata/df_brabo_03.ibd' ENGINE InnoDB;

Ainda é possivel também realizar o MOVE das tabelas entre diferentes tipo de tablespaces:

ALTER TABLE tabela_braba TABLESPACE [=] tablespace_name;
ALTER TABLE tabela_braba TABLESPACE [=] innodb_system;
ALTER TABLE tabela_braba TABLESPACE [=] innodb_file_per_table;

Rename pode? pode!

ALTER TABLESPACE tablespace_braba RENAME TO tablespace_braba_01;

E por fim, dropar uma tablespace no MySQL:

DROP TABLESPACE tablespace_braba;

Vantagens dos General Tablespaces

  • Armazenamento Centralizado: MĂșltiplas tabelas podem compartilhar o mesmo arquivo, simplificando o gerenciamento.
  • CompressĂŁo de Dados: Suporta tabelas com row format COMPRESSED, reduzindo o uso de espaço em disco.
  • EficiĂȘncia: Ideal para cenĂĄrios onde vĂĄrias tabelas tĂȘm padrĂ”es de acesso semelhantes.

CombinaçÔes permitidas de tamanho de pågina para tabelas compactadas

InnoDB Page SizeFILE_BLOCK_SIZE ValueKEY_BLOCK_SIZE Value
64KB64K (65536)Compression is not supported
32KB32K (32768)Compression is not supported
16KB16K (16384)None. If innodb_page_size is equal to FILE_BLOCK_SIZE, the tablespace cannot contain a compressed table.
16KB8K (8192)8
16KB4K (4096)4
16KB2K (2048)2
16KB1K (1024)1
8KB8K (8192)None. If innodb_page_size is equal to FILE_BLOCK_SIZE, the tablespace cannot contain a compressed table.
8KB4K (4096)4
8KB2K (2048)2
8KB1K (1024)1
4KB4K (4096)None. If innodb_page_size is equal to FILE_BLOCK_SIZE, the tablespace cannot contain a compressed table.
4KB2K (2048)2
4KB1K (1024)1
MySQL 8.4 Reference Manual – 17.6.3.3 General Tablespaces

Quando usar Tablespaces no golfinho?

  • CenĂĄrios de CompressĂŁo: Se vocĂȘ precisa economizar espaço em disco, tablespaces com compressĂŁo sĂŁo uma Ăłtima opção.
  • Armazenamento Centralizado: Para ambientes com mĂșltiplas tabelas relacionadas, general tablespaces podem simplificar o gerenciamento.
  • Controle de Localização: Se vocĂȘ precisa armazenar dados em um diretĂłrio especĂ­fico (por exemplo, em um disco de alta performance [SSD, NVMe, Optane etc e tal]), tablespaces permitem esse controle.

REFERENCE GUIDE:

-- ============================================================================
-- COMANDOS CREATE TABLESPACE MAIS COMPLETOS POR ENGINE
-- ============================================================================

-- ============================================================================
-- 1. InnoDB ENGINE - TABLESPACE REGULAR
-- ============================================================================
CREATE TABLESPACE ts_innodb_complete
ADD DATAFILE '/var/lib/mysql/ts_innodb_complete.ibd'
AUTOEXTEND_SIZE = 64M
FILE_BLOCK_SIZE = 16384
ENCRYPTION = 'Y'
ENGINE = InnoDB;

-- ============================================================================
-- 2. InnoDB ENGINE - UNDO TABLESPACE
-- ============================================================================
CREATE UNDO TABLESPACE undo_ts_innodb_complete
ADD DATAFILE '/var/lib/mysql/undo_ts_innodb_complete.ibu'
AUTOEXTEND_SIZE = 128M
FILE_BLOCK_SIZE = 16384
ENCRYPTION = 'N'
ENGINE = InnoDB;

-- ============================================================================
-- 3. NDB ENGINE - TABLESPACE COMPLETO
-- ============================================================================
-- Primeiro, criar o LOGFILE GROUP (prerequisito para NDB tablespace)
CREATE LOGFILE GROUP lg_ndb_complete
ADD UNDOFILE 'undo_lg_ndb_complete.dat'
INITIAL_SIZE = 128M
UNDO_BUFFER_SIZE = 64M
ENGINE = NDB;

-- Agora criar o TABLESPACE NDB
CREATE TABLESPACE ts_ndb_complete
ADD DATAFILE 'ts_ndb_complete.dat'
USE LOGFILE GROUP lg_ndb_complete
AUTOEXTEND_SIZE = 32M
EXTENT_SIZE = 1M
INITIAL_SIZE = 256M
MAX_SIZE = 2G
NODEGROUP = 0
WAIT
COMMENT = 'Tablespace NDB completo para cluster'
ENGINE = NDB;

-- ============================================================================
-- 4. NDB ENGINE - UNDO TABLESPACE
-- ============================================================================
CREATE UNDO TABLESPACE undo_ts_ndb_complete
ADD DATAFILE 'undo_ts_ndb_complete.dat'
USE LOGFILE GROUP lg_ndb_complete
AUTOEXTEND_SIZE = 16M
EXTENT_SIZE = 512K
INITIAL_SIZE = 128M
MAX_SIZE = 1G
NODEGROUP = 1
WAIT
COMMENT = 'Undo tablespace NDB para transaçÔes'
ENGINE = NDB;

-- ============================================================================
-- EXPLICAÇÃO DOS PARÂMETROS
-- ============================================================================

/*
PARÂMETROS COMUNS (InnoDB e NDB):
- ADD DATAFILE: Especifica o arquivo de dados
- AUTOEXTEND_SIZE: Tamanho do incremento automĂĄtico
- ENGINE: Engine de armazenamento

PARÂMETROS EXCLUSIVOS InnoDB:
- FILE_BLOCK_SIZE: Tamanho do bloco (512, 1024, 2048, 4096, 8192, 16384, 32768, 65536)
- ENCRYPTION: Criptografia ('Y' ou 'N')

PARÂMETROS EXCLUSIVOS NDB:
- USE LOGFILE GROUP: Grupo de log files (obrigatĂłrio)
- EXTENT_SIZE: Tamanho da extensĂŁo (32K-2G)
- INITIAL_SIZE: Tamanho inicial
- MAX_SIZE: Tamanho mĂĄximo
- NODEGROUP: ID do grupo de nĂłs
- WAIT: Aguarda conclusão da operação
- COMMENT: ComentĂĄrio descritivo

VALORES RECOMENDADOS:
- FILE_BLOCK_SIZE InnoDB: 16384 (padrĂŁo)
- EXTENT_SIZE NDB: 1M (padrĂŁo)
- AUTOEXTEND_SIZE: 64M para InnoDB, 32M para NDB
*/

-- ============================================================================
-- MYSQL TABLESPACES COM MÚLTIPLOS DATAFILES
-- ============================================================================

/*
- InnoDB: NÃO suporta mĂșltiplos datafiles no CREATE TABLESPACE
- NDB: SIM, suporta mĂșltiplos datafiles nativamente
*/

-- ============================================================================
-- 1. InnoDB - LIMITAÇÃO: APENAS 1 DATAFILE NO CREATE
-- ============================================================================

-- ❌ ISTO NÃO FUNCIONA NO InnoDB:
-- CREATE TABLESPACE ts_innodb
-- ADD DATAFILE 'file1.ibd', 'file2.ibd', 'file3.ibd'  -- ERRO!
-- ENGINE = InnoDB;

-- ✅ InnoDB: Apenas 1 datafile no CREATE
CREATE TABLESPACE ts_innodb_inicial
ADD DATAFILE '/var/lib/mysql/ts_innodb_file1.ibd'
AUTOEXTEND_SIZE = 64M
FILE_BLOCK_SIZE = 16384
ENCRYPTION = 'Y'
ENGINE = InnoDB;

-- Para adicionar mais datafiles no InnoDB, vocĂȘ deve usar ALTER depois:
-- NOTA: ALTER TABLESPACE ADD DATAFILE nĂŁo Ă© suportado no InnoDB!
-- InnoDB usa auto-extend ao invĂ©s de mĂșltiplos arquivos

-- ============================================================================
-- 2. NDB - SUPORTE COMPLETO A MÚLTIPLOS DATAFILES
-- ============================================================================

-- Primeiro criar o LOGFILE GROUP
CREATE LOGFILE GROUP lg_multiple
ADD UNDOFILE 'undo_multiple.dat'
INITIAL_SIZE = 128M
UNDO_BUFFER_SIZE = 64M
ENGINE = NDB;

-- ✅ NDB: MĂșltiplos datafiles sĂŁo suportados via ALTER
CREATE TABLESPACE ts_ndb_multiple
ADD DATAFILE 'ndb_file1.dat'
USE LOGFILE GROUP lg_multiple
INITIAL_SIZE = 256M
EXTENT_SIZE = 1M
MAX_SIZE = 2G
ENGINE = NDB;

-- Adicionar mais datafiles ao tablespace NDB existente
ALTER TABLESPACE ts_ndb_multiple
ADD DATAFILE 'ndb_file2.dat'
INITIAL_SIZE = 256M
ENGINE = NDB;

ALTER TABLESPACE ts_ndb_multiple
ADD DATAFILE 'ndb_file3.dat'
INITIAL_SIZE = 256M
ENGINE = NDB;

ALTER TABLESPACE ts_ndb_multiple
ADD DATAFILE 'ndb_file4.dat'
INITIAL_SIZE = 256M
ENGINE = NDB;

-- ============================================================================
-- 3. VERIFICAR DATAFILES DE UM TABLESPACE
-- ============================================================================

-- Ver informaçÔes dos tablespaces e seus arquivos
SELECT 
    TABLESPACE_NAME,
    FILE_NAME,
    FILE_TYPE,
    TOTAL_EXTENTS,
    EXTENT_SIZE,
    INITIAL_SIZE,
    MAXIMUM_SIZE,
    ENGINE
FROM INFORMATION_SCHEMA.FILES 
WHERE TABLESPACE_NAME = 'ts_ndb_multiple'
ORDER BY FILE_NAME;

-- Para InnoDB, ver general tablespaces
SELECT 
    SPACE,
    NAME,
    FLAG,
    ROW_FORMAT,
    PAGE_SIZE,
    SPACE_TYPE
FROM INFORMATION_SCHEMA.INNODB_TABLESPACES
WHERE NAME = 'ts_innodb_inicial';

-- ============================================================================
-- 4. EXEMPLO PRÁTICO: DISTRIBUÇÃO DE CARGA EM NDB
-- ============================================================================

-- CenĂĄrio: Tablespace com 4 datafiles em diferentes discos
CREATE LOGFILE GROUP lg_distributed
ADD UNDOFILE '/disk1/mysql/undo_distributed.dat'
INITIAL_SIZE = 256M
UNDO_BUFFER_SIZE = 128M
ENGINE = NDB;

CREATE TABLESPACE ts_distributed
ADD DATAFILE '/disk2/mysql/data_file1.dat'
USE LOGFILE GROUP lg_distributed
INITIAL_SIZE = 1G
EXTENT_SIZE = 1M
MAX_SIZE = 10G
NODEGROUP = 0
ENGINE = NDB;

-- Adicionar datafiles em diferentes discos para performance
ALTER TABLESPACE ts_distributed
ADD DATAFILE '/disk3/mysql/data_file2.dat'
INITIAL_SIZE = 1G
ENGINE = NDB;

ALTER TABLESPACE ts_distributed
ADD DATAFILE '/disk4/mysql/data_file3.dat'
INITIAL_SIZE = 1G
ENGINE = NDB;

ALTER TABLESPACE ts_distributed
ADD DATAFILE '/disk5/mysql/data_file4.dat'
INITIAL_SIZE = 1G
ENGINE = NDB;

-- ============================================================================
-- 5. ALTERNATIVAS PARA InnoDB
-- ============================================================================

/*
Como InnoDB nĂŁo suporta mĂșltiplos datafiles por tablespace,
as alternativas sĂŁo:

1. USAR AUTO-EXTEND (recomendado)
   - O arquivo cresce automaticamente conforme necessĂĄrio
   - Mais simples de gerenciar

2. MÚLTIPLOS TABLESPACES
   - Criar vĂĄrios tablespaces com 1 datafile cada
   - Distribuir tabelas entre eles

3. PARTICIONAMENTO
   - Particionar tabelas grandes
   - Cada partição pode estar em tablespace diferente
*/

-- Exemplo: MĂșltiplos tablespaces InnoDB
CREATE TABLESPACE ts_innodb_part1
ADD DATAFILE '/disk1/mysql/ts_part1.ibd'
AUTOEXTEND_SIZE = 64M
ENGINE = InnoDB;

CREATE TABLESPACE ts_innodb_part2
ADD DATAFILE '/disk2/mysql/ts_part2.ibd'
AUTOEXTEND_SIZE = 64M
ENGINE = InnoDB;

CREATE TABLESPACE ts_innodb_part3
ADD DATAFILE '/disk3/mysql/ts_part3.ibd'
AUTOEXTEND_SIZE = 64M
ENGINE = InnoDB;

-- Tabela particionada usando mĂșltiplos tablespaces
CREATE TABLE vendas_particionada (
    id INT AUTO_INCREMENT,
    data_venda DATE,
    valor DECIMAL(10,2),
    PRIMARY KEY (id, data_venda)
)
PARTITION BY RANGE (YEAR(data_venda)) (
    PARTITION p2023 VALUES LESS THAN (2024) TABLESPACE ts_innodb_part1,
    PARTITION p2024 VALUES LESS THAN (2025) TABLESPACE ts_innodb_part2,
    PARTITION p2025 VALUES LESS THAN (2026) TABLESPACE ts_innodb_part3
);

-- ============================================================================
-- RESUMO FINAL
-- ============================================================================

/*
CAPACIDADES POR ENGINE:

InnoDB:
✗ NĂŁo suporta mĂșltiplos datafiles no CREATE TABLESPACE
✗ Não suporta ALTER TABLESPACE ADD DATAFILE
✓ Suporta auto-extend (recomendado)
✓ Alternativa: mĂșltiplos tablespaces + particionamento

NDB:
✓ Suporta mĂșltiplos datafiles via ALTER TABLESPACE
✓ Ideal para distribuição de carga em cluster
✓ Permite adicionar datafiles dinamicamente
✓ Melhor controle sobre localização dos arquivos

RECOMENDAÇÃO:
- InnoDB: Use auto-extend ou particionamento
- NDB: Use mĂșltiplos datafiles conforme necessĂĄrio
*/

-- ============================================================================
-- COMANDOS ALTER TABLESPACE MAIS COMPLETOS POR ENGINE
-- ============================================================================

-- ============================================================================
-- 1. NDB ENGINE - OPERAÇÕES COM DATAFILES
-- ============================================================================

-- Adicionar datafile ao tablespace NDB
ALTER TABLESPACE ts_ndb_complete
ADD DATAFILE 'ts_ndb_additional_01.dat'
INITIAL_SIZE = 512M
WAIT
ENGINE = NDB;

-- Adicionar mĂșltiplos datafiles sequencialmente
ALTER TABLESPACE ts_ndb_complete
ADD DATAFILE 'ts_ndb_additional_02.dat'
INITIAL_SIZE = 1G
WAIT
ENGINE = NDB;

ALTER TABLESPACE ts_ndb_complete
ADD DATAFILE 'ts_ndb_additional_03.dat'
INITIAL_SIZE = 1G
WAIT
ENGINE = NDB;

-- Remover datafile do tablespace NDB
ALTER TABLESPACE ts_ndb_complete
DROP DATAFILE 'ts_ndb_additional_01.dat'
WAIT
ENGINE = NDB;

-- Renomear tablespace NDB
ALTER TABLESPACE ts_ndb_complete
RENAME TO ts_ndb_renamed
ENGINE = NDB;

-- ============================================================================
-- 2. NDB ENGINE - UNDO TABLESPACE OPERATIONS
-- ============================================================================

-- Adicionar datafile ao UNDO tablespace NDB
ALTER UNDO TABLESPACE undo_ts_ndb_complete
ADD DATAFILE 'undo_ts_ndb_additional.dat'
INITIAL_SIZE = 256M
WAIT
ENGINE = NDB;

-- Remover datafile do UNDO tablespace NDB
ALTER UNDO TABLESPACE undo_ts_ndb_complete
DROP DATAFILE 'undo_ts_ndb_additional.dat'
WAIT
ENGINE = NDB;

-- Renomear UNDO tablespace NDB
ALTER UNDO TABLESPACE undo_ts_ndb_complete
RENAME TO undo_ts_ndb_renamed
ENGINE = NDB;

-- ============================================================================
-- 3. InnoDB ENGINE - ADICIONAR DATAFILES E CONFIGURAÇÕES
-- ============================================================================

-- ✅ FUNCIONA: Adicionar datafile ao tablespace InnoDB
-- (Suportado em versÔes específicas do MySQL/MariaDB)
ALTER TABLESPACE ts_innodb_complete
ADD DATAFILE '/u01/oradata/df_innodb_02.ibd'
INITIAL_SIZE = 48M
ENGINE = InnoDB;

-- Adicionar mĂșltiplos datafiles ao InnoDB
ALTER TABLESPACE ts_innodb_complete
ADD DATAFILE '/u01/oradata/df_innodb_03.ibd'
INITIAL_SIZE = 64M
ENGINE = InnoDB;

ALTER TABLESPACE ts_innodb_complete
ADD DATAFILE '/u01/oradata/df_innodb_04.ibd'
INITIAL_SIZE = 128M
ENGINE = InnoDB;

-- Alterar AUTOEXTEND_SIZE do tablespace InnoDB
ALTER TABLESPACE ts_innodb_complete
AUTOEXTEND_SIZE = 128M
ENGINE = InnoDB;

-- Ativar criptografia no tablespace InnoDB
ALTER TABLESPACE ts_innodb_complete
ENCRYPTION = 'Y'
AUTOEXTEND_SIZE = 64M
ENGINE = InnoDB;

-- Desativar criptografia no tablespace InnoDB
ALTER TABLESPACE ts_innodb_complete
ENCRYPTION = 'N'
ENGINE = InnoDB;

-- Renomear tablespace InnoDB
ALTER TABLESPACE ts_innodb_complete
RENAME TO ts_innodb_renamed
AUTOEXTEND_SIZE = 64M
ENCRYPTION = 'Y'
ENGINE = InnoDB;

-- ============================================================================
-- 4. InnoDB ENGINE - UNDO TABLESPACE STATUS
-- ============================================================================

-- Definir UNDO tablespace como ATIVO
ALTER UNDO TABLESPACE undo_ts_innodb_complete
SET ACTIVE
AUTOEXTEND_SIZE = 256M
ENCRYPTION = 'Y'
ENGINE = InnoDB;

-- Definir UNDO tablespace como INATIVO
ALTER UNDO TABLESPACE undo_ts_innodb_complete
SET INACTIVE
AUTOEXTEND_SIZE = 128M
ENCRYPTION = 'N'
ENGINE = InnoDB;

-- Renomear UNDO tablespace InnoDB com todas as opçÔes
ALTER UNDO TABLESPACE undo_ts_innodb_complete
RENAME TO undo_ts_innodb_renamed
SET ACTIVE
AUTOEXTEND_SIZE = 512M
ENCRYPTION = 'Y'
ENGINE = InnoDB;

-- ============================================================================
-- 5. OPERAÇÕES COMBINADAS COMPLEXAS
-- ============================================================================

-- NDB: Adicionar datafile com todas opçÔes disponíveis
ALTER TABLESPACE ts_ndb_production
ADD DATAFILE '/data/mysql/ndb/ts_prod_extra_01.dat'
INITIAL_SIZE = 2G
WAIT
RENAME TO ts_ndb_production_v2
ENGINE = NDB;

-- InnoDB: Modificar todas configuraçÔes simultaneamente
ALTER TABLESPACE ts_innodb_production
RENAME TO ts_innodb_production_v2
AUTOEXTEND_SIZE = 256M
ENCRYPTION = 'Y'
ENGINE = InnoDB;

-- InnoDB UNDO: Configuração completa de produção
ALTER UNDO TABLESPACE undo_production
RENAME TO undo_production_primary
SET ACTIVE
AUTOEXTEND_SIZE = 1G
ENCRYPTION = 'Y'
ENGINE = InnoDB;

-- ============================================================================
-- 6. CENÁRIOS PRÁTICOS DE MANUTENÇÃO
-- ============================================================================

-- CenĂĄrio 1: ExpansĂŁo de capacidade NDB
-- Adicionar mĂșltiplos datafiles para aumentar capacidade
ALTER TABLESPACE ts_app_data
ADD DATAFILE '/storage/fast/mysql/app_data_ssd_01.dat'
INITIAL_SIZE = 5G
WAIT
ENGINE = NDB;

ALTER TABLESPACE ts_app_data
ADD DATAFILE '/storage/bulk/mysql/app_data_bulk_01.dat'
INITIAL_SIZE = 10G
WAIT
ENGINE = NDB;

-- Cenårio 2: Migração e otimização InnoDB
-- Renomear e otimizar configuraçÔes
ALTER TABLESPACE ts_legacy_data
RENAME TO ts_optimized_data
AUTOEXTEND_SIZE = 512M
ENCRYPTION = 'Y'
ENGINE = InnoDB;

-- CenĂĄrio 3: Gerenciamento de UNDO tablespaces
-- Alternar entre UNDO tablespaces para manutenção
ALTER UNDO TABLESPACE undo_primary
SET INACTIVE
ENGINE = InnoDB;

ALTER UNDO TABLESPACE undo_secondary
SET ACTIVE
AUTOEXTEND_SIZE = 2G
ENCRYPTION = 'Y'
ENGINE = InnoDB;

-- CenĂĄrio 4: Rebalanceamento de storage NDB
-- Remover datafiles de storage lento
ALTER TABLESPACE ts_high_performance
DROP DATAFILE 'slow_storage_file.dat'
WAIT
ENGINE = NDB;

-- Adicionar datafiles em storage rĂĄpido
ALTER TABLESPACE ts_high_performance
ADD DATAFILE '/nvme/mysql/high_perf_01.dat'
INITIAL_SIZE = 8G
WAIT
ENGINE = NDB;

-- ============================================================================
-- 7. VERIFICAÇÃO E MONITORAMENTO
-- ============================================================================

-- Verificar status dos tablespaces após alteraçÔes
SELECT 
    TABLESPACE_NAME,
    FILE_NAME,
    FILE_TYPE,
    TOTAL_EXTENTS,
    FREE_EXTENTS,
    INITIAL_SIZE,
    MAXIMUM_SIZE,
    AUTOEXTEND_SIZE,
    ENGINE
FROM INFORMATION_SCHEMA.FILES 
WHERE ENGINE IN ('NDB', 'InnoDB')
ORDER BY TABLESPACE_NAME, FILE_NAME;

-- Verificar UNDO tablespaces InnoDB
SELECT 
    SPACE,
    NAME,
    STATE,
    SPACE_TYPE
FROM INFORMATION_SCHEMA.INNODB_TABLESPACES
WHERE SPACE_TYPE = 'Undo'
ORDER BY NAME;

-- ============================================================================
-- EXPLICAÇÃO DETALHADA DOS PARÂMETROS
-- ============================================================================

/*
PARÂMETROS POR ENGINE:

NDB EXCLUSIVO:
- ADD DATAFILE: Adiciona novo arquivo de dados
- DROP DATAFILE: Remove arquivo de dados (deve estar vazio)
- INITIAL_SIZE: Tamanho inicial do novo datafile
- WAIT: Aguarda conclusão da operação

InnoDB (DEPENDE DA VERSÃO):
- ADD DATAFILE: ✅ SUPORTADO em versĂ”es especĂ­ficas
- INITIAL_SIZE: Tamanho inicial do novo datafile
- AUTOEXTEND_SIZE: Tamanho do incremento automĂĄtico
- SET ACTIVE/INACTIVE: Estado do UNDO tablespace
- ENCRYPTION: Ativação/desativação da criptografia

PARÂMETROS COMUNS:
- RENAME TO: Renomeia o tablespace
- ENGINE: Especifica a engine (pode ser omitido)

SUPORTE POR VERSÃO:

MySQL 8.0 (documentação oficial):
❌ ADD DATAFILE não suportado para InnoDB

VersÔes específicas/MariaDB:
✅ ADD DATAFILE suportado para InnoDB
✅ INITIAL_SIZE funciona com InnoDB

IMPORTANTE: 
- O suporte pode variar entre versÔes do MySQL/MariaDB
- Sempre teste em ambiente de desenvolvimento primeiro
- Verifique a documentação da sua versão específica

VALORES RECOMENDADOS:
- AUTOEXTEND_SIZE InnoDB: 64M-1G (dependendo do uso)
- INITIAL_SIZE: 48M-1G (dependendo do datafile)
- ENCRYPTION: 'Y' para dados sensĂ­veis
- Sempre usar WAIT em operaçÔes NDB críticas
*/

Bueno, Ă© isso ae cambada, mais uma do golfinho pra vocĂȘs, espero que aproveitem e se organizem como bons DBA Oracle, quero dizer, DBA MySQL👀