AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 34467
Accepted
ashuthosh
ashuthosh
Asked: 2013-02-10 03:05:50 +0800 CST2013-02-10 03:05:50 +0800 CST 2013-02-10 03:05:50 +0800 CST

Problema com o mecanismo de armazenamento

  • 772

Acabei de receber o erro abaixo em um dos escravos. Eu apenas pesquisei no Google e mudei a variável myisam_data_pointer_sizede 4 para 6.

De alguma forma, o meu ALTER TABLEfoi 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 |
+---------------------------------+---------------
mysql myisam
  • 1 1 respostas
  • 178 Views

1 respostas

  • Voted
  1. Best Answer
    RolandoMySQLDBA
    2013-02-10T11:47:53+08:002013-02-10T11:47:53+08:00

    Não tenho muita experiência em mudar a myisam_data_pointer_sizeopçã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 tamanho padrão do ponteiro em bytes, a ser usado por CREATE TABLE para tabelas MyISAM quando nenhuma opção MAX_ROWS for especificada. Esta variável não pode ser menor que 2 ou maior que 7. O valor padrão é 6. Consulte a Seção C.5.2.12, “A tabela está cheia”.

    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” :

    Você está usando uma tabela MyISAM e o espaço necessário para a tabela excede o permitido pelo tamanho do ponteiro interno. O MyISAM cria tabelas para permitir até 4 GB por padrão, mas esse limite pode ser alterado até o tamanho máximo permitido de 65.536 TB (2.567 – 1 bytes).

    Se você precisar de uma tabela MyISAM maior que o limite padrão e seu sistema operacional suportar arquivos grandes, a instrução CREATE TABLE oferece suporte às opções AVG_ROW_LENGTH e MAX_ROWS. Consulte a Seção 12.1.5, “Sintaxe CREATE TABLE”. O servidor usa essas opções para determinar o tamanho permitido para uma tabela.

    Se o tamanho do ponteiro for muito pequeno para uma tabela existente, você pode alterar as opções com ALTER TABLE para aumentar o tamanho máximo permitido de uma tabela. Consulte a Seção 12.1.2, “Sintaxe ALTER TABLE”.

    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?

    • A tabela tem muitos TEXT/BLOBcampos?
    • Esses campos poderiam TEXT/BLOBser removidos e colocados em outra tabela?
    • A tabela suportaria alguma normalização?
    • Você tem campos INT que podem ser reduzidos para TINY, SMALLINT ou MEDIUMINT?

    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 verifique datadirse o próprio disco não está cheio.

    • 3

relate perguntas

  • Existem ferramentas de benchmarking do MySQL? [fechado]

  • Onde posso encontrar o log lento do mysql?

  • Como posso otimizar um mysqldump de um banco de dados grande?

  • Quando é o momento certo para usar o MariaDB em vez do MySQL e por quê?

  • Como um grupo pode rastrear alterações no esquema do banco de dados?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Conceder acesso a todas as tabelas para um usuário

    • 5 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve