my.cnf의 다른 설정은 "최대 키 길이는 1000 바이트"오류를 유발합니다.

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

  •  20-09-2019
  •  | 
  •  

문제

편집 : 이것은 5.0 특정 버그 일 수 있습니다. (저는 5.0.83에 있습니다). innodb_log_file_size 설정을 제거하면 문제가 제거됩니다. 완전히 의미가 있습니다. 아니다.

Googling에 대한 검색은 나중에 패치 된 5.0에서 비슷하지만 동일한 문제는 발견되지 않습니다.

my.cnf의 "잘못된"설정이 있으면 MySQL 5.0 에서이 명령문을 작성하면 "지정된 키가 너무 길고 최대 키 길이는 1000 바이트"입니다.

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;

성능을 향상 시키려고 노력할 때, 나는 성능이 좋지만 "키가 너무 길다"오류를 얻는 my.cnf 설정에 도달했습니다. 이 키를 만들 수있는 My.CNF 설정이 있지만 데이터를 다른 매우 큰 테이블로 가져 오는 데있어 끔찍하게 수행됩니다.

작동하지만 나쁘게 수행하는 설정 (그리고 다른 설정으로 전화를 걸려는 시도로 인해 약간의 값이있는) : :

[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

잘 수행되는 설정이지만 키 길이 오류를 제공합니다.

[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
도움이 되었습니까?

해결책

나는 당신의 my.cnf가 이것과 많은 관련이 있다고 생각하지 않습니다. 다른 변수가 있어야합니다.

로부터 InnoDB 테이블에 대한 제한:

내부 최대 키 길이는 3500 바이트이지만 MySQL 자체는 이것을 3072 바이트로 제한합니다. (MySQL 5.0.17 이전의 비 64 비트 빌드의 경우 1024 바이트 및 5.0.15 이전의 모든 빌드.)

나도 주목합니다 버그 4541 1000 바이트의 한계를 나타내며 단순히 이것을 증가시킬 계획이 없음을 나타냅니다.

성능 전면에서, 이와 같은 큰 인덱스 (및 테이블)는 정말로 느립니다. 나는 전체 문자열이 아닌 바르 차르의 접두사 만 인덱싱하는 것을 제안합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top