더 나은 성능을 위해 MySQL 서버를 어떻게 최적화합니까? [닫은]


0

최근에는 레거시 시스템으로 작업해야했습니다. 많은 테이블이 제대로 정규화되지 않았기 때문에 작업하는 데 많은 시간이 걸렸습니다. 유지 관리 문제로 인해 변경할 수 없습니다. 수석 엔지니어가 성능과 속도 향상을 위해 MySQL 서버를 최적화하라고 말했습니다.

C:\Program Files\MySQL\MySQL Server 5.6\my.ini파일을 다음과 같이 변경했습니다 .

key_buffer_size = 128M 30% of your memory (Max 4GB)
max_allowed_packet = 5M
table_open_cache = 256
sort_buffer_size = 10M
read_buffer_size = 20M
read_rnd_buffer_size = 10M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size= 30M
thread_concurrency = 8
bulk_insert_buffer_size = 256
innodb_buffer_pool_size = 5G  to 50% - 70% of your ram.
innodb_additional_mem_pool_size = 1G to to 10% of ram
innodb_log_buffer_size = 1G
innodb_log_file_size = 1G (Max 4GB) larger the file recovery slow.
innodb_file_per_table = 1

처음에는 잘 작동합니다. 그러나 몇 시간 후에 MySQL을 시작할 수 없었고 MySQL 서버를 다시 설치해야했습니다.

내가 뭘 잘못했고 어떻게 고칠 수 있습니까?


통나무는 무엇을 말했습니까? 아, 그게 실제 내용인가요? 1G (Max 4GB) larger the file recovery slow.무슨 말을할지 고민하지 않고 붙여 넣은 것으로 보입니다.
Seth

예, 복사 붙여 넣기였습니다. 내 친구의 프로세스 내가의 my.ini이 값을 변경 한 후 이전보다 속도를 가지고
삐삐

여전히 머신 사양에 대한 추가 정보가 없으면 DB가 사용하는 엔진과 실제 오류로 인해 MySQL이 나타나지 못하게하는 데 유용한 정보가 없을 것입니다 (아마도). 구성. 이런 식으로 구성을 변경 한 이유는 무엇입니까? 구성 오류 인 경우 특히 "서버 다시 설치"가 필요하지 않습니다. 또한 Stackoverflow에서 동일한 게시물 을 작성한 것처럼 보입니까?
Seth

예, 이것의 사본입니다. 이에 대한 빠른 답변을 원했습니다. 마지막 게시물에 답이 없었으므로 여기에 게시하기로 결정했습니다. db 엔진이 InnoDB임을 나타냅니다. 그리고 오류가 없었습니다. @seth
pippi longstocking

그렇다면 오류가 없다면 MySQL을 시작할 수 없다는 것을 어떻게 알았습니까? 다시 설치하기로 결정한 이유는 무엇입니까? 다른 질문에 대한 답변도 제공해주십시오. DB의 사용 패턴은 무엇입니까?
Seth

답변:


1

구성 파일 추출의 일부 관점을 얻으려면 기본값 ( 1 , 2 ) 과 비교했습니다 . 표기법에는 매개 변수 뒤에 값과 기본 값이 괄호로 표시됩니다.

key_buffer_size = 128M (8M)
max_allowed_packet = 5M (4M)
table_open_cache = 256 (2000)
sort_buffer_size = 10M (2M)
read_buffer_size = 20M (1M)
read_rnd_buffer_size = 10M (2M)
myisam_sort_buffer_size = 64M (8M)
thread_cache_size = 8 (-1)
query_cache_size= 30M (0/1M)
thread_concurrency = 8 (10)
bulk_insert_buffer_size = 256 (8M)
innodb_buffer_pool_size = 5G (128M)
innodb_additional_mem_pool_size = 1G (8M)
innodb_log_buffer_size = 1G (8M)
innodb_log_file_size = 1G (5M)
innodb_file_per_table = 1 (Off/On)

보시다시피 대부분의 캐시가 상당히 증가했습니다. 하지만 그게 말이 되나요? DB가 InnoDB 엔진을 사용하고 있다고 말했습니다. 위의 문서에 따르면 key_buffer_size, read_buffer_size, bulk_insert_buffer_size단지의 MyISAM 데이터베이스에 적용됩니다. 임시 공간이 실행될 때마다 확실하지 않습니다.

myisam_sort_buffer_size문서에 다음과 같이 명시되어 있기 때문에 사용 이 거꾸로 나타납니다 The size of the buffer that is allocated when sorting MyISAM indexes during a REPAIR TABLE or when creating indexes with CREATE INDEX or ALTER TABLE..

또한 당신은 크게 귀하의 DB 사용 패턴에 의존하는 것 같다 다음 설정을 사용하고 max_allowed_packet, table_open_cache, thread_cache_size, innodb_log_buffer_size하지만 당신은 사용 패턴에 대해 아무 말도하지 않았다. 따라서 실제로 무엇을하는지 살펴보고 DB의 사용 패턴과 비교하기 위해 위의 문서를 살펴보십시오.

그주의 sort_buffer_sizeread_rnd_buffer_size세션 당 예약되어 있습니다. MyISAM 매개 변수 중 일부도 마찬가지이므로 각 세션마다 약간의 오버 헤드가 발생합니다. 다시 실제 사용 패턴을 평가해야합니다.

이제 지정한 InnoDB 설정에 대해 innodb_additional_mem_pool_size더 이상 사용되지 않습니다. 수정 줄 이유는 분명하지 않다 innodb_log_file_size, innodb_file_per_table그 변화에 대한 이유가 무엇인지 확실하지. 후자는 기본값 On일까요? 나머지 설정 innodb_buffer_pool_size을 이와 같이 높은 값으로 설정하면 사용을 고려할 수도 innodb_buffer_pool_instances있습니다.

전반적으로 그것은 당신이 무언가를 시도했지만 작동하지 않은 것처럼 보입니다. 귀하의 의견에 따르면 연결을 수락하지 않거나 전혀 발생하지 않는 서비스의 책임을 파악하기 위해 MySQL 로그 파일을 보지조차 못했습니다. 실제로 DB 성능을 최적화하려면 그렇게해야합니다. 쿼리 성능을 높이고 실제로 DB에서 어떤 쿼리가 실행되고 있는지 알아 보려면 테이블에 추가 인덱스를 사용하는 것이 좋습니다. 또한 연결 수와 쿼리 크기 측면에서 DB의 사용 패턴을 이해하려고 노력하십시오.


1
여기 좋은 조언이 있습니다. table_open_cache특별한 이유가없고 변경을 정당화하기위한 테스트가 없다면 구성에서 완전히 제거해야하는 특히 섬세한 값입니다. 여기 에서 내가 가장 좋아하는 인용문과 함께 다음 과 같이 언급 했습니다 . " '서버 튜닝'은 엄청난 시간 낭비 일 수 있습니다."
Michael-sqlbot
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.