log de consulta lenta no servidor mysql

2

Instalei o MySQL Community Edition 5.1.41 em um servidor Windows 2000. No arquivo my.ini, ativei o log de consultas lentas e redirecionei a saída para uma tabela. Configurei o long_query_time para 10 segundos. Então, depois de executar algumas consultas, verifiquei a tabela de log de consultas lentas e descobri que todas as consultas que foram executadas foram registradas e um arquivo chamado database-slow.log também foi criado na pasta de dados. Alguém pode por favor me dizer onde estou indo errado. Eu estou usando o innodb embutido e não ativo o plugin innodb.

Obrigado

    
por Vinayak Mahadevan 24.01.2011 / 18:35

1 resposta

0

Para começar, eu coloquei estas linhas em /etc/my.cnf

[mysqld]
log-output=TABLE
slow-query-log
slow-query-log-file=slow-queries.log

Quando você usa o log lento com o log_output sendo TABLE, a tabela NÃO é criada em / var / lib / mysql. A tabela é criada na pasta mysql, / var / lib / mysql / mysql. O mecanismo de armazenamento para o log lento baseado em tabela padrão é CSV. Você pode verificar isso fazendo o seguinte:

use mysql
show tables;

Você deve ver a tabela slow_log

MySQL> show create table slow_log\G
*************************** 1. row ***************************
       Table: slow_log
Create Table: CREATE TABLE 'slow_log' (
  'start_time' timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  'user_host' mediumtext NOT NULL,
  'query_time' time NOT NULL,
  'lock_time' time NOT NULL,
  'rows_sent' int(11) NOT NULL,
  'rows_examined' int(11) NOT NULL,
  'db' varchar(512) NOT NULL,
  'last_insert_id' int(11) NOT NULL,
  'insert_id' int(11) NOT NULL,
  'server_id' int(10) unsigned NOT NULL,
  'sql_text' mediumtext NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log'
1 row in set (0.00 sec)

Aqui está como converter o arquivo CSV para a tabela de log lento para MyISAM

SET @old_log_state = @@global.slow_query_log;
SET GLOBAL slow_query_log = 'OFF';
ALTER TABLE mysql.slow_log ENGINE = MyISAM;
SET GLOBAL slow_query_log = @old_log_state;

Tenha em mente que o MyISAM convertido não possui nenhum índice.

Esta é uma coluna chamada 'start_time', que é um timestamp. Sinta-se à vontade para indexá-lo assim:

SET @old_log_state = @@global.slow_query_log;
SET GLOBAL slow_query_log = 'OFF';
ALTER TABLE mysql.slow_log ADD INDEX (start_time);
SET GLOBAL slow_query_log = @old_log_state;

Deixe-nos saber como isso funcionou, por favor !!!

    
por 06.02.2011 / 06:22

Tags