Desde a versão 5.5 do MySQL o storage engine InnoDB vem configurado “de fábrica” como padrão. O InnoDB é um storage engine transacional, 100% ACID, estável e robusto, e, inteiramente, grátis. Reconhecidamente, fez progressos notáveis desde o MySQL 4.x. Com destaques para as melhorias implementadas nas versões: 5.1, 5.5, 5.6, e, recentemente na 5.7. O … Continue lendo O MyISAM está morto? →
Quem nunca utilizou ou desenvolveu um sistema ou website e percebeu que os acessos, consultas e registros estavam lentos? Quando este problema é detectado a primeira coisa que fazemos é ver se a nossa conexão com a internet está lenta ou se o banco ou o código estão otimizados. E o SGBD? Já pararam para pensar que em muitos casos de lentidão o culpado é o servidor onde o seu banco de dados está? Pode ser por configuração errada, rede com problemas ou não foi projetada de uma forma inteligente ou até mesmo o SO do servidor!
Hoje eu vou passar algumas dicas e experiências que adquiri como DBA e com isso ajudá-los a ter um MySQL Server rápido e que não seja o “gargalo” ou o vilão da história.
Sistema Operacional
Antes de começarmos, vale lembrar que o ideal é sempre estar com a versão estável mais atual do MySQL Server e do seu SO. Não esqueça, os updates ajudam na segurança e …
[Leia mais]Quem nunca utilizou ou desenvolveu um sistema ou website e percebeu que os acessos, consultas e registros estavam lentos? Quando este problema é detectado a primeira coisa que fazemos é ver se a nossa conexão com a internet está lenta ou se o banco ou o código estão otimizados. E o SGBD? Já pararam para pensar que em muitos casos de lentidão o culpado é o servidor onde o seu banco de dados está? Pode ser por configuração errada, rede com problemas ou não foi projetada de uma forma inteligente ou até mesmo o SO do servidor!
Hoje eu vou passar algumas dicas e experiências que adquiri como DBA e com isso ajudá-los a ter um MySQL Server rápido e que não seja o “gargalo” ou o vilão da história.
Sistema Operacional
Antes de começarmos, vale lembrar que o ideal é sempre estar com a versão estável mais atual do MySQL Server e do seu SO. Não esqueça, os updates ajudam na segurança e …
[Leia mais]Olá, pessoal! Neste episódio do DatabaseCast, Mauro Pichiliani (Twitter | Blog), Wagner Crivelini (@wcrivelini) e o convidado Ricardo Rezende (@ricarezende) separam os dados como se eles estivesse dentro de um pacote de M&Ms. Neste episódio você vai aprender quais são os tipos de particionamento no Oracle, SQL Server, MySQL, PostgreSQL, MongoDB e Cassandra, discutir se o Hadoop é ou não um banco de dados, mandar um alô para o pessoal do Suriname e da Suécia e aprender a chamar certas soluções de gambiware.
…
[Leia mais]A ideia aqui é introduzir os conceitos de particionamento, exibir os recursos disponíveis no MySQL e passar um exemplo prático de como uma tabela pode ser particionada e quais os benefícios dessa prática. Futuramente abordarei o “subparticionamento”, veja os tópicos que serão abordados:
- Conceitos de particionamento
- Tipos de particionamento
- Elegendo as clausulas de particionamento
- Exemplo prático de particionamento
- Manutenção
- Limitações no MySQL (atualmente)
Conceitos:
O particionamento é um recurso clássico de banco de dados que resolve muitos problemas de escalabilidade e performance além de facilitar o gerenciamento e armazenamento de grandes volumes de dados. Com esse recurso é possível segregar o armazenamento dos dados em segmentos segundo uma clausula, ou seja, por determinado dado presente no registro o mesmo será …
[Leia mais]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 […] ↓ Leia o restante deste post...
Muita gente já deve ter ouvido falar nos bancos de dados NoSQL e uma das ferramentas NoSQL muito utilizada é o memcached, no qual adicionamos uma camada de cache entre a aplicação e o banco de dados. Desde a versão 5.6 do MySQL, foi disponibilizado um plugin de integração entre o MySQL e o Memcached. Neste artigo publicado no iMasters eu mostro como instalar e configurar esta integração.
[Leia mais]Se o seu banco de dados passa por constantes operações de “DELETE” ou “UPDATE” ele provavelmente ficará fragmentado, fazendo com que os índices já não sejam tão eficientes como antes e os datafiles ocupem mais espaço do que o necessário em disco. Seria, algo similar a fragmentação de filesystem.
Através do catalogo do MySQL é possível identificar quanto espaço livre existe no datafile e assim identificar uma margem ou porcentagem de fragmentação por objeto. Até a versão 5.1.21 essa margem era descrita através da coluna “TABLE_COMMENT” da tabela “INFORMATION_SCHEMA.TABLES”, sendo assim bastava executar a seguinte consulta:
SELECT table_schema, table_name, table_comment FROM information_schema.tables WHERE engine LIKE 'InnoDB' AND table_comment RLIKE 'InnoDB free: ([0-9]{6,}).*';
Da versão 5.1.28 em diante isso foi corrigido, sendo possível avaliar a …
[Leia mais]Com o constante uso do banco de dados, operações como “delete” e “update” acabam causando a fragmentação dos objetos nos datafiles, e isso muitas vezes prejudica a performance do banco de dados e aloca espaço desnecessariamente. Com isso torna-se necessário implementar uma rotina de manutenção capaz de otimizar o ambiente, evitando o uso de espaço desnecessário e desfragmentando os índices da tabela para uma melhor performance.
Geralmente isso é feito manualmente ou através de shell scripts, mas preferi criar um “PROCEDURE” e implementar uma rotina via “SCHEDULE” próprio MySQL, segue:
# use mysql; # # TABELA DE LOG PARA MONITORAR O PROCESSO DROP TABLE IF EXISTS mysql.mantained_table_history; CREATE TABLE mysql.mantained_table_history( mantained_table_schema VARCHAR(255), mantained_table_name VARCHAR(255), mantained_type VARCHAR(255), mantained_status VARCHAR(10), mantained_date …[Leia mais]
Essa rotina foi desenvolvida com o intuito de atualizar as estatisticas de todos os databases da instância automaticamente, de forma dinâmica.
# use mysql; # # TABELA DE LOG PARA MONITORAR O PROCESSO DROP TABLE IF EXISTS mysql.mantained_table_history; CREATE TABLE mysql.mantained_table_history( TABLE_SCHEMA VARCHAR(255), TABLE_NAME VARCHAR(255), MANTEINED_TYPE VARCHAR(255), STATUS VARCHAR(10), DATE datetime, STARTIME datetime, ENDTIME datetime )engine=MyISAM; # # #ROTINA DE ANALYZE COM LOG + MONITORAMENTO # use mysql; # # PROCEDURE QUE REALIZA O ANALYZE # DELIMITER $$ DROP PROCEDURE IF EXISTS RotinaAnalyze $$ CREATE PROCEDURE RotinaAnalyze() BEGIN # DECLARE done INT DEFAULT FALSE; DECLARE query_analyze varchar(255); DECLARE ANALYZE_TABLE_SCHEMA varchar(255); DECLARE ANALYZE_TABLE_NAME varchar(255); DECLARE date_analyze datetime; DECLARE startime_analyze datetime; DECLARE endtime_analyze datetime; DECLARE analyze_tables CURSOR FOR select TABLE_SCHEMA, …[Leia mais]