Grails/Hibernate 데이터베이스가 부하에서 충돌합니다. 연결할 수 없습니다 (풀링 할 때에도)
-
05-09-2019 - |
문제
성배에 신청서가 있습니다. Hibernate를 사용하여 데이터베이스에 액세스하고 (표준 성배 규칙에 따라) MySQL을 사용하고 사이트가 작동하며 (6 개월 동안) 안정적입니다.
로드 테스트를 수행하고 있으며 최근에 데이터베이스가로드 중일 때 연결을 거부한다는 것을 발견했습니다.
MySQL Server 5를 사용하여 20 주경에 연결된 스레드가 연결되는 것을 볼 수 있습니다. 11-30 사이에서 점프한다고 생각했습니다.
mysql> show status like '%con%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| Aborted_connects | 72 |
| Connections | 65539 |
| Max_used_connections | 101 |
| Ssl_client_connects | 0 |
| Ssl_connect_renegotiates | 0 |
| Ssl_finished_connects | 0 |
| Threads_connected | 1 |
+--------------------------+-------+
7 rows in set (0.00 sec)
내 데이터베이스 구성은 표준입니다. (MySQL 서버는 로컬로 설치되어 표시되지 않음)
dataSource {
pooled = false
driverClassName = "com.mysql.jdbc.Driver"
username = "username"
password = "secret"
maxIdle = 15
maxActive = 100
}
C3P0을 조사해야합니까? 아니면 Maxactive를 1000으로 묶고 최선을 다해야합니까?
해결책
데이터베이스 연결을 얻을 수 없을 때 성배가보고하는 오류는 무엇입니까? 시간 초과? 거절 했나요?
테스트를 실행할 때 상자가 얼마나로드 되었습니까? CPU 퍼센트, 메모리 사용량 등
데이터베이스가 과부하되어 성배가 연결을 타이핑 할 수 있습니다. 로드를 처리하려면 풀링 된 DB 연결로 이동하려고합니다. 풀링하지 않고 성배는 각 요청에 따라 DB 연결을 열고 닫습니다.
다른 팁
MySQL 구성 (/etc/mysql.conf 또는 로컬 동등성), 특히 사용자 설정 당 최대 연결 및 최대 연결을 확인하십시오. 이것은 마치 MySQL에서오고 성배가 아닌 것처럼 들립니다.
제휴하지 않습니다 StackOverflow