AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 40407
Accepted
syneticon-dj
syneticon-dj
Asked: 2013-04-19 15:13:26 +0800 CST2013-04-19 15:13:26 +0800 CST 2013-04-19 15:13:26 +0800 CST

MySQL: consultas de log que seriam executadas sem o uso de índices

  • 772

Estou tentando usar log_queries_not_using_indexes = 1para encontrar consultas que não estão sendo executadas de maneira ideal em um servidor MySQL. No entanto, acho o arquivo de log resultante de valor bastante limitado. Aparentemente, as consultas são registradas sempre que o otimizador realmente decidiu não usar um índice como critério em uma cláusula WHERE. E não se eles realmente não tiverem índices correspondentes às colunas filtradas.

Então dada uma tabela com a seguinte estrutura

CREATE TABLE `test` (
    `id_test`   int(11) NOT NULL AUTO_INCREMENT,
    `some_text`  varchar(255) DEFAULT NULL,
    `some_more_text` text,
 PRIMARY KEY (`id_test`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 

uma consulta SELECT id_test from test where id_test != 69seria registrada no log lento por não usar índices (o otimizador decidiu que uma varredura de tabela é mais eficiente, pois não se pode ganhar muito usando um índice), mas SELECT id_test from test where id_test = 69não.

Eu esperaria o comportamento da última consulta no primeiro caso, pois o índice está presente. Como está, torna a solução de problemas de índices ausentes bastante cansativa. Idéias sobre como abordar isso são muito apreciadas.

mysql index-tuning
  • 1 1 respostas
  • 3296 Views

1 respostas

  • Voted
  1. Best Answer
    Derek Downey
    2013-04-19T16:24:49+08:002013-04-19T16:24:49+08:00

    Não sei ao certo por que você esperava log_queries_not_using_indexes=1não registrar consultas que não usavam um índice. A ideia da configuração é ver quais consultas estão sendo executadas em seu servidor e podem ser candidatos ideais para otimização. Para o seu exemplo:

    SELECT id_test from test where id_test != 69
    

    A menos que você altere os requisitos da consulta, não há muito o que fazer. Claro que é mais rápido fazer uma varredura completa e retornar todas as linhas que não correspondem a esse id_testvalor.

    Quanto às ideias sobre como abordar a análise:

    • Você pode definir min_examined_row_limitum valor mais alto. Se, por exemplo, você deseja excluir consultas que examinam menos de 5.000 linhas, defina esta variável como 5000. Isso é útil para reduzir o 'ruído' no log de consulta lento.

    • Você pode usar uma ferramenta chamada pt-query-digestcom a --reviewopção de revisar suas consultas lentas. A ferramenta permite que você armazene seu histórico de revisões para não repetir o trabalho na mesma consulta durante a análise:

      Ele não mostrará as consultas que você já revisou. Uma consulta é considerada já revisada se você definir um valor para a coluna revision_by. (Se quiser ver as consultas já revisadas, use a opção --report-all.)

      Ele também tem o benefício adicional de armazenar um histórico das consultas registradas em sua consulta lenta. Quem não adoraria evidências históricas de melhorar suas consultas?

    • 3

relate perguntas

  • Existem ferramentas de benchmarking do MySQL? [fechado]

  • Onde posso encontrar o log lento do mysql?

  • Como posso otimizar um mysqldump de um banco de dados grande?

  • Quando é o momento certo para usar o MariaDB em vez do MySQL e por quê?

  • Como um grupo pode rastrear alterações no esquema do banco de dados?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Conceder acesso a todas as tabelas para um usuário

    • 5 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve