Pergunta

MySQL5.0 com um par de bancos de dados "A" e "B", ambos com grandes tabelas InnoDB. "Drop Database A;" Freezes Database "B" por alguns minutos. Nada está usando "A" naquele momento, então por que essa é uma operação tão intensiva?

Pontos de bônus: dado que usamos "A", enviamos dados em "B" e depois mudamos para o uso de "B", como podemos fazer isso mais rápido? A queda de bancos de dados não é o tipo de coisa que normalmente precisa fazer o tempo todo, então isso está um pouco fora dos gráficos.

Foi útil?

Solução

Então não tenho certeza Resposta de Matt Rogish vai ajudar 100%.

O problema é que o MySQL* tem um mutex (bloqueio mutuamente exclusivo) em torno das tabelas de abertura e fechamento, de modo que basicamente significa que, se uma tabela estiver em processo de fechamento/excluído, não Outras tabelas podem ser abertas.

Isso é descrito por um colega meu aqui:http://www.mysqlperformanceblog.com/2009/06/16/slow-drop-table/

Uma excelente estratégia de redução de impacto é usar um sistema de arquivos como o XFS.

A solução alternativa é feia. Você essencialmente precisa mordiscar todos os dados nas tabelas antes de soltá -los (consulte o comentário nº 11 no link acima).

Outras dicas

Seguindo de Skaffman:

Altere o seu My.cnf (e reinicie o MySQL) para incluir:

innodb_file_per_table = 1

(http://mysqldba.blogspot.com/2006/12/innodbfilepertable.html)

Isso fornecerá aos seus bancos de dados armazenamento de arquivos dedicado e retirá -lo do pool compartilhado. Ele permitirá que você faça coisas divertidas, como colocar as tabelas/índices em diferentes discos físicos para dividir ainda mais a E/S e melhorar o desempenho.

Observe que isso não altera as tabelas existentes; Você terá que trabalhar para conseguir que eles em seu próprio arquivo (http://capttofu.livejournal.com/11791.html).

Por padrão, todos os bancos de dados InnoDB em uma determinada instalação do MySQL Server usam o mesmo pool físico de arquivos de dados; portanto, é concebível que "soltar o banco de dados A" possa afetar o banco de dados B. Como "Drop Database" provavelmente envolverá reorganização pesada dos arquivos de dados do InnODB, É concebível que seja uma operação de bloqueio, devido à intensidade da operação ou pelo design.

No entanto, acho que você pode fazer com que cada banco de dados use diferentes arquivos físicos, embora eu não tenha tentado isso mesmo, então você terá que descobrir os detalhes para si mesmo. Falhando nisso, pode ser necessário usar duas instalações diferentes do MySQL lado a lado na mesma máquina, o que é perfeitamente factível.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top