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 / 208720
Accepted
yaki_nuka
yaki_nuka
Asked: 2018-06-05 07:53:27 +0800 CST2018-06-05 07:53:27 +0800 CST 2018-06-05 07:53:27 +0800 CST

Pior desempenho após criar tabela vazia

  • 772

Estou trabalhando com o MySQL 5.7.10 e tenho esse problema.

Eu tenho esta tabela para rastrear solicitações:

CREATE TABLE `invoice_requests` (
    `REQUEST_ID` VARCHAR(20) NOT NULL DEFAULT '' COLLATE 'utf8_spanish_ci',
    `INVOICE_ID` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8_spanish_ci',
    `STARTTIME` DATETIME NULL DEFAULT NULL,
    `ENDTIME` DATETIME NULL DEFAULT NULL,
    `STATUS` VARCHAR(10) NOT NULL DEFAULT 'WORKING',
    PRIMARY KEY (`REQUEST_ID`),
    UNIQUE INDEX `UNQ_INVOICE_ID` (`INVOICE_ID`),
    INDEX `IDX_REQ_CODE_END_TIME` (`REQUEST_ID`, `ENDTIME`),
    INDEX `IDX_INV_NUMBER` (`INVOICE_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Esta tabela tinha 350 MB e dados do ano passado. Então fiz os seguintes passos:

  • RENOMEAR TABLE invoice_requests PARA 201805_invoice_requests;
  • execute a 'criar tabela' acima.

As primeiras execuções com essa nova tabela vazia pioraram o desempenho de algumas consultas (de 1 segundo para 15).

Com o MySQL EXPLAIN, verificamos que nenhum índice é usado no INNER JOIN com outras tabelas, mas as consultas são as mesmas e os JOINs são feitos com o campo indexado INVOICE_ID.

Para fins de teste, encerramos o JOIN invoice_requests na consulta e os dados solicitados retornaram rapidamente.

Com este cenário, minhas perguntas seriam:

  • Essas são as etapas corretas para fazer backup de uma tabela (e seus índices também)?
  • Preciso dos dados de índice "antigos" na nova tabela vazia? Supostamente, não. Mas não entendo esse comportamento.

Qualquer ajuda será muito apreciada.

mysql performance
  • 2 2 respostas
  • 653 Views

2 respostas

  • Voted
  1. Best Answer
    Rick James
    2018-06-06T09:17:16+08:002018-06-06T09:17:16+08:00

    Ajudaria ver a consulta lenta e seu arquivo EXPLAIN.

    Enquanto isso, tente

    ANALYZE TABLE invoice_requests;
    

    Não há 'estatísticas' úteis em uma tabela vazia. O InnoDB deveria ter recalculado as estatísticas antes de você chegar a esse problema, mas pode estar faltando alguma coisa.

    Os índices são uma bagunça:

    PRIMARY KEY (`REQUEST_ID`),   -- notes 1,2
    UNIQUE INDEX `UNQ_INVOICE_ID` (`INVOICE_ID`),  -- notes 1,3
    INDEX `IDX_REQ_CODE_END_TIME` (`REQUEST_ID`, `ENDTIME`),  -- note 2
    INDEX `IDX_INV_NUMBER` (`INVOICE_ID`)  -- note 3
    

    Notas:

    1. Por que ter dois índices exclusivos? Você não pode viver com apenas um? (Não sabendo um "pedido" de uma "fatura", não posso aconselhar mais.)

    2. Não se preocupe em adicionar um índice que comece com a(s) coluna(s) do PK

    3. Um UNIQUEíndice é um índice mais uma restrição de exclusividade. Portanto, não se preocupe em adicionar outro índice com a(s) mesma(s) coluna(s).

    Ter um monte de tabelas como 201805_invoice_requestsserá um problema a longo prazo. (Há muitos tópicos discutindo ter várias tabelas idênticas.)

    • 1
  2. yaki_nuka
    2018-06-06T02:52:56+08:002018-06-06T02:52:56+08:00

    No post de ontem, a tabela invoice_requests tem 68k linhas e o desempenho foi muito baixo.

    Agora, algumas novas solicitações chegaram e há apenas 59 linhas a mais.

    Eu estava repetindo a consulta para capturar os resultados e os dados EXPLAIN e, inesperadamente, a consulta leva menos de um segundo.

    Não posso dar nenhuma explicação, nenhuma alteração foi feita no post de ontem. Talvez esta não seja uma mensagem informativa, mas tento não deixar post aberto. Talvez eu devesse esperar mais tempo para postar meu problema, mas ontem essa consulta levou de 13 a 15 segundos dezenas de vezes, em momentos diferentes.

    Então, muito obrigado.

    • 0

relate perguntas

  • 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

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 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

    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
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • 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
    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