MariaDB 10.0 trabalho lento mysqldump

1

eu tenho 1.800 (innodb) DBs no meu MariaDB 10.0, o 'mysqldump' funciona muito devagar!

Se eu executo 'mysqldump' inicia o processo:

"SELECIONE LOGFILE_GROUP_NAME, FILE_NAME, TOTAL_EXTENTS, INITIAL_SIZE, MOTOR, EXTRA FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE = 'UNDO LOG' AND FILE_NAME NÃO É NULL AND LOGFILE_GROUP_NAME IN (

SELECIONE DISTINCT LOGFILE_GROUP_NAME FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE = 'DATAFILE' AND TABLESPACE_NAME IN (

SELECIONAR DISTINCT TABLESPACE_NAME FROM INFORMATION_SCHEMA.PARTITIONS ONDE TABLE_SCHEMA EM ( 'table_test' ) ) ) GROUP BY LOGFILE_GROUP_NAME, FILE_NAME, ENCOMENDAR O MOTOR POR LOGFILE_GROUP_NAME "in information_schema

Como consertar isso? Como desabilitar esse processo no 'mysqldump'?

Obrigado!

    
por init0 11.02.2014 / 10:37

1 resposta

2

Editar:

O problema é confirmado no MariaDB 10.0.8 e 5.5.36 , e confirmado não existir no MySQL 5.5.36, aparentemente devido a diferenças de implementação no otimizador de consulta.

O texto abaixo é, portanto, ajustado de acordo com as recomendações de Elena Stepanova do MariaDB.

Eu reproduzi esse comportamento no MariaDB 10.0.8 no wheezy do Debian. Eu não consegui reproduzi-lo no MySQL 5.5.36.

Se você executar mysqldump -uroot ou qualquer usuário com privilégios totais, isso gerará uma consulta que fará com que o mysqld do MariaDB verifique o superdiretório do banco de dados e os subdiretórios todos e todos Metadados de tabela para todas tabelas nesses subdiretórios.

Se você executar mysqldump com privilégios de usuário específicos, e estes forem concedidos para acesso a apenas um ou dois bancos de dados, o mysqldump é tão rápido quanto você esperaria que fosse.

Existem duas soluções possíveis.

A solução alternativa ainda está usando um usuário super privilegiado com acesso a todos os bancos de dados, mas acelera o processo desativando o recurso semijoin.

A solução alternativa B cria um usuário de backup que recebe acesso a cada banco de dados, estreitando o conjunto de privilégios.

Qual método funciona melhor para você depende de como você está confortável usando um usuário super privilegiado para acessar todos os bancos de dados, quantos bancos de dados você tem, quantos usuários você tem acesso a vários bancos de dados, quantos bancos de dados têm dependências entre eles, e como seu banco de dados está sendo acessado enquanto você faz seus despejos de banco de dados.

A solução alternativa A é provavelmente a mais rápida, contornando B ligeiramente mais devagar.

Solução alternativa A - usuário super privilegiado, semijoin desativado

Por favor, note que desabilitar semijoin pode afetar o desempenho de outras consultas. Embora possa ser configurado em my.cnf, você provavelmente não deveria.

  1. Desativar semijoin temporariamente:

    SET GLOBAL optimizer_switch='semijoin=off';
    
  2. Descarregar o banco de dados, por exemplo como o usuário "root":

    mysqldump db -uroot -prootpassword | gzip > DB.sql.gz
    
  3. Ativar semijoin:

    SET GLOBAL optimizer_switch='semijoin=on';
    

Solução alternativa B - usuário de backup separado

  1. Conceda privilégios totais ao usuário de backup ao banco de dados:

    GRANT USAGE ON 'db'.* TO 'backup'@'%' IDENTIFIED BY 'backuppassword';
    GRANT SELECT, LOCK TABLES ON 'mysql'.* TO 'backup'@'%';
    GRANT SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER ON 'db'.* TO 'backup'@'%';
    FLUSH PRIVILEGES;
    
  2. Descarregar o banco de dados como esse usuário:

    mysqldump db -ubackup -pbackuppassword | gzip > DB.sql.gz
    
  3. Revogar os privilégios:

    REVOKE ALL PRIVILEGES ON 'db'.* FROM 'backup'@'%';
    REVOKE ALL PRIVILEGES ON 'mysql'.* FROM 'backup'@'%';
    FLUSH PRIVILEGES;
    

Se cada banco de dados pertencer a um usuário separado e você souber as senhas desses usuários, você poderá usá-las em vez do usuário de backup e sua senha e, portanto, ignorar completamente as etapas 1 e 3.

BTW: Também relatei isso para a equipe de desenvolvimento do MariaDB, se você tiver alguma coisa útil para contribuir, sinta-se à vontade para acompanhar isso aqui:

link

    
por 24.02.2014 / 15:56

Tags