Arquivo da tag: mysql

MySQL 5.7 – Explain de Sessão

Como sempre digo… uma conexão em um banco de dados pode ser chamada de thread, sessão, conexão, etc. Cada um dá o nome que quiser à conexão feita em seu banco de dados. Nunca, jamais, discuta com o DBA!

Cenário: Uma query está rodando no MySQL. Roubando sua paciência, além de recursos de I/O, memória, CPU, etc. Antes de dar um Kill básico, voce gostaria (mas, muito) de saber que diabos esta query está fazendo.

DBA que é DBA usa a tela preta. No terminal, vc teria que dar um show full processlist, rezar para que o conteúdo da query caiba no tamanho limite, recortar a query e colar após um comando explain.

Continue lendo MySQL 5.7 – Explain de Sessão

Novo MySQL 8.0 lançado!

Todos os anos novos produtos são lançados. Na área de TI não é diferente. Já vi muita coisa boa ser lançada, reeditada, copiada… Mas, também já vi muito lixo tecnológico e “emblomation” de marketing. Nestes 34 anos de TI, já muita coisa. No mundo de banco de dados não é diferente.

O MySQL escorregou em alguns lançamentos. Mas, não é o caso desta versão 8.0 que traz algumas significativas melhorias. Na minha opinião, o que realmente conta:

Dicionário de Dados: Quem tem muitos objetos em sua instância vai entender o do que estou falando. Tenho clientes com mais de 3 milhões de objetos, e, não é divertido dar um simples SELECT no (DES)INFORMATION_SCHEMA. Travamento de instância, lentidão, LOCK (YES, LOCKS!). O novo dicionário de dados, chega em boa hora, e, parece resolver este problema.

ROLES! Nada faz mais sentido do que agrupar um monte de papéis e atribuir estes papéis a um determinado usuário, ao invés da eterna chatice de ficar atribuindo um-a-um cada privilégio de cada sujeito. Os mais malas-sem-alça, certamente, já tinha criado uma PROC para copiar privilégios. Mas, pára! Estamos nos século 21, estava na hora!

Índices invisíveis: Não entendi? Para que eu quero um índice que nem o MySQL enxerga, e, não usa em nenhuma query. Ah! Pequeno Padawan, eu explico. Nunca “dropou” um índice de uma tabela gigante, se arrependeu, e, depois ficou assistindo toda uma temporada de GoT, enquanto, recriava o maldito índice? Essa é a vantagem dos índices invisíveis. Voce coloca um índice na geladeira, se ninguém deu falta dele, após algum tempo, voce capa ele fora.

Continue lendo Novo MySQL 8.0 lançado!

MySQL 5.7 – TableSpace Genéricas v2.0 – A nova Onda

O conceito de tablespace não tem nada de novo. Só não é mais velho que eu. Vários outros RDBMS (bancos de dados) o implementam faz algum tempo. No MySQL foi implementado pelos primórdios do innoDB.

Em linhas gerais o que é uma tablespace?
Tem algumas palavras em inglês que não fazem o menor sentido traduzidas, ou, em traduzi-las. Concorda comigo? Para mim, tablespace é uma dessas palavras. Vamos lá: “espaço de tabelas”. Tablespace é uma área, física e/ou lógica, na qual se aglomeram uma ou mais tabelas. É como se fosse uma área reservada para uma, ou, um grupo de tabelas. Seja com o objetivo de organização (tabelas com mesmo fim, aplicação, etc), volumetria, performance, segurança, etc.

O MySQL e sua épica jornada com tablespaces
No princípio de tudo, e até a chegada da versão 5.1, todas as tabelas com storage engine innoDB eram, compulsoriamente, criadas dentro de uma tablespace única, também chamada de compartilhada (shared tablespace). Fisicamente, consistia de um arquivo com síndrome de Buzz (pois, crescia ao infinito e além), de nome ibdata, que, ficava logo abaixo da raiz do DATADIR (diretório de dados, definido pela variável datadir, e, onde reside o schema do MySQL). Esta implementação me rendeu muitas horas de sono, pois, era uma verdadeira armadilha. Por ser um único arquivo contendo várias tabelas, apresentava contenções de S/O, era de difícil sustentação e manutenção.

Continue lendo MySQL 5.7 – TableSpace Genéricas v2.0 – A nova Onda