MySQL 최대 메모리 사용량
MySQL이 Linux 서버에서 사용하는 메모리의 상한치를 어떻게 설정할 수 있는지 알고 싶습니다.
현재 MySQL은 새로운 쿼리가 요청될 때마다 메모리를 계속 사용하므로 결과적으로 메모리가 부족합니다.MySQL에서 그 이상 사용하지 않도록 제한을 둘 수 있는 방법이 있습니까?
MySQL의 최대 메모리 사용량은 하드웨어, 설정 및 데이터베이스 자체에 따라 크게 달라집니다.
하드웨어
하드웨어는 명백한 부분입니다.RAM이 많을수록 디스크는 고속입니다.하지만 그 월간이나 주간 뉴스레터를 믿지 마세요.MySQL은 Oracle 하드웨어에서도 선형으로 확장되지 않습니다.그것보다 좀 더 까다롭네요.
결론은 MySQL 설정에 권장되는 일반적인 경험 규칙은 없다는 것입니다.현재 사용 상황이나 예측에 따라 달라집니다.
설정 및 데이터베이스
MySQL은 동작을 최적화하기 위해 수많은 변수와 스위치를 제공합니다.만약 문제가 생긴다면, 당신은 앉아서 (fing) 매뉴얼을 읽어야 합니다.
데이터베이스의 경우 - 몇 가지 중요한 제약사항이 있습니다.
- 테이블 엔진(
InnoDB
,MyISAM
, ...) - 크기
- 인덱스
- 사용.
stackoverflow에 관한 MySQL 힌트에서는 중요한 설정이라고 불리는5 ~ 8에 대해 설명합니다.우선, 이 모든 것이 중요한 것은 아닙니다.예를 들어 InnoDB에 많은 리소스를 할당하고 InnoDB를 사용하지 않는 것은 리소스가 낭비되기 때문에 의미가 없습니다.
또는 - 많은 사람들이 이 시스템을 사용할 것을 제안합니다.max_connection
변수 -- 음, MySQL이 그것들을 충족시키기 위해 더 많은 자원을 할당한다는 것을 의미한다는 것을 그들은 거의 알지 못합니다.max_connections
--필요한 경우.보다 명확한 해결책은 DBAL에서 데이터베이스 연결을 닫거나 DBAL을 낮추는 것입니다.wait_timeout
그 실들을 풀어주려고.
제 말뜻을 아시겠지만, 읽고 배울 게 정말 많아요.
엔진
테이블 엔진은 매우 중요한 결정입니다.많은 사람들이 일찍 잊고 있다가 갑자기 30GB 크기의 엔진과 싸우고 있습니다.MyISAM
전체 응용 프로그램을 잠그고 차단하는 테이블입니다.
MyISAM이 형편없다는 건 아니지만InnoDB
거의 또는 거의 같은 속도로 반응하도록 조정할 수 있다MyISAM
row-locking 등의 기능을 제공합니다.UPDATE
반면에.MyISAM
는, 기입시에 테이블 전체를 잠급니다.
MySQL을 자체 인프라스트럭처에서 자유롭게 실행할 수 있다면 Percona 서버도 확인해 보십시오.이것은 Facebook이나 Google등의 기업으로부터의 많은 공헌을 포함하고 있는 것 외에, Percona의 독자적인 대체 서비스도 포함되어 있기 때문입니다.InnoDB
,불렀다XtraDB
.
퍼코나 서버(및 -클라이언트) 셋업(Ubuntu)에 대해서는, 다음의 요점을 참조해 주세요.http://gist.github.com/637669
크기
데이터베이스의 사이즈는 매우 중요합니다.Intarwebs의 대부분의 사용자는 대량의 MySQL 셋업을 처리한 적이 없지만 실제로 존재합니다."PostgreSQL을 사용하세요!"와 같은 트롤을 하는 사람도 있지만, 지금은 무시합시다.
결론은, 사이즈로 판단하면, 하드웨어에 관한 결정이 내려집니다.1GB의 RAM에서는 80GB의 데이터베이스를 고속으로 실행할 수 없습니다.
인덱스
그렇지 않아요. 많을수록 즐겁죠.필요한 인덱스만 설정하고 사용 현황을 확인해야 합니다.EXPLAIN
MySQL에 추가EXPLAIN
정말 제한적이긴 하지만, 시작이야.
권장 구성
이들에 대해서my-large.cnf
그리고.my-medium.cnf
파일 -- 누구를 위해 작성했는지도 모릅니다.네 것을 굴려라.
튜닝 프라이머
좋은 시작은 튜닝 프라이머입니다.bash 스크립트(hint: your need linux)로, 이 스크립트는SHOW VARIABLES
그리고.SHOW STATUS
유용한 권장 사항으로 요약할 수 있습니다.서버가 어느 정도 가동되고 있는 경우는, 그 기반이 되는 데이터가 있기 때문에, 추천하는 것이 좋습니다.
튜닝 프라이머는 마법의 소스는 아니지만여전히 변경하도록 제안하는 모든 변수에 대해 자세히 읽어봐야 합니다.
읽고 있어
저는 mysql performance blog를 정말 추천합니다.MySQL 관련 모든 팁을 위한 훌륭한 리소스입니다.MySQL 뿐만 아니라 적절한 하드웨어에 대해 잘 알고 있거나 AWS용 설정을 권장하고 있습니다.이 사람들은 몇 년씩 경험을 쌓았어요
물론 다른 훌륭한 리소스는 planet-mysql입니다.
다음의 설정을 사용합니다.
etc/my.cnf
innodb_buffer_pool_size = 384M
key_buffer = 256M
query_cache_size = 1M
query_cache_limit = 128M
thread_cache_size = 8
max_connections = 400
innodb_lock_wait_timeout = 100
다음 사양의 서버의 경우:
Dell Server
CPU cores: Two
Processor(s): 1x Dual Xeon
Clock Speed: >= 2.33GHz
RAM: 2 GBytes
Disks: 1×250 GB SATA
mysqld.exe는 RAM에서 480 MB를 사용하고 있었습니다.이 파라미터를 my.ini에 추가했습니다.
table_definition_cache = 400
메모리 사용량을 400,000kb 이상에서 105,000kb로 줄였습니다.
데이터베이스 메모리 사용량은 복잡한 주제입니다.MySQL Performance Blog는 질문을 잘 해결해 주며 메모리를 "예약"하는 것이 매우 비현실적인 이유를 많이 보여줍니다.
하드 리미트(hard limit)를 설정하는 경우는, 하드 리미트(hard limit)를 설정할 수 있습니다만, 빌트인 설정은 없기 때문에 OS 레벨로 실시할 필요가 있습니다.Linux에서는 ulimit을 사용할 수 있지만 이를 적용하려면 MySQL 시작 방식을 수정해야 합니다.
가장 좋은 해결책은 일반적인 MySQL 메모리 설정을 조합하여 MySQL 설치로 인해 일반적으로 메모리 사용량이 감소하도록 서버를 조정하는 것입니다.이는 물론 데이터베이스 성능에 부정적인 영향을 미치지만 일부 설정을 조정할 수 있습니다.my.ini
다음과 같습니다.
key_buffer_size
query_cache_size
query_cache_limit
table_cache
max_connections
tmp_table_size
innodb_buffer_pool_size
거기서부터 시작해서 원하는 결과를 얻을 수 있는지 알아보겠습니다.MySQL 메모리 설정 조정에 관한 기사가 많이 있습니다.
편집:
MySQL의 최신 5.1.x 릴리스에서는 일부 변수 이름이 변경되었습니다.
예를 들어 다음과 같습니다.
table_cache
현재:
table_open_cache
MYSQL의 메모리 사용 방법에 대해:https://dev.mysql.com/doc/refman/8.0/en/memory-use.html
에/etc/my.cnf
:
[mysqld]
...
performance_schema = 0
table_cache = 0
table_definition_cache = 0
max_connect_errors = 10000
query_cache_size = 0
query_cache_limit = 0
...
256 MB의 메모리를 탑재한 서버에서는 정상적으로 동작.
도커 mysql 컨테이너의 최적화를 원하는 경우 다음 명령어가 도움이 될 수 있습니다.mysql 도커 컨테이너를 기본 480mb에서 100mbs로 실행할 수 있었습니다.
도커 실행 -d -p 3306:3306 -e MYSQL_DATABASE=test -e MYSQL_ROOT_PASSWORD=tooor -e MYSQL_USER=test -e MYSQL_PASSWORD=test -v / v / var / var / lib / var / lib / snam -- name mysql -- name mysqldb mysql - mysql dysqldb mysql -- time -- table _ dismysql
이전 답변을 상향 투표할 수 있는 충분한 평판 포인트가 없기 때문에 "table_definition_cache = 400" 답변이 이전 Centos 서버에서 작동했다는 데 동의합니다.
언급URL : https://stackoverflow.com/questions/1178736/mysql-maximum-memory-usage
'sourcecode' 카테고리의 다른 글
PHP 계산 기간 (0) | 2022.09.19 |
---|---|
errno: 150 "외부 키 제약 조건이 잘못 형성되었습니다") MariaDB (0) | 2022.09.19 |
WHERE 절의 필드 순서가 MySQL의 성능에 영향을 미칩니까? (0) | 2022.09.19 |
Larabel에서 검증 오류/예외를 수동으로 반환하거나 슬로우하려면 어떻게 해야 합니까? (0) | 2022.09.19 |
nodejs 스크립트가 정상적으로 실행된 후 자동으로 종료되지 않음 (0) | 2022.09.19 |