Les différents paramètres sont à l'origine my.cnf erreur « longueur de clé max est de 1000 octets »

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

  •  20-09-2019
  •  | 
  •  

Question

Edit: Cela peut être un bug spécifique à 5,0. (Je suis sur 5.0.83). Suppression du réglage de innodb_log_file_size se débarrasse du problème. Ce qui prend tout son sens. Non.

recherche sur Google à propos de trouve une poignée de similaire, mais pas de problèmes identiques dans 5.0 qui ont été patchés plus tard.

Avec les « mauvais » dans les paramètres my.cnf, cette déclaration créer sur MySQL 5.0 va me donner la « clé spécifiée est trop longue, longueur de clé maximale est de 1000 octets ».

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;

En essayant d'améliorer les performances, je suis arrivé à my.cnf paramètres qui fonctionnent bien, mais l'erreur « clé était trop longue ». Je n'ai paramètres my.cnf qui peuvent créer cette clé, mais qui exécutent terriblement sur l'importation de données dans une autre table, très grande.

Les paramètres qui fonctionnent mal, mais effectuer (et qui ont des valeurs whacky de ma tentative de composer différents paramètres dans):

[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

Les paramètres qui fonctionnent bien, mais donnez-moi l'erreur de longueur de clé:

[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
Était-ce utile?

La solution

Je ne pense pas que votre my.cnf a beaucoup à voir avec cela, il doit y avoir une autre variable.

Des Restrictions sur les tables InnoDB :

  

La longueur de clé interne maximale est   3500 octets, mais MySQL se cantonne   ce 3072 octets. (1024 octets pour   non 64 bits construit avant MySQL 5.0.17,   et pour toutes les versions avant 5.0.15.)

Je note également bug 4541 indique une limite de 1000 octets, et qu'il n'y a pas l'intention d'augmenter simplement cela.

Sur le plan de la performance, les grands indices (et tables) comme cela sera vraiment très lent. Je vous suggère d'indexation que le préfixe des varchars plutôt que la chaîne entière.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top