O INFORMATION_SCHEMA é, em teoria, um conjunto de visões especificadas no padrão SQL que permitem ao usuário inspecionar os metadados do sistema. Como isso é implementado no MySQL?
Quando me conecto a uma nova instalação, vejo dois bancos de dados: mysql
e information_schema
. Depois de usar SHOW CREATE TABLE
instruções no information_schema
banco de dados, parece que não foi implementado como um conjunto de visualizações, mas sim com tabelas base. Essa suposição está correta? Ou existem outras tabelas do sistema que estão ocultas do usuário?
O banco de dados INFORMATION_SCHEMA é composto de tabelas temporárias usando o mecanismo de armazenamento MEMORY.
Exemplo: Aqui está a tabela INFORMAÇÕES_SCHEMA.TABLES no MySQL 5.5.12 (versão Windows)
Não há pasta física para essas tabelas, nem mesmo arquivos .frm. Você não pode fazer mysqldump. Você não pode abandoná-lo. Você não pode adicionar tabelas a ele. Você não pode descartar tabelas dele. Então, onde estão as mesas ???
Todas as tabelas no banco de dados INFORMATION_SCHEMA são armazenadas diretamente na memória como tabelas do mecanismo de armazenamento MEMORY. Eles são totalmente internos ao MySQL, então os mecanismos .frm são manipulados no mysqld. Em minha resposta, mostrei primeiro o layout da tabela de INFORMATION_SCHEMA.TABLES. É uma tabela temporária na memória. Ele é manipulado usando protocolos de mecanismo de armazenamento. Assim, quando o mysqld é encerrado, todas as tabelas information_schema são descartadas. Quando o mysqld é iniciado, todas as tabelas information_schema são criadas como tabelas TEMPORARY e preenchidas novamente com metadados para cada tabela na instância do mysql.
O banco de dados INFORMATION_SCHEMA foi introduzido pela primeira vez no MySQL 5.0 para fornecer acesso a metadados sobre tabelas de outros mecanismos de armazenamento. Por exemplo, você poderia fazer SHOW DATABASES para obter uma lista de bancos de dados. Você também pode consultá-los assim:
Você pode recuperar nomes de tabelas em um banco de dados de duas maneiras:
ou
Desde a sua criação, o MySQL expandiu o banco de dados INFORMATION_SCHEMA para ter a lista de processos (a partir do MySQL 5.1). Na verdade, você pode consultar a lista de processos procurando por consultas de execução longa que ainda estão em execução por pelo menos 10 minutos:
Você pode usar o INFORMATION_SCHEMA para fazer todas as coisas elaboradas: como:
Obtenha contagens de todas as tabelas usando mecanismos de armazenamento específicos:
Obtenha o tamanho do buffer de chave MyISAM recomendado em MB
Obtenha o tamanho recomendado do pool de buffer InnoDB em GB
Obtenha o uso do disco de todos os bancos de dados pelo mecanismo de armazenamento em MB
Acredite em mim, ainda existem usos maravilhosos para INFORMAÇÃO_SCHEMA que o tempo não me permite discutir mais.
Lembre-se de que o INFORMATION_SCHEMA é tão sensível que, se o mysql estiver em execução e você fizer o seguinte:
e então entre no mysql run
Você verá junkfolder como um dos bancos de dados.
Saber disso é muito importante para DBAs e desenvolvedores. Capítulo 20 (desenvolvedores) e Capítulo 31 (DBAs) do livro MySQL 5.0 Certification Study Guide
estão lá para se preparar para os Exames de Certificação de Desenvolvedor e DBA. Obtenha o livro, estude bem esses capítulos e você poderá fazer grandes coisas com o INFORMATION_SCHEMA do MySQL.
O banco de dados INFORMAÇÕES_SCHEMA a partir do MySQL 5.5, agora possui plugins, variáveis globais (status e estáticas), variáveis de sessão (status e estáticas), status do mecanismo de armazenamento, instrumentação de métricas de desempenho, mapa de trigger, eventos (programáveis) e muito mais.
Desculpe, isso pode parecer WTMI, mas sou um grande defensor do uso do banco de dados INFORMATION_SCHEMA.