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 / 62791
Accepted
Mike Purcell
Mike Purcell
Asked: 2014-04-09 14:27:27 +0800 CST2014-04-09 14:27:27 +0800 CST 2014-04-09 14:27:27 +0800 CST

MySQL - Melhor solução de consulta de leitura longa em um sistema baseado em replicação

  • 772

Estou trabalhando em um projeto em que o trabalho em uma fila requer uma leitura de banco de dados em esquemas de tabelas heterogêneas (InnoDB/MyISAM). As consultas construídas durante o processo de "leitura" podem resultar em tempos de execução de 10 a 15 minutos e serão executadas em paralelo, digamos 10 a 15 por vez, mas cada uma será mutuamente exclusiva e não terá conhecimento de nenhum processo irmão.

PERGUNTAS

  • É melhor interromper a replicação, emitir a consulta de leitura e reiniciar a replicação? Em caso afirmativo, o que acontece com uma consulta de leitura em execução no momento se a replicação for reativada repentinamente (por um processo irmão)?
  • é seguro permitir consultas de leitura simultâneas e processamento de replicação?
mysql replication
  • 1 1 respostas
  • 1051 Views

1 respostas

  • Voted
  1. Best Answer
    RolandoMySQLDBA
    2014-04-12T12:08:22+08:002014-04-12T12:08:22+08:00

    Você precisa estar ciente dos resultados da consulta e do comportamento da consulta com a replicação em execução. Embora haja um mínimo de dois encadeamentos para a replicação do MySQL, é o encadeamento SQL que pode atrapalhar as consultas SELECT. Por quê?

    MyISAMGenericName

    Cada vez que um INSERT, um UPDATE ou um DELETE é executado, uma tabela completa bloqueada é emitida. Isso pode bloquear SELECTs. A única exceção é quando você tem concurrent_insert definido como 2 e a tabela MyISAM não experimenta nenhum UPDATE ou DELETE.

    Por favor, veja minhas postagens anteriores sobre o comportamento do MyISAM.

    • Dec 04, 2013 : Devemos bloquear tabelas MyISAM explicitamente ou é implícito....?
    • Nov 25, 2011: Pergunta de bloqueio MyISAM do MySQL

    AFFECTS ON REPLICATION : Você deve se preocupar um pouco aqui porque o thread SQL processa apenas INSERTs, UPDATEs, DELETEs e vários comandos DDL. Se algum desses comandos for emitido pelo thread SQL durante a replicação do MySQL em uma tabela MyISAM que você está lendo, haverá alguma latência devido ao bloqueio momentâneo da tabela.

    InnoDBGenericName

    O InnoDB pode ser um pouco mais tolerante ao permitir que você leia uma tabela do InnoDB que está sendo gravada, mas tem um preço. Qual é o preço ???

    InnoDB permite MVCC (Multiversion Concurrency Control) e Transaction Isolation . Isso significa que o InnoDB gravará muitas informações de limpeza e de ponto no tempo para que você possa ler as linhas de uma tabela do InnoDB sem bloquear as gravações de entrada e vice-versa.

    Aqui está uma representação pictórica da arquitetura do InnoDB

    Arquitetura InnoDB

    Todas essas informações de limpeza e ponto no tempo ficam dentro dos segmentos Undo Space e Rollback dentro do tablespace do sistema.

    AFETA NA REPLICAÇÃO : Quando se trata de replicação do MySQL, INSERTs, UPDATEs e DELETEs contra um InnoDB de um thread SQL ativo não bloquearão SELECTs das mesmas tabelas InnoDB. Obviamente, qualquer DDL em uma tabela InnoDB bloqueará SELECTs da mesma forma que uma tabela MyISAM faria .

    REPLICAÇÃO do MySQL

    A replicação do MySQL também pode ser afetada pelos mesmos motivos que mencionei. O sapato estaria no outro pé: o thread SQL ficaria bloqueado se precisasse fazer um INSERT, UPDATE ou DELETE em uma tabela MyISAM. Para InnoDB, as informações do MVCC seriam escritas para permitir SELECTs no Slave.

    EPÍLOGO

    Se o escravo tiver centenas de conexões de banco de dados, mais uma conexão de banco de dados (o thread SQL) pode não ser muito para se preocupar

    Se você sabe que o Escravo pode experimentar um ataque de INSERTs, UPDATEs e DELETEs provenientes do SQL Thread do Escravo, você pode executar STOP SLAVE;para desconectar o thread SQL e parar de processar comandos SQL e também parar de baixar os eventos binlog do Master. Como alternativa, você pode executar STOP SLAVE SQL_THREAD;para desconectar o encadeamento SQL, mas permitir que o evento binlog mestre de entrada continue a ser baixado para seus logs reais e aguardar o processamento quando START SLAVE;for emitido posteriormente. Se o número de comandos SQL provenientes da replicação do MySQL for pequeno e distante, a replicação do MySQL poderá ser deixada em execução.

    • 2

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ê?

  • Qual é a diferença entre a replicação do PostgreSQL 9.0 e o Slony-I?

  • 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