Last Updated on 9월 11, 2021 by Jade(정현호)
MySQL 에서의 타임아웃은 여러가지가 있을수 있습니다.
그 중에서 이번 포스팅에서는 Error Code: 2013 와 Error Code: 1205 2개의 에러에 대해서 확인 해보려고 합니다.
2개의 에러는 SQL 쿼리 실행 중 발생 되는 time-out 관련 에러 입니다.
DML 처리 과정에서 2가지의 이슈를 만나는 케이스도 있을수 있어서 입니다.
Contents
Error Code: 2013
먼저 Error Code: 2013. Lost connection to MySQL server during query 는 MySQL WorkBench(워크 벤치) 툴에 의해서 주로 발생되는 에러 입니다.
아래와 같은 메뉴에서 확인 할 수 있습니다.
매뉴 -> Edit -> Preferences -> SQL Editor
"DBMS Connection read timeout interval" 항목에 의해서 Error Code: 2013. Lost connection to MySQL server during query 가 발생되는 케이스가 다수 입니다.
Select 또는 DML 또한 30초 이상 수행될 수 도 있기 때문에 SQL 정상 처리를 위해서 위의 값을 늘려주는 것이 좋습니다.
(30초 이상 수행되는 쿼리를 수행되는 경우는 보편적인 상황임)
Error Code: 1205
Error Code: 1205 Lock wait timeout exceeded; try restarting transaction
에러는 DML 수행시 Lock에 의해서 대기 하는 중에 MySQL 에서 설정된 Limit 에 의해 최대 대기시간을 초과하여 Time-out 에러를 만난 상황 입니다.
Default 는 50초 입니다
Command-Line Format | --innodb-lock-wait-timeout=# |
---|---|
System Variable | innodb_lock_wait_timeout |
Scope | Global, Session |
Dynamic | Yes |
Type | Integer |
Default Value | 50 |
Minimum Value | 1 |
Maximum Value | 1073741824 |
Case
1. 이전 상황에서 Error Code: 2013 를 받아서 세션이 종료 된 이후 Workbench 에서는 시간을 30초에서 충분히 늘려주고 나서 다시 DML 처리를 시도 하는 과정에서
2. 이전의 세션이 MySQL 서버에서는 종료되지 않고 남아 있는 상황에서 다시 DML 처리를 위해 실행을 하였으나 남아 있는 세션에 의해 Lock 이 걸려서 대기 하게 되고 50초가 초과하여 Error Code: 1205 를 받게 된 상황이 발생될 수 있습니다
innodb_lock_wait_timeout 파라미터와 관련 되어 있으며 Default는 50초 입니다.
파라미터에 대한 변경은 my.cnf 에서 변경 후 재기동 하거나
# vi /etc/my.cnf
[mysqld]
innodb_lock_wait_timeout
또는 Dynamic 설정으로 아래와 같이 바로 반영 할 수 있습니다.
set global innodb_lock_wait_timeout=600;
다만 DML이 Error Code: 1205 을 받아서 50초 이상 대기하였다가 time-out이 발생된 상황은 정상적인 상황이 아니거나 또는 계속 기다려야 하는 상황은 아닐 확률이 높습니다
Error Code: 1205 를 받았다면 선행 세션(Lock을 잡고 트랜잭션을 진행중인)이 정상적으로 처리 중인 세션인지 아니면 비정상 세션인지를 먼저 확인 해야 합니다.
확인 후 계속 기다려야 할지, 아님 일단 중지하고 나중에 다시 시도해야할지 , 선행 세션을 kill session 으로 정리하고 진행해야 할지는 세션 모니터링 과 innodb tx lock 정보를 토대로 확인/결정 해야 합니다.
아래 3개의 딕셔너리를 통해서 확인 해보실 수 있습니다.
information_schema.innodb_lock_waits
information_schema.innodb_locks
information_schema.innodb_trx
연관된 다른 글
Principal DBA(MySQL, AWS Aurora, Oracle)
핀테크 서비스인 핀다에서 데이터베이스를 운영하고 있어요(at finda.co.kr)
Previous - 당근마켓, 위메프, Oracle Korea ACS / Fedora Kor UserGroup 운영중
Database 외에도 NoSQL , Linux , Python, Cloud, Http/PHP CGI 등에도 관심이 있습니다
purityboy83@gmail.com / admin@hoing.io