ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • mysql connection
    Database 2023. 2. 15. 20:58
    728x90
    반응형

    Connection

    mysql 을 포함한 데이터베이스는 클라이언트의 요청을 처리하는 일종의 서버와 유사합니다.
    mysqld 라고 불리는 mysql 서버는 네트워크를 리스닝하고 있으며 요청이 들어온다면 커넥션을 맺고 클라이언트의 쿼리 요청을 처리합니다.

    이때 커넥션이라는 표현이 mysql 에서 다양하게 표현됩니다.
    process, thread, connection, session 등으로 표현되는데요.
    mysql 에 한해서는 다 같은 표현이라고 생각해도 무방합니다.
    mysql은 하나의 요청에 대하여 커넥션을 맺는데,
    의미적인 관점에서 connection, session 이라고 불립니다.
    그리고 커넥션의 결과로써 요청을 수행하는 태스크 관점에서 process, thread 라고 불립니다.
    시스템 관점에서 process 와 thread 는 엄연히 다른 개념이지만 mysql 에서는 커넥션을 일컫는 용어라고 생각하면 됩니다.
    정확히는 mysql 은 싱글 프로세스 멀티 쓰레드 구조를
    취하기 때문에 thread 라는 표현이 더 알맞을 수 있습니다.

    Connection Configuration

    mysql 은 컨넥션과 관련된 여러 설정들을 가집니다.
    일반적으로 my.cnf 파일에 등록된 key-value 들로 global variables 와 status가 설정되는데요.
    variables 는 mysql의 설정 정보, status 는 상태 정보를 나타냅니다.
    show variables, show status 와 같은 방식으로 정보를 조회할 수 있으며, 커넥션 수의 제한, 커넥션 지속 시간 등을 설정할 수 있습니다.

    max_connections

    max_connections 설정값은 최대 커넥션의 갯수입니다.
    max_connections 설정으로 동시 접속의 수를 제한하며, 최대치를 넘기는 연결이 요청되는 경우엔,
    too many connections 에러가 발생합니다.


    threads_connected

    현재 연결된 커넥션의 갯수입니다.
    global status 를 조회하면 확인할 수 있습니다.

    show status like "%Threads%"


    wait_timeout 이나 클라이언트의 연결 종료 등에 의해서 해당 수치는 줄어듭니다.
    반대로 클라이언트의 연결 시에는 해당 값이 늘어납니다.

    show global ststus like 'Threads_connected'

     

    wait_timeout

    idle connection 이 종료되기까지 시간을 의미합니다. idle connection 이란 sleep 상태의 커넥션을 뜻하는데요.
    show processlist 명령어를 통해 커넥션과 그 상태를 조회할 수 있습니다.
    만약 sleep 상태의 커넥션이 wait_timeout 이랑 지속된다면 해당 커넥션은 종료됩니다.

    반대로 해당 커넥션으로 쿼리가 요청된다면 상태는 executed 또는 update 와 같이 변경되며, 쿼리 수행이 끝나면 다시 sleep 상태가 됩니다. 그리고 이때부터 idle time을 0초부터 카운팅합니다.

    idle timeout 은 이러한 주기로 동작합니다.

    max lifetime

    이 설정은 클라이언트의 connection pool 의 설정입니다. 커넥션풀이 관리하는 커넥션의 허용 idle time 을 설정합니다. Hikari Pool, Sequelize 등의 커넥션풀에서 다른 이름으로 쓰이지만 클라이언트 입장에서의 wait_timeout 으로 생각할 수 있습니다.

    이 값을 wait_timeout 보다 작게 설정하는 것이 권장됩니다. 그 이유는 클라이언트에서 max lifetime이 지난 커넥션의 경우엔 커넥션을 끊고 새로운 커넥셩을 맺습니다.

    그래서 mysql 의 wait_timeout 의 영향을 받지않고 커넥션을 유지할 수 있습니다.




    반응형

    'Database' 카테고리의 다른 글

    MySQL my.cnf  (0) 2023.09.11
    MySQL mysqldump 알아보기  (0) 2023.05.18
    Mysql Procedure  (0) 2023.05.15
    MySQL Tablespace 알아보기  (0) 2023.05.12
    MySQL ACID Compliant  (0) 2023.05.08
Designed by Tistory.