Diferentes configuraciones en my.cnf están causando “longitud de clave máxima es de 1000 bytes” error

StackOverflow https://stackoverflow.com/questions/1731149

  •  20-09-2019
  •  | 
  •  

Pregunta

Edit: Esto puede ser un error 5,0-específico. (Estoy en 5.0.83). Extracción de la configuración innodb_log_file_size se deshace del problema. Lo que tiene sentido completo. No.

Googling sobre encuentra un puñado de similares, pero no idénticos problemas en 5,0 que fueron parcheados más tarde.

Con la configuración "mal" en my.cnf, esta sentencia de creación de MySQL 5.0 me dará la "llave especificado es demasiado largo; longitud de clave máxima es de 1000 bytes".

CREATE TABLE ReproduceTheProblem (
COLUMN_ONE varchar(200) character set utf8 default NULL,
COLUMN_TWO varchar(200) character set utf8 default NULL,  
KEY ThisKeyBreaks(COLUMN_ONE, COLUMN_TWO)  
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Al tratar de mejorar el rendimiento, llegué a la configuración my.cnf que se desempeñan bien pero conseguir la "llave era demasiado largo" de error. Tengo la configuración my.cnf que pueden crear esta clave, pero que realizan terriblemente en la importación de datos en una tabla diferente, muy grande.

La configuración que trabajar, pero un mal rendimiento (y que tienen algunos valores whacky de mi intento de marcar distintos ajustes en):

[client]
port        = 3306
socket      = /tmp/mysql.sock

[mysqld]
port        = 3306
socket      = /tmp/mysql.sock
skip-locking
key_buffer_size = 384M
max_allowed_packet = 1024M 
table_cache = 256
max_sp_recursion_depth=255
sort_buffer_size = 2M 
read_buffer_size = 2M 
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 64M
myisam_max_sort_file_size = 30G
thread_cache_size = 8
query_cache_size= 16M
thread_concurrency = 8
max_heap_table_size = 9900000
skip-federated
log-bin=mysql-bin
server-id   = 1

[mysqldump]
quick
max_allowed_packet = 256M

[mysql]
no-auto-rehash

[isamchk]
key_buffer = 256M
sort_buffer_size = 256M
read_buffer = 2M
write_buffer = 2M
[myisamchk]
key_buffer = 256M
sort_buffer_size = 256M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout

La configuración que se desempeñan bien, pero me da el error de longitud de la clave:

[client]
port            = 3306
socket          = /tmp/mysql.sock

[mysqld]
port            = 3306
socket          = /tmp/mysql.sock
max_allowed_packet = 200M
table_cache = 256
query_cache_type = 1
query_cache_limit = 20M
query_cache_size = 500M
long_query_time = 2
thread_cache_size = 1000
thread_concurrency = 4
innodb_thread_concurrency = 4 
old_passwords = 1
max_connections = 1000
max_sp_recursion_depth = 255
server-id       = 0
innodb_buffer_pool_size = 800M
innodb_additional_mem_pool_size = 50M
innodb_log_file_size=50M
innodb_log_buffer_size = 200M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout =50

[mysqldump]
quick
max_allowed_packet = 200M

[mysql]
no-auto-rehash
¿Fue útil?

Solución

No creo que su my.cnf tiene mucho que ver con esto, tiene que haber alguna otra variable.

A partir de los :

  

La longitud máxima de la clave interna es   3500 bytes, pero sí MySQL Restringe   esto a 3072 bytes. (1024 bytes para   no de 64 bits se acumula antes de MySQL 5.0.17,   por todas construye antes 5.0.15.)

También observo error 4541 indica un límite de 1000 bytes, y que no hay planes para aumentar simplemente esto.

En el frente de rendimiento, grandes índices (y tablas) como éste va a ser muy muy lento. Yo te sugeriría que la indexación sólo el prefijo de las varchars en lugar de toda la cadena.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top