마리아드브:MySQL 서버가 사라졌습니다.
응용 프로그램에서 꽤 오래 실행되는 트랜잭션 중에 "MySQL server has been away" 오류가 발생하는 문제가 있습니다.저는 이것이 이미 많이 요구되었다는 것을 알지만, 저는 가능한 모든 원인을 조사하기 위해 제 테스트를 시도했습니다.
저를 매우 당황스럽게 하는 한 가지는 MariaDB 서버의 로그에 있는 다음 오류 메시지입니다.
[경고] db: 'default' 사용자: 'root' 호스트: '10.0.0.18'(통신 패킷을 읽는 동안 시간 초과됨)
이렇게 하면 클라이언트가 연결 끊김을 보고하는 이유를 설명할 수 있지만, 이 오류는 클라이언트가 "MySQL server has been away" 오류를 보고하기 10-15분 전에 발생합니다.그동안 클라이언트는 문제없이 문 삽입을 행복하게 실행하고 있습니다.그러나 클라이언트가 select 문을 실행하자마자 문은 사실상 즉시 실패합니다.
다음과 같은 가능한 원인을 이미 확인했습니다.
- 서버가 항상 실행되고 있습니다.
- wait_message가 8시간으로 설정되었습니다. 이 시간은 트랜잭션이 실패해야 하는 시간보다 훨씬 깁니다.
- max_allowed_packet이 512M으로 설정되었습니다. 쿼리가 매우 짧은 select 문이므로 충분해야 합니다.
- 서버의 메모리가 부족하지 않습니다.
이 문제는 MariaDB 로그의 "통신 패킷 읽기 시간 초과" 오류와 관련이 있을 것입니다.하지만 고객이 왜 여전히 데이터를 쓸 수 있는지에 대해서는 생각할 수 없습니다.그리고 wait_timeout이 매우 높기 때문에 이 시간 초과가 처음에 발생하는 이유입니다.
일부 시스템 정보:
- MariaDB 10.5.1에서 실행 중입니다.
- 클라이언트는 python 3.6을 사용하고 libmysql을 사용하는 mysqlclient는 데이터베이스 연결에 사용됩니다.
제가 뭘 찾아야 할지 아시는 분들이 계시기를 바랍니다. 정말 미치겠네요.
언급URL : https://stackoverflow.com/questions/71677258/mariadb-mysql-server-has-gone-away
'programing' 카테고리의 다른 글
페이지화 쿼리에서 ROWNUM은 어떻게 작동합니까? (0) | 2023.07.25 |
---|---|
스프링 보안에서 현재 로그인한 사용자 개체를 가져오는 방법은 무엇입니까? (0) | 2023.07.25 |
ADO.NET에서 Oracle을 호출할 때 여러 개의 선택 문 배치 (0) | 2023.07.20 |
ORA-01799: 열을 하위 쿼리에 외부 결합할 수 없습니다. (0) | 2023.07.20 |
각 행에 대한 특정 필드가 있는 모든 행의 쿼리 집합을 얻는 방법은 무엇입니까? (0) | 2023.07.20 |