XOOPS Brasil

 

4.6. Administração do Banco de Dados e Referência de Linguagem

4.6.1. Sintaxe de OPTIMIZE TABLE

OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name[,tbl_name]...

OPTIMIZE TABLE deve ser usado se você apagou uma grande parte de uma tabela ou se você fez várias alterações à uma tabela com registros de tamanho variável (tabelas que tenham campos do tipo VARCHAR, BLOB ou TEXT). Registros apagados são mantidos em uma lista de ligações e operações INSERT subsequentes reutilizam posições de registros antigos. Você pode utilizar OPTIMIZE TABLE para reclamar o espaço inutilizado e para desfragmentar o arquivo de dados.

Na maioria da configurações você não tem que executar OPTIMIZE TABLE. Mesmo se você fizer diversas atualizações para registros de tamanhos variáveis não é desejável que você precise fazer isto mais que uma vez por mês/semana e apenas em determinadas tabelas.

No momento OPTIMIZE TABLE só funciona em tabelas MyISAM e BDB. Para tabelas BDB, OPTIMIZE TABLE é atualmente mapeado para ANALIZE TABLE. Veja mais informações sobre isto na Seção 4.6.2, “Sintaxe de ANALYZE TABLE.

Você pode ter a otimização de tabelas trabalhando em outros tipos de tabelas iniciando o mysqld com --skip-new ou --safe-mode, mas neste caso, OPTIMIZE TABLE é mapeado apenas para ALTER TABLE.

OPTIMIZE TABLE funciona da seguinte forma:

  • Se a tabela tem registros excluídos ou dividos, repara a tabela.

  • Se as páginas de índice não estão ordenas, ordene-as.

  • Se as estatísticas não estão atualizadas (e o reparo não pode ser feito ordenando o índice), atualize-as.

Perceba que a tabela estará bloqueada durante o tempo em que OPTIMIZE TABLE estiver executando.

Antes do MySQL 4.1.1, o OPTIMIZE comnado não gravava no log binário. Desde o MySQL 4.1.1 eles são escritos no log binário a menos que a palavra chave opcional NO_WRITE_TO_BINLOG (ou se alias LOCAL) seja usada.

4.6.2. Sintaxe de ANALYZE TABLE

ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name[,tbl_name...]

Analisa e armazena a distribuição de chaves para a tabela. Durante a análise a tabela é bloqueada com uma trava de leitura. Isto funciona em tabelas MyISAM e BDB.

Isto seria equivalente a executar myisamchk -a na tabela.

O MySQL utiliza a distribuição de chaves armazenadas para decidir em que ordem tabelas devem ser unidas quando alguém faz um join em alguma coisa diferente de uma constante.

O comando retorna uma tabela com as seguintes colunas:

ColunaValor
TableNome da Tabela
OpSempre analyze
Msg_typeUm dos seguintes: status, error, info ou warning
Msg_textA mensagem

Você pode verificar a distribuição de chaves armazenadas com o comando SHOW INDEX. Veja mais informações sobre isto na Seção 4.6.8.1, “Recuperando Informações sobre Bancos de Dados, Tabelas, Colunas e Índices”.

Se a tabela não foi alterada deste o último comando ANALYZE TABLE, a tabela não será analisada novamente.

Antes do MySQL 4.1.1, o ANALYZE comnado não gravava no log binário. Desde o MySQL 4.1.1 eles são escritos no log binário a menos que a palavra chave opcional NO_WRITE_TO_BINLOG (ou se alias LOCAL) seja usada.

4.6.3. Sintaxe de CHECKSUM TABLE

CHECKSUM TABLE tbl_name[,tbl_name ...] [ QUICK | EXTENDED ]

Reports a table checksum. If QUICK is specified, live table checksum is reported, or NULL if the table does not support live checksum. This is very fast. In EXTENDED mode the whole table is read row by row and the checksum is calculated. This can be very slow for large tables. By default - with neither QUICK nor EXTENDED - MySQL returns live checksum if the table support it and scans the table otherwise.

Este comando está implementado no MySQL 4.1.1.

4.6.4. Sintaxe de FLUSH

FLUSH [LOCAL | NO_WRITE_TO_BINLOG] flush_option [,flush_option] ...

Você deve utilizar o comando FLUSH se desejar limpar algum dos caches internos que o MySQL usa. Para executar FLUSH, você deve ter o privilégio RELOAD.

opções podem ser qualquer uma das seguintes:

OptionDescription
HOSTSEsvazia as tabelas de cache de nomes de máquinas. Você deve descarregar as tabelas de nomes de máquinas se alguma de suas máquinas receber um número IP diferente ou se você obter a mensagem de erro Host ... is blocked. Quando mais de max_connect_erros erros occorrer em um registro para uma determinada máquina enquanto se conecta ao servidor MySQL, o MySQL assume que algo está errado e bloqueia futuras requisições desta máquina. A descarga na tabela de nomes de máquinas permite à máquina se conectar novamente. Veja mais informações sobre isto na Seção A.2.5, “Erro: Host '...' is blocked.) Você pode iniciar o mysqld com -O max_connection_errors=999999999 para evitar esta mensagem de erro.
DES_KEY_FILERecarrega a chave DES do arquivo que foi especificado com a opção --des-key-file durante inicialização do servidor.
LOGSFecha e reabre todos os arquivos de log. Se você tiver especificado o arquivo de logs de atualizações ou um arquivo de log binário sem uma extensão, o número de extensão do arquivo log será sempre incrementado de um em relação ao arquivo anterior. Se você usou uma extensão no nome do arquivo, o MySQL irá fechar e reabrir o arquivo de log de atualizações. Veja mais informações sobre isto na Seção 4.10.3, “O Log de Atualizações”. Isto é a mesma coisa que enviar o sinal SIGHUP para o servidor mysqld.
PRIVILEGESRecarrega os privilégios das tabelas de permissões no banco de dados mysql.
QUERY CACHEDefragmenta a cache de consulta par utilizar melhor a sua memória. Este comando não remove qualquer consulta da cache, ao contrário de RESET QUERY CACHE.
TABLESFecha todas as tabelas abertas e força o fechamento de todas as tabelas em uso
[TABLE | TABLES] nome_tabela [,nome_tabela...]Descarga somente das tabelas fornecidas.
TABLES WITH READ LOCKFecha todas tabelas abertas e bloqueia todas tabelas para todos os bancos de dados com leitura até que alguém execute UNLOCK TABLES. Isto é uma maneira muito conveniente para fazer backups se você possui um sistema de arquivos, como Veritas, que pode fazer uma imagem instantânea (snapshot) de um certo momento.
STATUSReinicia a maioria das variáveis de status para zero. Isto é algo que deve ser usado somente para depurar uma consulta.
USER_RESOURCESZera todos os recirsos dos utilizadores. Isto permitirá que utilizadores bloqueados façam login novamente. Veja mais informações sobre isto na Seção 4.4.7, “Limitando os Recursos dos Utilizadores”.

Antes do MySQL 4.1.1, o FLUSH comnado não gravava no log binário. Desde o MySQL 4.1.1 eles são escritos no log binário a menos que a palavra chave opcional NO_WRITE_TO_BINLOG (ou se alias LOCAL) seja usada, ou que o comando contenha um dos argumentos: LOGS, MASTER, SLAVE, TABLES WITH READ LOCK, pois qualquer um desses argumwentos podem causar problemas se replicados para um slave.

Você pode também acessar cada um dos comandos vistos acima com o utilitário mysqladmin, utilizando os comandos flush-hosts, flush-logs, reload ou flush-tables.

Também de uma olhada no comando RESET usado com a replicação. Veja mais informações sobre isto na Seção 4.6.5, “Sintaxe de RESET.

4.6.5. Sintaxe de RESET

RESET reset_option [,reset_option] ...

O comando RESET é usado para limpar coisas. Ele também atua como uma versão mais forte do comando FLUSH. Veja mais informações sobre isto na Seção 4.6.4, “Sintaxe de FLUSH.

Para executar RESET, você deve ter o privilégio RELOAD.

OpçãoDescrição
MASTERDeleta todos os logs binários listados no arquivo índice, esvaziando o arquivo de índice do log binário. Anteriormente chamado FLUSH MASTER. Veja mais informações sobre isto na Seção 4.11.7, “Instruções SQL para Controle do Servidor Master”.
SLAVEFaz o slave ``esquecer'' a sua posição de replicação no log binário do master. Anteriormente chamado FLUSH SLAVE. Veja mais informações sobre isto na Seção 4.11.8, “Instruções SQL para Controle do Servidor Slave”.
QUERY CACHERemove todos os resulatdos de consultas da cache de consultas.

4.6.6. Sintaxe de PURGE MASTER LOGS

PURGE {MASTER|BINARY} LOGS TO nome_binlog
PURGE {MASTER|BINARY} LOGS BEFORE data

Este comando é usado para deletar todos os logs binários estritamente anteriores ao binlog ou data especificada. Veja mais informações sobre isto na Seção 4.11.7, “Instruções SQL para Controle do Servidor Master”.

