No MySQL, o que significa "Overhead", o que há de ruim nisso e como corrigi-lo?

157

pergunta simples, mas está me incomodando há um tempo agora ....

o que é "overhead" no MySQL e devo me preocupar?

clicar em "otimizar tabela" corrige isso de verdade?

johnnietheblack
fonte

Respostas:

147

Parece que a sobrecarga é um espaço em disco temporário usado pelo banco de dados para executar algumas das consultas; portanto, você deve se preocupar apenas se isso ficar muito alto.

Você pode comparar 'Otimizando a tabela' com a desfragmentação do seu disco rígido.

Eu cito:

Todo banco de dados, com o tempo, exigirá alguma forma de manutenção para mantê-lo em um nível de desempenho ideal . Limpar linhas excluídas, redefinir, compactar, gerenciar caminhos de índice, desfragmentar etc. é o que é conhecido como OPTIMIZAÇÃO no mysql e outros termos em outros bancos de dados. Por exemplo, o IBM DB2 / 400 o chama REORGANIZE PHYSICAL FILE MEMBER.

É como trocar o óleo do carro ou fazer um ajuste. Você pode pensar que realmente não precisa, mas ao fazê-lo, seu carro funciona muito melhor, você obtém uma melhor quilometragem, etc. Um carro que acumula muita quilometragem exige ajustes com mais frequência. Um banco de dados que utiliza muito exige o mesmo. Se você estiver executando muitas operações UPDATE e / ou DELETE, e especialmente se suas tabelas tiverem colunas de comprimento variável (VARCHAR, TEXT, etc), será necessário manter o controle.

Jaspe
fonte
1
@ Jasper As tabelas estão totalmente bloqueadas (não é possível ler / gravar) durante a duração da otimização?
Pacerier 06/07/12
4
De onde se originou essa citação? Estou encontrando muitos resultados no Google.
Ian Hunter
como sabemos o que causa a sobrecarga repetidamente?
mahen3d
obrigado pelo exemplo perfeito e fácil, independentemente dos termos técnicos.
Shyammakwana.me 1/07/2017
1
O que é considerado "realmente alto"?
TV-C-15
87

Se você está falando sobre o que phpMyAdminchamaoverhead , é o tamanho real de um arquivo de dados da tabela em relação ao tamanho ideal do mesmo arquivo de dados (como se tivesse acabado de ser restaurado a partir do backup).

Por motivos de desempenho, MySQLnão compacta os arquivos de dados após excluir ou atualizar linhas.

Isso overheadé ruim para a varredura de tabela, ou seja, quando sua consulta precisar executar todos os valores da tabela, será necessário procurar mais espaço vazio.

Você pode se livrar da overheadexecução OPTIMIZE TABLEque compactará sua tabela e índices.

Quassnoi
fonte
7
O tamanho da documentação do mysql diz "OPTIMIZE TABLE deve ser usado se você excluiu grande parte de uma tabela ou se você fez muitas alterações em uma tabela com linhas de comprimento variável", este é o meu caso, obrigado :)
boclodoa
8

A sobrecarga é Data_free de uma tabela, ou seja, o número de bytes alocados, mas não utilizados. Podemos encontrá-lo pelo comando SQL SHOW TABLE STATUS . É o espaço livre no tamanho alocado para sua tabela.

Shankar Prakash G
fonte
1

Otimizar tabela pode ser muito problemático. Por exemplo, se a tabela for muito usada em um site.

http://dev.mysql.com/doc/refman/5.1/en/optimize-table.html

Após excluir grande parte de uma tabela MyISAM ou ARCHIVE ou fazer muitas alterações em uma tabela MyISAM ou ARCHIVE com linhas de comprimento variável (tabelas que possuem colunas VARCHAR, VARBINARY, BLOB ou TEXT). As linhas excluídas são mantidas em uma lista vinculada e as operações INSERT subsequentes reutilizam as posições antigas da linha. <

Acredito que confirmei esse comportamento. E certamente seria realmente muito útil.

Thomas Lindegaard Jensen
fonte