As tabelas innodb fragmentadas do MySQL podem causar problemas de E / S? "Tarefa pendurada por 120 segundos" falhas?

3

Grandes bancos de dados de innodb com picos de carga parecem estar causando falhas aleatórias com "tarefas suspensas por 120 segundos" no console. Não há registros sendo gravados no sistema durante essas falhas. As mesas de innodb são bastante grandes, com mais de 20 shows em armazenamento.

Poderia fragmentar a tabela com cargas pesadas de E / S no Ubuntu 10.04 com o Kernel 2.6.36 e 2.6.38-15 64 bits causando falhas aleatórias no sistema?

Estamos investigando problemas com falhas aleatórias do sistema que estão ocorrendo em grandes tabelas innodb hospedadas em servidores hospedados vps "baremetal dedicados".

A versão do MySQL é 5.1.

Aqui estão os resultados de: "SELECT comprimento_de_dados, comprimento_de_índice, (comprimento_de_dados + comprimento_de_índice) / potência (1024,3) GB DE informações_schema.tabelas WHERE ENGINE = 'InnoDB' ORDER BY comprimento_de_dados + comprimento_do_indexo LIMITE DESC. 10:":

+-------------+--------------+-------------------+
| data_length | index_length | GB                |
+-------------+--------------+-------------------+
| 14758707200 |  17220501504 |   29.782958984375 |
|  9456762880 |  16465543168 |  24.1420288085938 |
| 16983785472 |   6954041344 |  22.2938385009766 |
|  5625610240 |   2997813248 |  8.03118896484375 |
|  3694133248 |   1730150400 |      5.0517578125 |
|  2031091712 |     35209216 |  1.92439270019531 |
|  1357905920 |    706740224 |      1.9228515625 |
|  1107312640 |    320356352 |  1.32962036132812 |
|   637534208 |    760889344 |  1.30238342285156 |
|   488636416 |    260620288 | 0.697799682617188 |
+-------------+--------------+-------------------+

Abrir arquivos = 300.

tia

    
por Tom G 21.08.2012 / 08:12

2 respostas

1

Parece que você tem tabelas enormes

Se você gostaria de desfragmentar uma tabela Indb de mydb.mytable, apenas execute o seguinte:

ALTER TABLE mydb.mytable ENGINE=InnoDB;

Sob o hodd, ele fará o seguinte:

CREATE TABLE mydb.mytablenew LIKE mydb.mytable;
INSERT INTO mydb.mytablenew SELECT * mydb.mytable;
ALTER TABLE mydb.mytable RENAME mydb.mytableold;
ALTER TABLE mydb.mytablenew RENAME mydb.mytable;
DROP TABLE mydb.mytableold;

Se você deseja desfragmentar em massa todas as Tabelas InnoDB, basta executar isto:

echo "SET SQL_LOG_BIN = 0;" > /root/DefragInnoDB.sql
MYSQL_USER=root
MYSQL_PASS=rootpassword
MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS}"
SQL="SELECT CONCAT('ALTER TABLE ',table_schema,'.',table_name,' ENGINE=InnoDB;')"
SQL="${SQL} FROM information_schema.tables WHERE engine='InnoDB'"
mysql ${MYSQL_CONN} -ANe"${SQL}" >> /root/DefragInnoDB.sql
mysql ${MYSQL_CONN} -A < /root/DefragInnoDB.sql

Você pode não precisar desfragmentar o InnoDB com freqüência. Confira meu post no DBA StackExchange para determinar se qualquer tabela InnoDB precisa ser desfragmentada .

Em um sidenote, algumas das tabelas parecem ter mais espaço consumido pelo índice do que pelos dados. Depois de executar a desfragmentação nessas tabelas, volte e examine os índices em cada tabela. Tente determinar se houver algum índice não utilizado e remova-o.

Você tem 300 como innodb_open_files . Você pode aumentá-lo, mas não enlouqueça muito alto

Veja os posts a seguir em innodb_open_files

  • link
  • link (por causa do innodb_open_files ser muito grande)

Eu também gostaria de recomendar que você atualize o MySQL 5.5 onde você pode criar innodb_read_io_threads e innodb_write_io_threads para melhor CPU utilização pelo InnoDB Storage Engine .

    
por 22.08.2012 / 19:37
2

Há muitos clientes acessando esse banco de dados ou apenas algumas conexões simultâneas? Existe RAM suficiente ou o servidor troca?

A coisa que você descreve absolutamente pode acontecer, mas isso significaria uma carga de trabalho muito ocupada ou um subsistema de E / S muito lento / não confiável.

Você já tentou o tipo de desempenho que bonnie++ , iozone ou alguma outra ferramenta de avaliação de desempenho fornecerá ao seu servidor?

    
por 21.08.2012 / 08:20