PURGE BINARY LOGS está disponível como um sinônimo para PURGE MASTER LOGS a partir do MySQL 4.1.1.

4.6.7. Sintaxe de KILL

KILL thread_id

Cada conexão ao mysqld executa em uma thread separada. Você pode ver quais threas estão em execução com o comando SHOW PROCESSLIST e matar uma thread com o comando KILL thread_id.

Se você tiver o privilégio PROCESS, você pode ver todas as threads. Se você tiver o privilégio SUPER, você pode matar todas as threads. Caso contrário, você pode ver e matar somente suas próprias threads.

Você também pode usar os comandos mysqladmin processlist e mysqladmin kill para examinar e matar threads.

Nota: Atualmente você não pode utilizar KILL com a biblioteca do servidor MySQL embutido, porque o servidor embutido apenas roda dentro das threads da aplicação, ela não cria threads de conexões por si própria.

Quando você utiliza um KILL, um sinal (flag) kill especifico é configurado para a thread.

Na maioria dos casos pode levar algum tempo para a thread morrer pois o sinal kill só é checado em intervalos específicos.

  • Nos loops SELECT, ORDER BY e GROUP BY, o sinal é checado depois de ler um bloco de registros. Se o sinal kill está habilitado a instrução é abortada.

  • Na execução de um ALTER TABLE o sinal kill é conferido antes de cada bloco de registros ser lido da tabela original. Se o sinal kill foi habilitado, o comando é abortado e a tabela temporária apagada.

  • Ao fazer um UPDATE TABLE and DELETE TABLE, o sinal de kill é conferido depois de que cada bloco é lido e depois de cada atualização ou remoção de registro. Se o sinal kill está habilitado, a instrução é abortada. Note que se você não estiver utilizando transações, as alterações não irão ser desfeitas!

  • GET_LOCK() irá aborar com NULL.

  • Uma thread INSERT DELAYED irá rapidamente descarregar todos registros que estiverem em memória e morrer.

  • Se a thread estiver no manipulador de bloqueio de tabelas (status: Locked), o bloqueio de tabela será abortado rapidamente.

  • Se a thread estiver esperando por espaço livre em disco numa chamada write, a escrita é abortada com uma mensagem de espaço em disco insuficiente.

4.6.8. Sintaxe de SHOW

 SHOW DATABASES [LIKE wild]
ou SHOW [OPEN] TABLES [FROM nome_bd] [LIKE wild]
ou SHOW [FULL] COLUMNS FROM nome_tbl [FROM nome_bd] [LIKE wild]
ou SHOW INDEX FROM nome_tbl [FROM nome_bd]
ou SHOW TABLE STATUS [FROM nome_bd] [LIKE wild]
ou SHOW STATUS [LIKE wild]
ou SHOW VARIABLES [LIKE wild]
ou SHOW [BDB] LOGS
ou SHOW [FULL] PROCESSLIST
ou SHOW GRANTS FOR user
ou SHOW CREATE TABLE nome_tbl
ou SHOW MASTER STATUS
ou SHOW MASTER LOGS
ou SHOW SLAVE STATUS
ou SHOW WARNINGS [LIMIT row_count]
ou SHOW ERRORS [LIMIT row_count]
ou SHOW TABLE TYPES

SHOW fornece informações sobre bancos de dados, tabelas, colunas ou informações do estado do servidor. Se a parte LIKE wild é usada, a string wild pode ser uma string que usa os meta caracteres ‘%’ e ‘_’ do SQL.

4.6.8.1. Recuperando Informações sobre Bancos de Dados, Tabelas, Colunas e Índices

Você pode usar nome_bd.nome_tabela como uma alternativa para a sintaxe nome_tabela FROM nome_bd. Estas duas declarações são equivalentes:

mysql> SHOW INDEX FROM minhatabela FROM meudb;
mysql> SHOW INDEX FROM meubd.minhatabela;

SHOW DATABASES lista os bancos de dados no servidor MySQL. Você também pode obter esta lista utilizando o comando mysqlshow. Na versão 4.0.2 você verá apenas aqeules banco de dados para os quais você tem algum tipo de privilégio, se você não tiver o privilégio global SHOW DATABASES.

SHOW TABLES lista as tabelas em um banco de dados específico. Esta lista também pode ser obtida utilizando o comando mysqlshow nome_db.

NOTA: Se um utilizador não possui nenhum privilégio para uma tabela, a tabela não será mostrada na saída de SHOW TABLES ou mysqlshow nome_db

SHOW OPEN TABLES lista as tabelas que estão abertas no cache de tabelas. Veja mais informações sobre isto na Seção 5.4.7, “Como o MySQL Abre e Fecha as Tabelas”. O campo Comment diz quantas vezes a tabela está em cached e in_use.

SHOW COLUMNS lista as colunas em uma determinada tabela. Se você especificar a opção FULL, também irá obter os privilégios que você possui para cada coluna. Se os tipos de colunas forem diferentes do que você esperava baseando na declaração CREATE TABLE, perceba que o MySQL algumas vezes altera os tipos das colunas. Veja mais informações sobre isto na Seção 6.5.3.1, “Alteração de Especificações de Colunas”. A partir do MySQL 4.1, a palavra chave FULL também faz com que qualquer comentário por coluna seja mostrado.

A instrução DESCRIBE fornece informação similar à SHOW COLUMNS. Veja mais informações sobre isto na Seção 6.6.2, “Sintaxe DESCRIBE (Obtem Informações Sobre Colunas)”.

SHOW FIELDS é um sinônimo para SHOW COLUMNS e SHOW KEYS um sinônimo para SHOW INDEX. Você também pode listar as colunas ou índices de uma tabela com mysqlshow nome_db nome_tabela ou mysqlshow -k nome_bd nome_tabela.

SHOW INDEX retorna a informação de índice em um formato que lembra bem a chamada SQLStatistics do ODBC. As seguintes colunas são retornadas:

ColunaSignificado
TableNome da tabela.
Non_unique0 se o índice não puder conter duplicidades, 1 se puder
Key_nameNome do índice.
Seq_in_indexNúmero da sequência da coluna no índice, à partir de 1.
Column_nameNome da coluna.
CollationComo a coluna é ordenada no índice. No MySQL, pode ter valores ‘A’ (Ascendente) ou NULL (Not sorted).
CardinalityNúmero de valores únicos no índice. Isto é atualizado executando isamchk -a.
Sub_partNúmero de caracteres indexados se a coluna só é a indexada parcialmente. NULL se a chave inteira for indexada.
NullContém 'YES' se a coluna puder conter NULL.
Index_typeMétodo de índice utilizado.
CommentVários comentários. No momento, ele diz no MySQL < 4.0.2 se o índice é FULLTEXT ou não.

Perceba que como o Cardinality é contado baseado nas estatísticas armazenadas como inteiros, ele pode não ser exato para tabelas pequenas.

As colunas Null e Index_type foram adicionadas no MySQL 4.0.2.

4.6.8.2. SHOW TABLE STATUS

SHOW TABLE STATUS [FROM nome_bd] [LIKE wild]

SHOW TABLE STATUS (introduzido na versão 3.23) funciona como o SHOW STATUS, mas fornece muitas informações sobre cada tabela. Você também pode obter esta lista utilizando o comando mysqlshow --status nome_bd. As seguintes colunas são retornadas:

ColunaSignificado
NameNome da tabela.
TypeTipo da tabela. Veja mais informações sobre isto na Capítulo 7, Tipos de Tabela do MySQL.
Row_formatO formato de armazenamento do registro (Fixed (Fixo), Dynamic(dinâmico), ou Compressed (Compactado)).
RowsNúmero de registros.
Avg_row_lengthTamanho médio do registro.
Data_lengthTamanho do arquivo de dados.
Max_data_lengthTamanho máximo do arquivo de dados. Para formatos de registro fixo, este é o número maimo de registros na tabela. Para formatos de registro dinâmicos, este é o número total de bytes de dados que pode ser armazenados na tabela, dado o tamanho do ponteiro de dados utilizado.
Index_lengthTamanho do arquivo de índice.
Data_freeNúmero de bytes alocados mas não utilizados.
Auto_incrementPróximo valor do auto incremento.
Create_timeQuando a tabela foi criada.
Update_timeA última vez que arquivo de dados foi atualizado.
CollationConjunto de caracter e collation da tabela. (novo no 4.1.1)
ChecksumValor do checksum (se existir). (novo no 4.1.1)
Check_timeA última vez que a tabela foi verificada.
Create_optionsOpções extras usadas com CREATE TABLE.
CommentO Comentário utilizado quando a tabela é criada (ou alguma informação do porquê do MySQL não poder acessar a informação da tabela).

Tabelas InnoDB irão relatar o espaço livre no tablespace no comentário da tabela.

4.6.8.3. SHOW STATUS

SHOW STATUS fornece informações de status do servidor (como mysqladmin extended-status). A saída é parecida com o que está exibido abaixo, apesar dos números e formatos provavelmente serem diferentes:

