MySQL client connections program name

Jinseok Lee·2024년 7월 25일
0
post-custom-banner

사연

DB 성능이 좋지 않다고 느껴 mysql에서 현재 connection을 조회해보았는데 각각의 connection이 어느쪽에서 들어온 connection인지 정확히 구분하기가 어려웠다. 그래서 해당 connection이 어디에서 붙어있는것인지 확인해보고 싶었다

확인

기존상태

검색해보니 mysql에 connectionAttributes 에 특정 값을 넣어주면 위의 표에서 program에 None이 아닌 지정한 값이 뜬다고 해서 한 번 해보았다.

spring:
  config:
    activate:
      on-profile: db-prod

  datasource:
      jdbc-url: jdbc:mysql://xx.xxx.xx.xxx:3306/mydb?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Seoul&connectionAttributes=program_name:KeywordDiaryBackendSpringBoot
      username: myUsername
      password: myPassword
      driver-class-name: com.mysql.cj.jdbc.Driver
      type: com.zaxxer.hikari.HikariDataSource
      pool-size: 10
      

연결 jdbc-url에 보면 connectionAttributes=program_name:KeywordDiaryBackendSpringBoot이라는 부분이 보일 것이다. 이 상태에서 어플리케이션을 구동하면

아래와 같이 Program 값이 지정한 (KeywordDiaryBackendSpringBoot) 값으로 나온다. connection이 어느 어플리케이션에서 붙었는지 확인해보고 싶을때 사용하면 유용할수도 있을거 같다.

mysql workbench의 Management > client connections에서 아래와 같은 ui를 제공하지만 다른 client에서 접속했을때에도

SELECT t.PROCESSLIST_ID,IF (NAME = 'thread/sql/event_scheduler','event_scheduler',t.PROCESSLIST_USER) PROCESSLIST_USER,t.PROCESSLIST_HOST,t.PROCESSLIST_DB,t.PROCESSLIST_COMMAND,t.PROCESSLIST_TIME,t.PROCESSLIST_STATE,t.THREAD_ID,t.TYPE,t.NAME,t.PARENT_THREAD_ID,t.INSTRUMENTED,t.PROCESSLIST_INFO,a.ATTR_VALUE FROM performance_schema.threads t  LEFT OUTER JOIN performance_schema.session_connect_attrs a ON t.processlist_id = a.processlist_id AND (a.attr_name IS NULL OR a.attr_name = 'program_name') WHERE t.TYPE <> 'BACKGROUND'

아래와 같이 쿼리를 실행하면 비슷한 결과가 보일 것이다. 위의 쿼리를 보면 a.attr_name = 'program_name'을 조회해서 가져오는데 이것이 위에 접속시에 설정한 connectionAttributes=program_name:KeywordDiaryBackendSpringBoot 값을 불러오는 것으로 보인다.

profile
전 위메프, 이직준비중
post-custom-banner

0개의 댓글