Você precisa procurar em mk-query-digest
Esta ferramenta pode, na verdade, ser executada contra o mysql por um período de tempo específico que você designar e produzirá um mapa das 20 principais consultas por padrão de consulta e dará a você um tempo médio de execução.
Aqui está um excelente vídeo do YouTube sobre como usá-lo como um log lento ad hoc
ATUALIZAÇÃO 2011-07-21 15:58 EDT
Eu tenho uma surpresa agradável para você !!! Se você estiver usando o MySQL 5.1, você pode converter o log geral e log lento em tabelas. Eu estou usando agora com um grande cliente. Aqui está como você pode fazer isso:
No esquema mysql, existem as tabelas general_log abd slow_log.
mysql> show create table mysql.general_log\G
*************************** 1. row ***************************
Table: general_log
Create Table: CREATE TABLE 'general_log' (
'event_time' timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
'user_host' mediumtext NOT NULL,
'thread_id' int(11) NOT NULL,
'server_id' int(10) unsigned NOT NULL,
'command_type' varchar(64) NOT NULL,
'argument' mediumtext NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='General log'
1 row in set (0.05 sec)
mysql> show create table mysql.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.11 sec)
Você pode ativar o uso deles configurando isso em /etc/my.cnf
[mysqld]
log-output=TABLE
Claro, quem quer um arquivo CSV para um log geral e log lento ??? SURPRESA: CONVERTE-OS A MYISAM E ADICIONE UM ÍNDICE AO MOMENTO DE CADA ENTRADA !!!
SET @old_log_state = @@global.slow_query_log;
SET GLOBAL slow_query_log = 'OFF';
ALTER TABLE mysql.slow_log ENGINE = MyISAM;
ALTER TABLE mysql.slow_log ADD INDEX (start_time);
SET GLOBAL slow_query_log = @old_log_state;
SHOW CREATE TABLE mysql.slow_log\G
SET @old_log_state = @@global.general_log;
SET GLOBAL general_log = 'OFF';
ALTER TABLE mysql.general_log ENGINE = MyISAM;
ALTER TABLE mysql.general_log ADD INDEX (event_time);
SET GLOBAL slow_query_log = @old_log_state;
Por favor, note que o log geral tem a coluna event_time e o log lento tem a hora de início da coluna. Apenas o log lento tem a coluna query_time.