+--------------------------+------------+
| Variable_name | Value |
+--------------------------+------------+
| Aborted_clients | 0 |
| Aborted_connects | 0 |
| Bytes_received | 155372598 |
| Bytes_sent | 1176560426 |
| Connections | 30023 |
| Created_tmp_disk_tables | 0 |
| Created_tmp_tables | 8340 |
| Created_tmp_files | 60 |
| Delayed_insert_threads | 0 |
| Delayed_writes | 0 |
| Delayed_errors | 0 |
| Flush_commands | 1 |
| Handler_delete | 462604 |
| Handler_read_first | 105881 |
| Handler_read_key | 27820558 |
| Handler_read_next | 390681754 |
| Handler_read_prev | 6022500 |
| Handler_read_rnd | 30546748 |
| Handler_read_rnd_next | 246216530 |
| Handler_update | 16945404 |
| Handler_write | 60356676 |
| Key_blocks_used | 14955 |
| Key_read_requests | 96854827 |
| Key_reads | 162040 |
| Key_write_requests | 7589728 |
| Key_writes | 3813196 |
| Max_used_connections | 0 |
| Not_flushed_key_blocks | 0 |
| Not_flushed_delayed_rows | 0 |
| Open_tables | 1 |
| Open_files | 2 |
| Open_streams | 0 |
| Opened_tables | 44600 |
| Questions | 2026873 |
| Select_full_join | 0 |
| Select_full_range_join | 0 |
| Select_range | 99646 |
| Select_range_check | 0 |
| Select_scan | 30802 |
| Slave_running | OFF |
| Slave_open_temp_tables | 0 |
| Slow_launch_threads | 0 |
| Slow_queries | 0 |
| Sort_merge_passes | 30 |
| Sort_range | 500 |
| Sort_rows | 30296250 |
| Sort_scan | 4650 |
| Table_locks_immediate | 1920382 |
| Table_locks_waited | 0 |
| Threads_cached | 0 |
| Threads_created | 30022 |
| Threads_connected | 1 |
| Threads_running | 1 |
| Uptime | 80380 |
+--------------------------+------------+

As variáveis de estado listadas acima tem o seguinte significado:

VariávelSignficado
Aborted_clientsNúmero de conexões abortadas porque o cliente morreu sem fechar a conexão corretamente. Veja mais informações sobre isto na Seção A.2.10, “Erros de Comunicação / Comunicação Abortada”.
Aborted_connectsNúmero de tentativas que falharam ao tentar a conexão ao servidor MySQL. Veja mais informações sobre isto na Seção A.2.10, “Erros de Comunicação / Comunicação Abortada”.
Bytes_receivedNúmero de bytes recebidos por todos os clientes.
Bytes_sentNúmero de bytes enviados para todos os clientes..
Com_xxxxNúmero de vezes que os comandos xxx foram executados.
ConnectionsNúmero de tentativas de conexão ao servidor MySQL.
Created_tmp_disk_tablesNúmero de tabelas temporárias implicitas em disco criadas durante a execução de instruções.
Created_tmp_tablesNúmero de tabelas temporárias implicitas na memória criadas durante execuções de instruções.
Created_tmp_filesQuantos arquivos temporários o mysqld criou.
Delayed_insert_threadsNúmero de threads para tratamento de insertdelayed que estão em uso.
Delayed_writesNúmero de registros escritos com INSERT DELAYED.
Delayed_errorsNúmero de registros escritos com INSERT DELAYED onde algum erro ocorreu (provavelmente duplicate key).
Flush_commandsNúmero de comandos FLUSH executados.
Handler_deleteNúmero de vezes que um registro foi apagado da tabela.
Handler_read_firstNúmero de vezes que a primeira entrada foi lida de um índice. Se este valor for alto, sugere que o servidor está fazendo várias leituras de índices, por exemplo, SELECT col1 FROM foo, assumindo que col1 é indexado.
Handler_read_keyNúmero de requisições para ler um registro baseado em uma chave. Se este valor for alto, é uma boa indicação que suas pesquisas e tabelas estão indexadas corretamente.
Handler_read_nextNúmero de requisições para ler o próximo registro na ordem da chave. Este valor será aumentado se você consultar uma coluna de índice com uma faixa restrita. Ele também aumentará se forem feitas busca nos índices.
Handler_read_prevNémro de requisições ao registros anterior na ordem da chave. Ele é principalmente usado para otimizar ORDER BY ... DESC.
Handler_read_rndNúmero de requisições para ler um registro baseado em uma posição fixa. O valor será alto se você estiver executando várias pesquisas que exigem ordenação do resultado.
Handler_read_rnd_nextNúmero de requisões para ler o próximo registro no arquivo de dados. Será alto se você estiver fazendo várias buscas na tabela. Geralmente sugere que suas tabelas não estão corretamente indexadas ou que suas pesquisas não foram escritas para tirar vantagem dos índices existentes.
Handler_rollbackNúmeros de comandos ROLLBACK internos.
Handler_updateNúmero de requisições para atualizar um registro em uma tabela.
Handler_writeNúmero de requisições para inserir um registro em uma tabela.
Key_blocks_usedO número de blocos utilizados no cache das chaves.
Key_read_requestsO número de requisições para ler um bloco de chaves do cache.
Key_readsO número de leituras físicas de blocos de chaves do disco.
Key_write_requestsO número de requisições para gravar um bloco de chaves no cache.
Key_writesO número de escritas físicas de um bloco de chaves para o disco.
Max_used_connectionsO número máximo de conexões simultâneas que foram usadas.
Not_flushed_key_blocksBlocos de chaves no cache de chaves que foi alterado mas ainda não foi descarregado para o disco.
Not_flushed_delayed_rowsNúmero de registros esperando para serem escritos em filas INSERT DELAY.
Open_tablesNúmero de tabelas abertas.
Open_filesNúmero de arquivos abertos.
Open_streamsNúmero de fluxos abertos (usado principalmente para logs).
Opened_tablesNúmero de tabelas que foram abertas.
Rpl_statusStatus de replicação segura. (Ainda não está em uso).
Select_full_joinNúmero de joins sem chaves (Se for 0, você deve conferir com cuidado o índice de suas tabelas).
Select_full_range_joinNúmero de joins onde foram usadas pesquisas segmentadas na tabela de referencia.
Select_rangeNúmero de joins onde foram usadas faixas da primeira tabela. (Normalmente não é crítica mesmo se o valor estiver alto.)
Select_scanNúmero de joins onde fizemos uma busca completa na primeira tabela.
Select_range_checkNúmero de joins sem chaves onde o uso de chave foi conferido após cada registro (Se for 0, o índice de suas tabelas deve ser conferido com cuidado)
QuestionsNúmero de consultas enviadas para o servidor.
Slave_open_temp_tablesNúmero de tabelas temporárias atualmente abertas pela thread slave.
Slave_runningÉ ON se este slave está conectado a um master.
Slow_launch_threadsNúmero de threads que levaram mais tempo do que slow_lauch_time para serem criadas.
Slow_queriesNúmero de consultas que levaram mais tempo que long_query_time segundos. Veja mais informações sobre isto na Seção 4.10.5, “O Log para Consultas Lentas”.
Sort_merge_passesNúmero de ifusões feitas pelo algorítmo de ordenação. Se este valor for alto você deve considerar o aumento de sort_buffer.
Sort_rangeNúmero de ordenações que foram feitas com limites.
Sort_rowsNúmero de registros ordenados.
Sort_scanNúmero de ordenações que foram feitas lendo a tabela.
ssl_xxxVariáveis usadas por SSL; Ainda não implementado.
Table_locks_immediateNúmero de vezes que um travamento de tabela foi obtido de maneira automática.
Table_locks_waitedNúmero de vezes que um bloqueio de tabela não pôde ser obtido imediatamente e foi preciso esperar. Se o valor for alto, e você tiver problemas de performance, suas consultas devem ser otimizadas e depois dividir sua tabela ou tabelas ou usar replicação. Disponível à partir da versão 3.23.33
Threads_cachedNúmero de threads no cache de threads.
Threads_connectedNúmero de conexões atuais abertas.
Threads_createdNúmero de threads criadas para lidar com conexões.
Threads_runningNúmero de threads que não estão dormindo.
UptimeQuantos segundos o servidor está funcionando.

Alguns comentários sobre a tabela acima:

  • Se Opened_tables for grande, provavelmente sua variável table_cache está muito pequena.

  • Se key_reads for grande, provavelmente sua variável key_buffer_size provavelmente está muito pequena. O índice de acertos do cache pode ser calculaldo com key_reads/key_read_requests.

  • Se Handler_read_rnd for grande, provavelmente você possui várias consultas que exigem do MySQL fazer busca em tabelas inteiras ou você tem joins que não utilizam chaves corretamente.

  • Se Threads_created for grande você pode desejar aumentar a variável thread_cache_size. A taxa de acerto da cache pode ser calculada com Threads_created/Connections.

  • Se Created_tmp_disk_tables for grande, você pode querer aumentar a variável tmp_table_size par obter tabelas temporárias em memórias em vez de tabelas em disco.

