O INFORMATION_SCHEMA é, em teoria, um conjunto de visualizações especificado no padrão SQL que permite 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 com tabelas base. Essa suposição está correta? Ou há outras tabelas do sistema ocultas do usuário?
mysql
information-schema
ivotron
fonte
fonte
Respostas:
O banco de dados INFORMATION_SCHEMA é composto de tabelas temporárias usando o mecanismo de armazenamento MEMORY.
Exemplo: Aqui está a tabela INFORMATION_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 mysqldump-lo. Você não pode abandoná-lo. Você não pode adicionar tabelas a ele. Você não pode soltar 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 tratados no mysqld. Na minha resposta, mostrei pela primeira vez o layout da tabela INFORMATION_SCHEMA.TABLES. É uma tabela temporária na memória. É manipulado usando protocolos de mecanismo de armazenamento. Assim, quando o mysqld é desligado, todas as tabelas information_schema são eliminadas. Quando o mysqld é iniciado, todas as tabelas information_schema são criadas como tabelas TEMPORARY e preenchidas novamente com metadados para todas as tabelas 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ê pode MOSTRAR BASES DE DADOS 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 consultas demoradas que ainda estejam 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 recomendado do buffer de chave MyISAM em MB
Obtenha o tamanho recomendado do buffer pool do InnoDB em GB
Obter uso de disco de todos os bancos de dados por mecanismo de armazenamento em MB
Acredite, ainda há usos mais maravilhosos para o INFORMATION_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 depois entrar no mysql run
Você verá a pasta de lixo eletrônico como um dos bancos de dados.
Saber isso é muito vital para DBAs e desenvolvedores. Capítulo 20 (desenvolvedores) e Capítulo 31 (DBAs) do livro MySQL 5.0 Certification Study Guide
existem para a preparação para os exames de certificação Developer e DBA. Compre o livro, estude bem esses capítulos e você poderá fazer grandes coisas com o INFORMATION_SCHEMA do MySQL.
O banco de dados INFORMATION_SCHEMA a partir do MySQL 5.5, agora possui plugins, variáveis globais (status e estático), variáveis de sessão (status e estático), status do mecanismo de armazenamento, instrumentação de métricas de desempenho, mapa de acionador, eventos (programáveis) e muito mais.
Desculpe, isso pode parecer WTMI, mas sou um grande defensor do uso do banco de dados INFORMATION_SCHEMA.
fonte