Acabei de receber o erro abaixo em um dos escravos. Eu apenas pesquisei no Google e mudei a variável myisam_data_pointer_size
de 4 para 6.
De alguma forma, o meu ALTER TABLE
foi bem sucedido.
- Você pode me informar se minha abordagem foi correta? Não tenho certeza sobre esta variável?
Isso causará algum problema de desempenho. devo revertê-lo?
130208 9:40:19 [ERRO] Escravo: Erro 'A tabela '#sql-19fc_3f8acc6' está cheia' na consulta. Banco de dados padrão: 'registro'. Consulta: 'alter table enom_log_2012_12_03 add responsedatatype char(1) not null after requestdata', Error_code: 1114 130208 9:40:19 [ERRO] Erro ao executar a consulta, thread SQL escravo abortada. Corrija o problema e reinicie o thread SQL escravo com "SLAVE START". Paramos no log 'pumpkin-bin.008662' posição 411952695
Descrição do Problema
Verifique os Alertas no Errorlog para quaisquer erros e falhas. Verifique se o MySQL está ativo? se não, verifique se o processo foi desligamento normal.
Adendo
mysql> SHOW TABLE STATUS FROM registry LIKE 'enom_log_2012_12_03'\G
*************************** 1. row ***************************
Name: enom_log_2012_12_03
Engine: MyISAM
Version: 9
Row_format: Dynamic
Rows: 1786679
Avg_row_length: 2403
Data_length: 4293600396
Max_data_length: 4294967295
Index_length: 60999680
Data_free: 0
Auto_increment: 1786680
Create_time: 2013-02-06 15:19:07
Update_time: 2013-02-06 15:22:16
Check_time: 2013-02-06 15:26:35
Collation: utf8_general_ci
Checksum: NULL
Create_options:
Comment:
1 row in set (0.00 sec)
mysql> show global variables like '%tmp%';
+----------------+-----------------------+
| Variable_name | Value |
+----------------+-----------------------+
| bdb_tmpdir | /usr/local/mysql/tmp/ |
| max_tmp_tables | 32 |
| tmp_table_size | 8388608 |
| tmpdir | /usr/local/mysql/tmp |
+----------------+-----------------------+
mysql> show global variables like '%myisam%';
+---------------------------------+---------------+
| Variable_name | Value |
+---------------------------------+---------------+
| myisam_data_pointer_size | 4 |--before changing it was 4 .. i changed it to 6
| myisam_max_extra_sort_file_size | 2147483648 |
| myisam_max_sort_file_size | 2147483647 |
| myisam_recover_options | OFF |
| myisam_repair_threads | 1 |
| myisam_sort_buffer_size | 4194304 |
| myisam_stats_method | nulls_unequal |
+---------------------------------+---------------
Não tenho muita experiência em mudar a
myisam_data_pointer_size
opção de 4 para 6.Simplificando, acho que você acertou com base na documentação. Aqui está o porquê:
De acordo com a documentação do MySQL 5.5 em
myisam_data_pointer_size
:O fato de você ter alterado de 4 mostra que a tabela foi criada originalmente em uma versão anterior do MySQL (o tamanho padrão do ponteiro é 4 no MySQL 4.1) .
Olhando para a referência adicional do MySQL 4.1 para
“The table is full”
:Como você executou a alteração e o MySQL não caiu em agonia, você deve ter acertado.
ADVERTÊNCIA Nº 1
Notei as características da mesa que você postou
Rows: 1786679
(são 1.786.679 linhas)Avg_row_length: 2403
Row_format: Dynamic
O que me incomoda é o comprimento médio. Por quê? Eu vi facilmente tabelas MyISAM de 1 bilhão de linhas e nunca tive um cliente mudando seu tamanho de ponteiro. Este pode ser um bom momento para reavaliar o layout da tabela.
Aqui estão algumas maneiras possíveis de reduzir a tabela sem tocar no tamanho do ponteiro?
TEXT/BLOB
campos?TEXT/BLOB
ser removidos e colocados em outra tabela?ADVERTÊNCIA Nº 2
Na próxima vez que você obtiver
table is full
, não assuma automaticamente que a tabela atingiu seu limite interno. Sempre verifiquedatadir
se o próprio disco não está cheio.