4.6.8.4. SHOW VARIABLES

SHOW [GLOBAL | SESSION] VARIABLES [LIKE wild]

SHOW VARIABLES mostra os valores de algumas variáveis de sistema do MySQL.

As opções GLOBAL e SESSION são novas no MySQL 4.0.3. Com GLOBAL você obterá as variáveis que serão utilizadas para novas conexões ao MySQL. Com SESSION você obterá os valores que estão em efeito para a conexão atual. Se você não estiver usando nenhuma opção, SESSION será usada.

Se os valores padrões não lhe servirem, você pode configurar a maioria destas variáveis usando as opções de linha de comando na inicialização do mysqld. Veja mais informações sobre isto na Seção 4.1.1, “Opções de Linha de Comando do mysqld. Você pode alterar a maioria das variáveis com o comando SET. Veja mais informações sobre isto na Seção 5.5.6, “Sintaxe de SET.

A saída de SHOW VARIABLES se parece com o exibido abaixo, embora o formato e os números possam divergir. Você também pode conseguir esta informação usando o comando mysqladmin variables.

+---------------------------------+------------------------------+
| Variable_name | Value |
+---------------------------------+------------------------------|
| back_log | 50 |
| basedir | /usr/local/mysql |
| bdb_cache_size | 8388572 |
| bdb_log_buffer_size | 32768 |
| bdb_home | /usr/local/mysql |
| bdb_max_lock | 10000 |
| bdb_logdir | |
| bdb_shared_data | OFF |
| bdb_tmpdir | /tmp/ |
| bdb_version | Sleepycat Software: ... |
| binlog_cache_size | 32768 |
| bulk_insert_buffer_size | 8388608 |
| character_set | latin1 |
| character_sets | latin1 big5 czech euc_kr |
| concurrent_insert | ON |
| connect_timeout | 5 |
| convert_character_set | |
| datadir | /usr/local/mysql/data/ |
| delay_key_write | ON |
| delayed_insert_limit | 100 |
| delayed_insert_timeout | 300 |
| delayed_queue_size | 1000 |
| flush | OFF |
| flush_time | 0 |
| ft_boolean_syntax | + -><()~*:""&| |
| ft_min_word_len | 4 |
| ft_max_word_len | 84 |
| ft_query_expansion_limit | 20 |
| ft_stopword_file | (built-in) |
| have_bdb | YES |
| have_innodb | YES |
| have_isam | YES |
| have_raid | NO |
| have_symlink | DISABLED |
| have_openssl | YES |
| have_query_cache | YES |
| init_file | |
| innodb_additional_mem_pool_size | 1048576 |
| innodb_buffer_pool_size | 8388608 |
| innodb_data_file_path | ibdata1:10M:autoextend |
| innodb_data_home_dir | |
| innodb_file_io_threads | 4 |
| innodb_force_recovery | 0 |
| innodb_thread_concurrency | 8 |
| innodb_flush_log_at_trx_commit | 1 |
| innodb_fast_shutdown | ON |
| innodb_flush_method | |
| innodb_lock_wait_timeout | 50 |
| innodb_log_arch_dir | |
| innodb_log_archive | OFF |
| innodb_log_buffer_size | 1048576 |
| innodb_log_file_size | 5242880 |
| innodb_log_files_in_group | 2 |
| innodb_log_group_home_dir | ./ |
| innodb_mirrored_log_groups | 1 |
| interactive_timeout | 28800 |
| join_buffer_size | 131072 |
| key_buffer_size | 16773120 |
| language | /usr/local/mysql/share/... |
| large_files_support | ON |
| local_infile | ON |
| locked_in_memory | OFF |
| log | OFF |
| log_update | OFF |
| log_bin | OFF |
| log_slave_updates | OFF |
| log_slow_queries | OFF |
| log_warnings | OFF |
| long_query_time | 10 |
| low_priority_updates | OFF |
| lower_case_table_names | OFF |
| max_allowed_packet | 1047552 |
| max_binlog_cache_size | 4294967295 |
| max_binlog_size | 1073741824 |
| max_connections | 100 |
| max_connect_errors | 10 |
| max_delayed_threads | 20 |
| max_heap_table_size | 16777216 |
| max_join_size | 4294967295 |
| max_relay_log_size | 0 |
| max_sort_length | 1024 |
| max_user_connections | 0 |
| max_tmp_tables | 32 |
| max_write_lock_count | 4294967295 |
| myisam_max_extra_sort_file_size | 268435456 |
| myisam_repair_threads | 1 |
| myisam_max_sort_file_size | 2147483647 |
| myisam_recover_options | force |
| myisam_sort_buffer_size | 8388608 |
| net_buffer_length | 16384 |
| net_read_timeout | 30 |
| net_retry_count | 10 |
| net_write_timeout | 60 |
| open_files_limit | 1024 |
| pid_file | /usr/local/mysql/name.pid |
| port | 3306 |
| protocol_version | 10 |
| query_cache_limit | 1048576 |
| query_cache_size | 0 |
| query_cache_type | ON |
| read_buffer_size | 131072 |
| read_rnd_buffer_size | 262144 |
| rpl_recovery_rank | 0 |
| safe_show_database | OFF |
| server_id | 0 |
| slave_net_timeout | 3600 |
| skip_external_locking | ON |
| skip_networking | OFF |
| skip_show_database | OFF |
| slow_launch_time | 2 |
| socket | /tmp/mysql.sock |
| sort_buffer_size | 2097116 |
| sql_mode | |
| table_cache | 64 |
| table_type | MYISAM |
| thread_cache_size | 3 |
| thread_stack | 131072 |
| tx_isolation | READ-COMMITTED |
| timezone | EEST |
| tmp_table_size | 33554432 |
| tmpdir | /tmp/:/mnt/hd2/tmp/ |
| version | 4.0.4-beta |
| wait_timeout | 28800 |
+---------------------------------+------------------------------+

Cada opção é descrita abaixo. Valores para tamanhos de buffer, comprimento e tamanho de pilha são fornecidos em bytes. Você pode especificar valores com sufixos ‘K’ ou M para indicar o valor em kilobytes ou megabytes. Por exemplo, 16M indica 16 Megabytes. Não importa se os sufixos estão em letras maiúsuculas ou minúsculas; 16M e 16m são equivalentes:

  • ansi_mode. Está ligado (ON) se o mysqld foi iniciado com --ansi. Veja mais informações sobre isto na Seção 1.8.2, “Executando o MySQL no modo ANSI”.

  • back_log O número de requisições de conexões que o MySQL pode suportar. Isto entra em cena quando a thread principal do MySQL recebe MUITAS solicitações de conexões em um espaço curto de tempo. Eles tomam algum tempo (porém muito pouco) da a thread principal para conferir a conexão e iniciar uma nova thread. O valor back_log indica quantas requisições podem ser empilhadas durante este breve tempo antes do MySQL parar de responder a novas requisições. Você isó precisa aumentá-lo se espera um número alto de conexões em um curto período de tempo

    Em outras palavras, este valor é o tamanho da fila de escuta para novas conexões TCP/IP. Seu sistema operacional tem o próprio limite para o tamanho desta fila. A página do manual Unix da chamada de sistema listen(2) deve fornecer maiores detalhes. Confira a documentação do seus SO para saber o valor máximo para esta variável. Tentativas de configurar back_log maior do que o limite de seu sistema operacional serão ineficazes.

  • basedir O valor da opção --basedir.

  • bdb_cache_size O buffer que é alocado para o cache de índice e registros de tabelas BDB. Se você não utiliza tabelas BDB, deve iniciar o mysqld com a opção --skip-bdb para evitar desperdício de memória para este cache.

  • bdb_log_buffer_size O buffer que é alocado para o cache de índice e registros de tabelas BDB. Se você não utiliza tabelas BDB, deve configurá-la com 0 ou iniciar o mysqld com a opção --skip-bdb para evitar desperdício de memória para este cache.

  • bdb_home O valor para a opção --bdb-home.

  • bdb_max_lock O número máximo de bloqueios (1000 por padrão) que podem ser feitas em uma tabela BDB. Você deve ser aumentá-la se obter erros do tipo: bdb: Lock table is out of available locks ou Got error 12 from ... quando são necessárias longas transações ou quando o mysqld precisar examinar vários registros para calcular a pesquisa.

  • bdb_logdir O valor da opção --bdb-logdir.

  • bdb_shared_data Está ligada (ON) se você estiver utilizando --bdb-shared-data.

  • bdb_tmpdir O valor da opção --bdb-tmpdir.

  • binlog_cache_size. O tamanho do cache para armazenar instruções SQL para o log binário durante uma transação. Se você geralmente utiliza transações grandes, multi-instruções, você pode aumentar este valor para obter mais performance. Veja mais informações sobre isto na Seção 6.7.1, “Sintaxe de START TRANSACTION, COMMIT e ROLLBACK.

  • bulk_insert_buffer_size (era myisam_bulk_insert_tree_size) MyISAM usa uma cache especial em árvore para fazer inserções em bloco (isto é, INSERT ... SELECT, INSERT ... VALUES (...), (...), ..., e LOAD DATA INFILE) mais rápidos. Esta variável limita o tamanho da árvore cache em bytes por thread. Definí-la com 0 desabilitará esta otimização Nota: esta cache só é usada quando é adicionado dados a uma tabela não vazia. O valor padrão é 8 MB.

  • character_set O conjunto de caracteres padrão.

  • character_sets Os conjuntos de caracteres suportados.

  • concurrent_inserts Se ON (ligado, por padrão), o MySQL permitirá o uso de INSERT em tabelas MyISAM ao mesmo tempo em que são executadas consultas SELECT. Você pode desligar esta opção iniciando mysqld com --safe ou --skip-new.

  • connect_timeout O número de segundos que o servidor mysqld espera para um pacote de conexão antes de responder com Bad handshake.

  • datadir O valor da opção --datadir.

  • delay_key_write

    Option for MyISAM tables. Can have one of the following values:

    OFFAll CREATE TABLE ... DELAYED_KEY_WRITE são ignorados.
    ON(padrão) MySQL seguirá a opção DELAY_KEY_WRITE para CREATE TABLE.
    ALLTodas as novas tabelas abertas são tratadas como se fossem criadas com a opção DELAY_KEY_WRITE.

    Se DELAY_KEY_WRITE estiver habilitado, isto siginifica que o buffer de chaves das tabelas com esta opção não serão descarregadas a cada atualização do índice, mas somente quando a tabela é fechada. Isto irá aumentar bem a velocidade de escrita em chaves, mas você deve adicionar verificação automática de todas as tabelas com myisamchk --fast --force se você usá-lo.

  • delayed_insert_limit Depois de inserir delayed_insert_limit registros, o agente que cuida de INSERT DELAYED ira conferir se exitem instruções SELECT pendentes. Se sim, ele permite a execução destas antes de continuar.

  • delayed_insert_timeout Quanto tempo uma thread INSERT DELAYED deve esperar por instruções INSERT antes de terminar.

  • delayed_queue_size Qual tamanho deve ser alocado para a fila (em linhas) para lidar com INSERT DELAYED. Se a fila encher, algum cliente que executar INSERT DELAYED irá esperar até existir espaço na fila novamente.

  • flush É habilitado (ON) se você iniciar o MySQL com a opção --flush.

  • flush_time Se esta variável for configurada com um valor diferente de zero, então a cada flush_time segundos todas tabelas serão fechadas (para economizar recursos e sincronizar dados com o disco). Recomendamos esta opção somente em sistemas com Win95, Win98 ou outros sistemas com poucos recursos.

  • ft_boolean_syntax Lista de operadores suportados por MATCH ... AGAINST(... IN BOOLEAN MODE). Veja mais informações sobre isto na Seção 6.8, “Pesquisa Full-text no MySQL”.

  • ft_min_word_len O tamanho mínimo da palavra a ser incluída em um índice FULLTEXT. Nota: índices FULLTEXT devem ser reconstruídos depois de alterar esta variável. (Esta opção é nova para o MySQL 4.0.)

  • ft_max_word_len O tamanho máximo da palavra a ser incluída em um índice FULLTEXT. Nota: índices FULLTEXT devem ser reconstruídos depois de alterar esta variável. (Esta opção é nova para o MySQL 4.0.)

  • ft_query_expansion_limit Núnero de correspondências a usar para consulta de expansão (em MATCH ... AGAINST (... WITH QUERY EXPANSION). (Esta opção é nova no MySQL 4.1.1)

  • ft_max_word_len_for_sort O tamanho máximo da palavra a ser incluída em um índice FULLTEXT a ser usado no método rápido de recriação do índice em REPAIR, CREATE INDEX, ou ALTER TABLE. Palavras mais longas são inseridas de modo lento. A regra do dedão é a seguinte: com ft_max_word_len_for_sort aumentando, MySQL criará arquivos temporários maiores (tornando o processo lente, devido a E/S de disco), e colocará poucas chaves em um bloco ordenado (diminuindo a eficiência novamente). Quando ft_max_word_len_for_sort é muito pequeno, MySQL irá inserir várias palavras no índice de modo lento, mas pequenas palavras serão inseridas muito rapidamente.

  • ft_stopword_file O arquivo do qual se lê a lista de palavras de parada para pesquisa fulltext. Todas as palavras do arquivo serão usadas; comentários não são seguidos. Por padrão, a lista já incluída de palavras de parada é a usada (como definido em myisam/ft_static.c). Definir este parâmetro com uma string vazia ("") disabilitaa o filtro de palavras de parada. Nota: índices FULLTEXT devem ser reconstruídos depois de alterar esta variável. (Esta opção é nova para o MySQL 4.0.)

  • have_innodb YES if mysqld suporta tabelas InnoDB. DISABLED se --skip-innodb é usado.

  • have_bdb YES se o mysqld suportar tabelas Berkeley DB. DISABLED se a opção --skip-bdb for usada.

  • have_raid YES se o mysqld suportar a opção RAID.

  • have_openssl YES se o mysqld suportar SSL (criptografia) no protocolo cliente/ servidor.

  • init_file O nome do arquivo especificado com a opção --init-file quando você iniciar o servidor. Este é um arquivo das instruções SQL que você deseja que o servidor execute quando é iniciado.

  • interactive_timeout O número de segundos que o servidor espera por atividade em uma conexão antes de fechá-la. Um cliente interativo é definido como um cliente que utiliza a opção CLIENT_INTERACTIVE para mysql_real_connect(). Veja também wait_timeout.

  • join_buffer_size O tamanho do buffer que é utilizado para full joins (joins que não utilizam índices). O buffer é alocado uma vez para cada full join entre duas tabelas. Aumente este valor para obter um full join mais rápido quando a adição de índices não for possível. (Normalmente a melhor forma de obter joins rápidas é adicionar índices.)

  • key_buffer_size Blocos de índices são buferizados e compartilhados por todas as threads. key_buffer_size é o tamanho do buffer utilizado para indexar blocos.

    Aumente-o para lidar melhor com os índices (para todas as leituras e escritas múltiplas) para o máximo possível 64M em uma máquina com 256M que executa, principalmente, o MySQL é bastante comum. Entretanto, se você deixar este valor muito grande (mais que 50% da sua memória total?) seu sistema pode iniciar a paginar e se tornar MUITO lento. Lembre-se que como o MySQL não utiliza cache de leitura de dados, será necessário deixar algum espaço para o cache do sistema de arquivos para o Sistema Operacional.

    Você pode verificar a performance do buffer de chaves executando SHOW STATUS e examinar as variáveis Key_read_requests, Key_reads, Key_write_requests e Key_writes. A razão de Key_reads/Key_read_request deve normalmente ser < 0.01. O Key_write/Key_write_requests é normalmnte próximo de 1 se você estiver utilizando na maioria updates/deletes mas deve ser bem menor se você tender a fazer atualizações que afetam várias outras ao mesmo tempo ou se você estiver utilizando DELAY_KEY_WRITE. Veja mais informações sobre isto na Seção 4.6.8, “Sintaxe de SHOW.

    Para obter ainda mais velocidade quando estiver gravando vários registros ao mesmo tempo, utilize LOCK TABLES. Veja mais informações sobre isto na Seção 6.7.5, “Sintaxe LOCK TABLES e UNLOCK TABLES.

  • language A linguagem utilizada para mensagens de erro.

  • large_file_support Se o mysqld foi compilado com opções para suporte a grandes arquivos.

  • locked_in_memory Se o mysqld foi travado na memória com --memlock

  • log Se o log de todas as consultas está habilitado.

  • log_update Se o log de atualizações está habilitado.

  • log_bin Se o log binários está habilitado.

  • log_slave_updates Se as atualizações do slave devem ser logadas.

  • long_query_time Se uma consulta demorar mais que isto (em segundos), o contador Slow_queries ser incrementado. Se você estiver utilizando --log-slow-queries, a consulta será logada ao arquivo de consultas lentas. Veja mais informações sobre isto na Seção 4.10.5, “O Log para Consultas Lentas”. Este valor é medido em tempo real, não em tempo de CPU, assim uma consulta que pode estar pode estar abaixo do limiar de um sistema de carga leve pode estar acima do limiar de um sistema de carga pesada. Veja mais informações sobre isto na Seção 4.10.5, “O Log para Consultas Lentas”.

  • lower_case_nome_tabelas Se estiver configurado para 1, nomes de tabelas são armazenados em letras minúsculas no disco e nomes de tabelas serão caso-insensitivo. Na versão .0.2, esta opção também se aplica aos nomes de banco de dados. Na versão 4.1.1 esta opção também se aplcia a alias de tabelas. Veja mais informações sobre isto na Seção 6.1.3, “Caso Sensitivo nos Nomes”.

  • max_allowed_packet O valor máximo de um pacote. O buffer de mensagens é iniciado por net_buffer_length bytes, mas pode crescer até max_allowed_packet bytes quando for necessário. Este valor por padrão é pequeno, para obter pacotes maiores (possivelmente errados). Você deve incrementar este valor se você estiver usando colunas BLOB grandes. Ele deve tão grande quanto o maior BLOB que você deseja utilizar. O protocol atual limita o max_allowed_packet à 16M no MySQL 3.23 e 1G no MySQL 4.0.

  • max_binlog_cache_size Se uma transação multi-instruções necessitar de mais que este montante de memória, será obtido o erro "Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage" ("Transação multi-instruções necessita mais que 'max_binlog_cache_size' bytes de armazenamento").

  • max_binlog_size Disponível a partir da 3.23.33. Se uma escrita ao log binário (replicação) exceder o valor fornecido, rotacione os logs. Você não pode configurá-lo para menos de 4096 bytes (1024 na versão do MySQL anteriores a 4.0.14), ou mais que 1 GB. O valor padrão é 1 GB. Nota se você estiver usando transações: uma transação é escrita em um bloco no arquivo de log binário, já que ele nunca é separado entre diversos logs binários. Desta forma, se você tiver grandes transações, você pode ter logs binários maioores que max_binlog_size. Se max_relay_log_size (disponível a partir do MySQL 4.0.14) é 0, então max_binlog_size se aplicará bem aos relay logs.

  • max_connections O Número de clientes simultâneos permitidos. Aumentar este valor aumenta o número de descritores de arquivos que o mysqld necessita. Veja abaixo os comentários sobre os limites de descritores de arquivos. Veja mais informações sobre isto na Seção A.2.6, “Erro: Too many connections.

  • max_connect_errors Se houver mais que este número de conexões interrompidas a partir de uma máquina está máquina terá as próximas conexões bloqueadas. Você pode desbloquar uma máquina com o comadno FLUSH HOSTS.

  • max_delayed_threads Não inicie mais do que este número de threads para lidar com instruções INSERT DELAYED. Se você tentar inserir dados em uma nova tabela depois que todas as threads INSERT DELAYED estiverem em uso, o registro será inserido como se o atributo DELAYED não fosse especificado. Se você configurá-lo com 0, o MySQL nunca criará uma thread max_delayed.

  • max_heap_table_size Esta variável define o tamanho máximo que uma tabela HEAP criada pode ter. O valor da variável é usado para calcular um valor MAX_ROWS da tabela HEAP. A definição desta variável não tem nenhum efeito sobre qualquet tabela HEAP existente, a memos que a tabela seja recriada com uma instrução como CREATE TABLE ou TRUNCATE TABLE, ou alterada com ALTER TABLE.

  • max_join_size Joins que provavelmente forem ler mais que max_join_size registros retornam um erro. Configure este valor se os seus utilizadores tendem a realizar joins que não possuem uma cláusula WHERE, que tomam muito tempo, e retornam milhões de registros.

  • max_relay_log_size Disponível a partir da versão 4.0.14. Se uma escrita ao relay log (um tipo de log usado por slaves de replicação, see Seção 4.11.3, “Detalhes de Implementação da Replicação”) exceder o valor dado, rotacione o relay log. Esta variável lhe permite colocar diferentes restrições de tamanho no relay logs e logs binários. No entanto, configurar a variável com 0 fará o MySQL usar max_binlog_size tanto para o log binário quanto para o relay logs. Você tem que configurar max_relay_log_size com 0 ou mais de 4096, e menos que 1 GB. O padrão é 0.

  • max_seeks_for_key Limite do número máximo de buscas ao procurar linhas com base em uma chave. O otimizador MySQL assumirá que quando pesquisar por linhas correspondentes em uma tabela através da varredura da chave, não faremos mais que este número de busca de chave independente da cardinalidade da chave. Configurando este parâmetro com um valor baixo (100 ?) você pode forçar o MySQL a preferir chaves em vez de varrer a tabela.

  • max_sort_length O número de bytes utilizados para ordenar valores BLOB ou TEXT (somente os primeiros max_sort_lenght bytes de cada valor são usados; o resto é ignorado).

  • max_user_connections O valor máximo de conexões ativas para um único utilizador (0 = sem limite).

  • max_tmp_tables (Esta opção ainda não faz nada.) Número máximo de tabelas temporárias que um cliente pode manter abertas ao mesmo tempo.

  • max_write_lock_count Depois desta quantidade de bloqueios de escrita, permite que alguns bloqueios de leitura sejam executados.

  • myisam_recover_options O valor da opção --myisam-recover.

  • myisam_sort_buffer_size O buffer que é alocado ao ordenar o índice quando estiver fazendo um REPAIR ou estiver criando índices com CREATE INDEX ou ALTER TABLE.

  • myisam_max_extra_sort_file_size. Se a criação do arquivo temporário para criação rápida de índices fosse este valor maior que quando for usado o cache de chaves, de preferência ao método de cache de chaves. Isto é usado principalmente para forçar que longas chaves de caracteres em tabelas grandes usem o método de cache de chaves mais lenta para criar o índice. NOTE que este parâmetro é fornecido em megabytes!

  • myisam_repair_threads. Se este valor é maior que um, durante o processo reparo por ordenação os índices de tabels MyISAM serão criados em paralelo - cada índice em sua própria thread. Nota reparos com multi-threads está ainda sob código de qualidade alpha.

  • myisam_max_sort_file_size O tamanho máximo do arquivo temporário que é permitido ao MySQL usar enquanto recria os índices (durante REPAIR, ALTER TABLE ou LOAD DATA INFILE). Se o tamanho do arquivo for maior que isto, o índice será criado através do cache de chaves (que é mais lento). NOTE que este parâmetro é fornecido em megabytes antes da versão 4.0.3 e em bytes a partir desta versão.

  • net_buffer_length O buffer de comunicações é configurado para este tamanho entre queries. Isto não deve ser alterado normalmente, mas se você tem muito pouca memória, pode configurá-lo para o tamanho esperado de uma consulta. (Isto é, o tamanho experado das instruções SQL enviadas pelos clientes. Se as instruções excederem este valor, o buffer é aumentado automaticamente, até max_allowed_packet bytes.)

  • net_read_timeout Número de segundos para esperar por mais dados de uma conexão antes de abortar a leitura. Perceba que quando nós não esperamos dados de uma conexão, o tempo máximo de espera é definido pelo write_timeout. Veja também slave_read_timeout.

  • net_retry_count Se uma leitura na porta de comunicações for interrompida, tente novamente net_retry_count vezes antes de parar. Este valor deve ser bem alto no FreeBSD já que interrupções internas são enviadas para todas as threads.

  • net_write_timeout Número de segundos para esperar pela escrita de um bloco em uma conexão antes de abortar a escrita.

  • open_files_limit Número de arquivos que o sistema permite que o mysqld abra. Este é o valor real dado para o sistema e pode ser diferente do valor que você passa ao mysqld como parâmetro de inicialização. Ele é 0 em sistemas onde o MySQL não pode alterar o número de arquivos abertos.

  • pid_file O valor da opção --pid-file.

  • port O valor da opcao --port.

  • protocol_version A versão do protocolo usada pelo servidor MySQL.

  • range_alloc_block_size Tamanho dos blocos que são alocados ao se fazer uma otimização da faixa.

  • read_buffer_size (era record_buffer) Cada thread que faz uma leitura sequencial aloca um buffer deste tamanho para cada tabela lida. Se você fizer várias leituras sequenciais, você pode desejar aumentar este valor.

  • read_rnd_buffer_ae (era record_rnd_buffer) Ao ler registros na ordem depois de uma ordenação, os registros são lidos através deste buffer para evitar pesquisas em disco. Pode melhorar bastante o ORDER BY se configurado com um valor alto. Como esta é uma variável específica da thread, não se pode definí-la globalmente, mas apenas alterá-la ao executar alguma consulta específica grande.

  • query_alloc_block_size Tamanho dos blocos de alocação de memória que são alocados para objetos criados durante a análise e execução da consulta. Se você tiver problemas com fragmentação de memória ele pode ajudar a aumentar isto um pouco.

  • query_cache_limit Não armazena resultados que são maiores que esta variável. (Padrão 1M).

  • query_cache_size A memória alocada para armazenar resultados de consultas antigas. Se 0, a cache de consulta é desabilitada (padrãot).

  • query_cache_type Pode ser configurado com (somente numérico)

    ValorAliasComentário
    0OFFNão armazena ou recupera resultados
    1ONArmazena todos os resultados exceto consultas SELECT SQL_NO_CACHE ....
    2DEMANDArmazena apenas consultas SELECT SQL_CACHE ....
  • query_prealloc_size Buffer persistente para análise e execução da consulta. Não é liberado entre consultas. Em teoria, tornando-o ``grande o suficiente'' você pode fazer o MySQL executar consultas sem ter que fazer uma única chamada malloc.

  • safe_show_database Não mostra bancos de dados nos quais o utilizador não tem nenhum privilégios. Isto pode melhorar a segurança se você se preocupa com o fato das pessoas estarem aptas a ver quais bancos de dados outros utilizadores possuem. Veja também skip_show_databases.

  • server_id O valor da opção --server-id.

  • skip_locking Está desligado (OFF) se o mysqld usar bloqueio externo.

  • skip_networking Está ligado (ON) se somente permitimos conexões locais (socket).

  • skip_show_databases Isto previne utilizadores de fazerem SHOW DATABASES se eles não possuirem o privilégio PROCESS_PRIV. Isto pode aumentar a segurança se você se preocupa com o fato das pessoas poderem ver quais bancos de dados outros utilizadores possuem. Veja também safe_show_databases.

  • slave_net_timeout Número de segundos para esperar por mais dados de uma conexão de master/slave antes de abortar a leitura.

  • slow_launch_time Se a criação de threads demorar mais que este valor (em segundos), o contador Slow_launch_threads será incrementado.

  • socket O socket Unix utilizado pelo servidor.

  • sort_buffer Cada thread que precisar fazer uma ordenação aloca um buffer deste tamanho. Aumente este valor para operações ORDER BY ou GROUP BY mais rápidas. Veja mais informações sobre isto na Seção A.4.4, “Onde o MySQL Armazena Arquivos Temporários”.

  • table_cache O número de tabelas abertas para todas as threads. Aumentar este valor aumenta o número de descritores de arquivos que o mysql necessita. O MySQL precisa de dois descritores de arquivos para cada tabela única aberta. Veja abaixo os comentaários sobre os limites do descritor de arquivos. Você pode conferir se necessita aumentar o cache de tabela conferindo a variável Opened_tables. Veja mais informações sobre isto na Seção 4.6.8.3, “SHOW STATUS. Se esta variável for grande e você não faz muitos FLUSH TABLES (que apenas força todas as tabelas a serem fechadas e reabertas), então você deve aumentar o valor desta variável.

    Para informações sobre como o cache de tabelas funciona, veja Seção 5.4.7, “Como o MySQL Abre e Fecha as Tabelas”.

  • table_type O tipo padrão de tabelas.

  • thread_cache_size Quantas threads devem ser mantidas em cache para reutilização. Quando um cliente desconecta, as threads dos clientes são colocadas no cache se não existir mais de thread_cache_size threads que antes. Todas novas threads serão obtidas primeiramente do cache, e só quando o cache estiver vazio uma nova thread é criada. Esta variável pode ser aumentada para melhorar a performance se você tiver várias conexões novas. (Normalmente isto não dá uma melhora de performance notável se você possuir uma boa implementação de threads.) Examinando as diferenças entre Connections e Threads_create (see Seção 4.6.8.3, “SHOW STATUS para maiores detalhes) pode ser visto o quão eficente é o cache de threads atual.

  • thread_concurrency No Solaris, mysqld irá chamar thr_setconcurrency() com este valor. thdr_setconcurrency() permite que a aplicação forneça ao sistema de threads uma dica com o número desejado de threads que devem ser executados ao mesmo tempo.

  • thread_stack O tamanho da pilha para cada thread. Vários dos limites detectados pelo teste crash-me são dependentes deste valor. O padrão é grande o suficiente para operações normais. Veja mais informações sobre isto na Seção 5.1.4, “O Pacote de Benchmark do MySQL”.

  • timezone O fuzo horário para este servidor.

  • tmp_table_size Se uma tabela temporária em memória exceder este tamanho, o MySQL irá a convertê-la automaticamente para uma tabela MyISAM em disco. Aumente o valor de tmp_table_size se você fizer várias consultas GROUP BY avançadas e você tiver muita memória.

  • tmpdir O diretório utilizado para arquivos temporários e tabelas temporárias. A partir do MySQL 4.1, ele pode ser definido com uma lista de caminhos separados por dois pontos (:) (ponto e vírgula (; no Windows). Eles serão usados de modo robin-round. Este recurso pode ser usado para dividir a craga entre diversos discos físicos.

  • transaction_alloc_block_size Tamanho dos blocos de alocação de memória que são alocados para consultas de armazenamento que são parte de uma transação que está para ser armazenada no log binário ao se fazer um commit.

  • transaction_prealloc_block_size Buffer persistente para transaction_alloc_blocks que não é liberado entre as consultas. Tornando-o ``grande o suficiente'' para caber todas as consulta em uma transação comum você pode evitar muitas chamadas malloc.

  • version O número da versão do servidor.

  • wait_timeout O número de segundos que o servidor espera pela atividade em uma conexão antes de fechá-la. Veja também interactive_timeout.

    Na inicialização da thread, SESSION.WAIT_TIMEOUT é inicializado por GLOBAL.WAIT_TIMEOUT ou GLOBAL.INTERACTIVE_TIMEOUT dependendo do tipo do cliente (como definido pela opção de conexão CLIENT_INTERACTIVE). Veja também interactive_timeout.

A seção do manual que descreve o ajuste do MySQL contém algumas informações de como sintonizar as variáveis acima. Veja mais informações sobre isto na Seção 5.5.2, “Parâmetros de Sintonia do Servidor”.

4.6.8.5. SHOW [BDB] LOGS

SHOW LOGS mostra estatísticas sobre os arquivos log existentes. Atualmente ele só exibe informações sobre arquivos de log Berkeley DB, assim um alias para ele (disponível a partir do MySQL 4.1.1) é SHOW BDB LOGS.

  • File mostra o caminho completo para o arquivo de log

  • Type mostra o tipo do arquivo log (BDB para arquivos de log Berkeley DB).

  • Status mostra o status do arquivo log (FREE se o arquivo pode ser removido, ou IN USE se o arquivo é necessário para o subsistema de transações)

4.6.8.6. SHOW PROCESSLIST

SHOW [FULL] PROCESSLIST mostra quais threads estão em execução. Esta informação também pode ser obtida com o comando mysqladmin processlist. Se você possuir o privilégio SUPER, poderá ver todas as threads. Senão só é possível ver as próprias threads. Veja mais informações sobre isto na Seção 4.6.7, “Sintaxe de KILL. Se você não utiliza a opção FULL, então somente os primeiros 100 caracteres de cada query serião exibidos.

A partir da versão 4.0.12, o MySQL informa o nome de maquina para conexões TCP/IP no formato nome_maquina:client_port para tornar mais fácil de se encontrar qual cliente está fazendo o que.

Este comando é muito útil caso você obtenha a mensagem de erro 'too many connections' e deseja saber o que está ocorrendo. O MySQL reserva uma conexão extra por cliente com o privilégio SUPER para garantir que você sempre consiga logar e conferir o sistema (assumindo que este privilégio não foi concedido para todos os utilizadores).

Alguns estados normalmente vistos em mysqladmin processlist

  • Checking table A thread está realizando verificação [automática] da tabela.

  • Closing tables Signiifica que a thread está descarregando os dados alterados na tabela para o disco e fechando as tabelas usadas. Isto deve ser uma operação rápida. Se não, você deve verificar se o seu disco não está cheio ou que o disco não está com sobrecarga.

  • Connect Out Slave está conectando ao master.

  • Copying to tmp table on disk O resultado temporário foi maior que tmp_table_size e a thread agora está alterando a tabela temporária na memória para o disco para economizar memória.

  • Creating tmp table A thread está criando uma tabela temporária para guardar uma parte do resultado para a consulta.

  • deleting from main table Ao executar a primeira parte de um delete multi-tabela e estamos deletando apenas da primeira tabela.

  • deleting from reference tables Ao executar a segunda parte de um delete multi-tabela e estamos deletando o registros correspondentes em outras tabelas.

  • Flushing tables A thread está executando FLUSH TABLES e está esperando que todas as threads fechem as suas tabelas.

  • Killed Alguém enviou um sinal para matar a thread e ela deve abortar a próxima vez que ele verificar o parâmetro kill. O parâmetro é verificado em cada loop maior no MySQL, mas em alguns casos ainda pode levar um tempo curto para a thread morrer. Se a thread está bloqueada par outra thread, a finalização terá efeito assim que as outras threads liberarem o bloqueio.

  • Sending data A thread está processando registros para uma instrução SELECT e também está enviando dados ao cliente.

  • Sorting for group A thread está fazendo uma ordenação para satisfazer a um GROUP BY.

  • Sorting for order A thread está fazendo uma ordenação para satisfazer a um ORDER BY.

  • Opening tables Isto simplesmente significa que a thread está tentando abrir uma tabela. Este deve ser um procedimento muito rápido, a menos que algo previna da abertura. Por exemplo um ALTER TABLE ou um LOCK TABLE pode prvenir a abertura de uma tabela até que o comando esteja finalizado.

  • Removing duplicates A consulta estava usando SELECT DISTINCT de tal modo que o MySQL não podia otimizar o distinct em um estagio anterior. Por isto o MySQL fez um estágio extra para remover todos os registros duplicados antes de enviar o resultado ao cliente.

  • Reopen table A thread obteve um lock para a tabela, mas notificou após o lock que a estrutura da tabela alterou. Ela liberou o lock, fechou a tabela e agora está tentando reabrí-la.

  • Repair by sorting O código de reparação está utilizando ordenamento para recriar os índices.

  • Repair with keycache O código de reparação está usando a criação de chaves uma a uma através da cache de chaves. Isto é muito mais lento que Repair by sorting.

  • Searching rows for update A thread esta fazendo uma primeira fase pra encontrar todos os registros coincidentes antes de atualizá-los. Isto deve ser feito se o UPDATE está alterando o índice usado para encontrar os registros envolvidos.

  • Sleeping A thread está esperando que o cliente envie um novo comando a ela.

  • System lock A thread está esperando um lock de sistema externo para a tabela. Se você não está usando múltiplos servidores mysqld que estão acessando a mesma tabela, você pode desabilitar o lock de sistema com a opção --skip-external-locking.

  • Upgrading lock O manipulador de INSERT DELAYED está tentando obter um lock para inserir registros na tabela.

  • Updating A thread está procurando por registros para atualizá-los.

  • User Lock A thread está esperando um GET_LOCK().

  • Waiting for tables A thread recebeu uma notificação que a estrutura de uma tabela foi alterada e ela precisa reabrir a tabela para receber a nova estrutura. Para poder reabrir a tabela ela deve esperar até que todas a outras threads tenham fechado a tabela em questão.

    A notificação acontece se outra thread usou FLUSH TABLES ou um dos seguintes comando na tabela em questão: FLUSH TABLES nome_tabela, ALTER TABLE, RENAME TABLE, REPAIR TABLE, ANALYZE TABLE ou OPTIMIZE TABLE.

  • waiting for handler insert O manipulador do INSERT DELAYED processou todas as inserções e está esperado por outras.

A maioria dos estados são operações muito rápidas. Se a thread permanecer em qualquer destes estados por muitos segundos, pode haver um problema que precisa ser investigado.

Existem outros estados que não são mencionados anteriormente, mas a maioia deles só são úteis para encontrar erros no mysqld.

4.6.8.7. SHOW GRANTS

SHOW GRANTS FOR utilizador lista os comandos concedidos que devem ser usados para duplicar os direitos de um utilizador.

mysql> SHOW GRANTS FOR root@localhost;
+---------------------------------------------------------------------+
| Grants for root@localhost |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+

Para listar as permissões da sessão atual pode-se usar a função CURRENT_USER() (nova na versão 4.0.6) para descobrir com qual utilizador a sessão foi autenticada. Veja mais informações sobre isto na Seção 6.3.6.2, “Funções Diversas”.

4.6.8.8. SHOW CREATE TABLE

Exibe uma instrução CREATE TABLE que irá criar a seguinte tabela:

mysql> SHOW CREATE TABLE t\G
*************************** 1. row ***************************
Table: t
Create Table: CREATE TABLE t (
id INT(11) default NULL auto_increment,
s char(60) default NULL,
PRIMARY KEY (id)
) TYPE=MyISAM

SHOW CREATE TABLE cita os nomes de colunas e tabelas de acordo com o valor da opção SQL_QUOTE_SHOW_CREATE. Seção 5.5.6, “Sintaxe de SET.

4.6.8.9. SHOW WARNINGS | ERRORS

SHOW WARNINGS [LIMIT row_count]
SHOW ERRORS [LIMIT row_count]

Este comando é implementado no MySQL 4.1.0.

Ele mostra os erros,a visos e notas recebidos para o último comando. Os erros/avisos são reiniciados para cada comando que utiliza uma tabela.

O servidor MySQL envia de volta o número total de avisos e erros que você recebe para o último comando; Isto pode ser retornado chamando mysql_warning_count().

Até as mensagens max_error_count são armazenadas (variáveis global e específicas da thread).

Você pode recuperar o número de erros de @error_count e avisos de @warning_count.

SHOW WARNINGS mostra todos os erros, avisos e notas que você recebeu para o último comando enquanto SHOW ERRORS lhe mostra apenas o erro.

mysql> DROP TABLE IF EXISTS no_such_table;
mysql> SHOW WARNINGS;
+-------+------+-------------------------------+
| Level | Code | Message |
+-------+------+-------------------------------+
| Note | 1051 | Unknown table 'no_such_table' |
+-------+------+-------------------------------+

Note que no MySQL 4.1.0 apenas adicionamos a estrutura para avisos e poucos comandos MySQL ainda geraram avisos. A versão 4.1.1 suporta todos os tipos de avisos para LOAD DATA INFILE e instruções DML tais como os comandos INSERT, UPDATE e ALTER.

Por exemplo, aqui está um caso simple que produz avisos de conversão para instruções de inserção.

mysql> create table t1(a tinyint NOT NULL, b char(4));
Query OK, 0 rows affected (0.00 sec)
mysql> insert into t1 values(10,'mysql'),(NULL,'test'),(300,'open source');
Query OK, 3 rows affected, 4 warnings (0.15 sec)
Records: 3 Duplicates: 0 Warnings: 4
mysql> show warnings;
+---------+------+---------------------------------------------------------------+
| Level | Code | Message |
+---------+------+---------------------------------------------------------------+
| Warning | 1263 | Data truncated for column 'b' at row 1 |
| Warning | 1261 | Data truncated, NULL supplied to NOT NULL column 'a' at row 2 |
| Warning | 1262 | Data truncated, out of range for column 'a' at row 3 |
| Warning | 1263 | Data truncated for column 'b' at row 3 |
+---------+------+---------------------------------------------------------------+
4 rows in set (0.00 sec)

O número máximo de avisos pode ser específicado usando a variável do servidor 'max_error_count', SET max_error_count=[count]; Por padrão é 64. No caso de avisos desabilitados, simplesmente zere esta variável. No caso de max_error_count ser 0, então o contador de avisos ainda representa quantos avisos ocorreram, mas nenhuma das mensagens são armazenadas.

Por exemplo, considere o seguinte instrução de tabela ALTER para o exemplo acima, o qual retorna apenas um mensagem de aviso embora o total de avisos seja 3, ao definir max_error_count=1.

mysql> show variables like 'max_error_count';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_error_count | 64 |
+-----------------+-------+
1 row in set (0.00 sec)
mysql> set max_error_count=1;
Query OK, 0 rows affected (0.00 sec)
mysql> alter table t1 modify b char;
Query OK, 3 rows affected, 3 warnings (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 3
mysql> show warnings;
+---------+------+----------------------------------------+
| Level | Code | Message |
+---------+------+----------------------------------------+
| Warning | 1263 | Data truncated for column 'b' at row 1 |
+---------+------+----------------------------------------+
1 row in set (0.00 sec)
mysql>

4.6.8.10. SHOW TABLE TYPES

SHOW TABLE TYPES

Este comando é implementado no MySQL 4.1.0.

SHOW TABLE TYPES lhe mostra a informação de status sobre o tipo de tabela. Isto é particulamente útil para verificar se um tipo de tabela é suportado; ou para ver qual é o tipo de tabela padrão.

mysql> SHOW TABLE TYPES;
+--------+---------+-----------------------------------------------------------+
| Type | Support | Comment |
+--------+---------+-----------------------------------------------------------+
| MyISAM | DEFAULT | Default type from 3.23 with great performance |
| HEAP | YES | Hash based, stored in memory, useful for temporary tables |
| MERGE | YES | Collection of identical MyISAM tables |
| ISAM | YES | Obsolete table type; Is replaced by MyISAM |
| InnoDB | YES | Supports transactions, row-level locking and foreign keys |
| BDB | NO | Supports transactions and page-level locking |
+--------+---------+-----------------------------------------------------------+
6 rows in set (0.00 sec)

A opção 'Support' DEFAULT indica se um tipo de tabela particular é é suportado, e qual é o tipo padrão. Se o servidor é iniciado com --default-table-type=InnoDB, então o campo 'Support' do InnoDB terá o valor DEFAULT.

4.6.8.11. SHOW PRIVILEGES

SHOW PRIVILEGES

Este comando é implementado no MySQL 4.1.0.

SHOW PRIVILEGES mostra a lista de privilégios de sistema o servidor MySQL suporta.

mysql> show privileges;
+------------+--------------------------+-------------------------------------------------------+
| Privilege | Context | Comment |
+------------+--------------------------+-------------------------------------------------------+
| Select | Tables | To retrieve rows from table |
| Insert | Tables | To insert data into tables |
| Update | Tables | To update existing rows |
| Delete | Tables | To delete existing rows |
| Index | Tables | To create or drop indexes |
| Alter | Tables | To alter the table |
| Create | Databases,Tables,Indexes | To create new databases and tables |
| Drop | Databases,Tables | To drop databases and tables |
| Grant | Databases,Tables | To give to other users those privileges you possess |
| References | Databases,Tables | To have references on tables |
| Reload | Server Admin | To reload or refresh tables, logs and privileges |
| Shutdown | Server Admin | To shutdown the server |
| Process | Server Admin | To view the plain text of currently executing queries |
| File | File access on server | To read and write files on the server |
+------------+--------------------------+-------------------------------------------------------+
14 rows in set (0.00 sec)