Last Updated on 12월 3, 2023 by Jade(정현호)
안녕하세요
이번 포스팅에는 INFORMATION_SCHEMA.PROCESSLIST 기능의 Deprecated 된 내용에 대해서 간략하게 살펴보도록 하겠습니다.
INFORMATION_SCHEMA.PROCESSLIST Deprecated
2023년 10월 25일에 GA(General Availability) 된 8.0.35 버전과 Innovation Release 인 8.2.0 버전에서 다음과 같은 내용이 포함되었습니다.
-
INFORMATION_SCHEMA.PROCESSLIST
is deprecated and subject to removal in a future MySQL release. As such, the implementation ofSHOW PROCESSLIST
which uses that table is also deprecated. -
It is recommended to use the Performance Schema implementation of
SHOW PROCESSLIST
instead. As such,performance_schema_show_processlist
is also deprecated and subject to removal in a future MySQL release. (WL #15915)
위의 내용과 같이 2개 버전부터 INFORMATION_SCHEMA.PROCESSLIST 테이블이 Deprecated가 되었습니다. 아직 Removed가 된 것은 아니기 때문에 사용은 가능합니다.
다만 사용하면 다음과 같은 warning 메세지가 확인됩니다.
mysql> select * from INFORMATION_SCHEMA.PROCESSLIST; +----+-----------------+-----------+-------+---------+------+-------------+-------------------+ | ID | USER | HOST | DB | COMMAND | TIME | STATE | INFO | +----+-----------------+-----------+-------+---------+------+-------------+-------------------+ | 8 | root | localhost | mysql | Query | 0 | executing | select * from ... | | 5 | event_scheduler | localhost | NULL | Daemon | 230 | Waiting ... | NULL | +----+-----------------+-----------+-------+---------+------+-------------+-------------------+ 2 rows in set, 1 warning (0.01 sec) Warning (Code 1287): 'INFORMATION_SCHEMA.PROCESSLIST' is deprecated and will be removed in a future release. Please use performance_schema.processlist instead mysql> show full processlist; +----+-----------------+-----------+-------+---------+------+-------------+--------------+ | Id | User | Host | db | Command | Time | State | Info | +----+-----------------+-----------+-------+---------+------+-------------+--------------+ | 5 | event_scheduler | localhost | NULL | Daemon | 171 | Waiting ... | NULL | | 8 | root | localhost | mysql | Query | 0 | init | show full .. | +----+-----------------+-----------+-------+---------+------+-------------+--------------+ 2 rows in set, 1 warning (0.00 sec) Warning (Code 1287): 'INFORMATION_SCHEMA.PROCESSLIST' is deprecated and will be removed in a future release. Please use performance_schema.processlist instead
안내되는 되는 메세지와 같이 performance_schema.processlist 를 대체하여 사용하거나 또는 performance_schema.threads를 사용하여 내용을 확인할 수 있습니다.
NFORMATION_SCHEMA.PROCESSLIST 이 Deprecated 됨에 따라 위의 조회결과와 같이 show (full) processlist 명령어도 같이 deprecated 되었습니다.
또한 8.0.22 버전에서 추가된 파라미터인 performance_schema_show_processlist 도 8.0.35 버전에서 같이 deprecated 되었습니다.
performance_schema_show_processlist 파라미터는 show processlist 명령어의 구현을 INFORMATION_SCHEMA.PROCESSLIST 에서 PERFORMANCE_SCHEMA.PROCESSLIST 를 사용하는 내용의 파라미터입니다.
show processlist 명령어 수행 과정에서 글로벌 뮤텍스(mutex) 보유한 상태의 조회하게 되는데 뮤텍스가 필요하지 않는 PERFORMANCE_SCHEMA.PROCESSLIST를 이용한 show processlist 명령어를 사용할 수 있도록 설정하는 파라미터입니다.
해당 파라미터는 8.0.35에서 같이 Deprecated 되었습니다.
performance_schema.processlist는 MySQL 5.7 버전기준 5.7.39 버전 설치시 자동으로 생성되거나 해당 버전이상으로 업그레이드시 자동으로 생성됩니다.
AWS Aurora MySQL 2 버전에서는 최근에 릴리즈 된(글 작성시점 기준) version 2.12.0 버전 부터는 MySQL 5.7.40 호환 버전으로 릴리즈 되어 PERFORMANCE_SCHEMA.PROCESSLIST 를 사용할 수 있습니다.
다만 Aurora MySQL 2.12.0 이전 버전은 MySQL 5.7.12버전과 호환되기 때문에 PERFORMANCE_SCHEMA.PROCESSLIST 를 사용할 수 없습니다.
MySQL 버전에 따라서 INFORMATION_SCHEMA.PROCESSLIST 와 PERFORMANCE_SCHEMA.PROCESSLIST 내용에서 컬럼 1개가 차이가 있습니다.
mysql> show create table INFORMATION_SCHEMA.PROCESSLIST\G *************************** 1. row *************************** Table: PROCESSLIST Create Table: CREATE TEMPORARY TABLE `PROCESSLIST` ( `ID` bigint unsigned NOT NULL DEFAULT '0', `USER` varchar(32) NOT NULL DEFAULT '', `HOST` varchar(261) NOT NULL DEFAULT '', `DB` varchar(64) DEFAULT NULL, `COMMAND` varchar(16) NOT NULL DEFAULT '', `TIME` int NOT NULL DEFAULT '0', `STATE` varchar(64) DEFAULT NULL, `INFO` longtext ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 mysql> show create table PERFORMANCE_SCHEMA.PROCESSLIST\G *************************** 1. row *************************** Table: processlist Create Table: CREATE TABLE `processlist` ( `ID` bigint unsigned NOT NULL, `USER` varchar(32) DEFAULT NULL, `HOST` varchar(261) CHARACTER SET ascii COLLATE ascii_general_ci DEFAULT NULL, `DB` varchar(64) DEFAULT NULL, `COMMAND` varchar(16) DEFAULT NULL, `TIME` bigint DEFAULT NULL, `STATE` varchar(64) DEFAULT NULL, `INFO` longtext, `EXECUTION_ENGINE` enum('PRIMARY','SECONDARY') DEFAULT NULL, <!!--- PRIMARY KEY (`ID`) ) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8mb4
EXECUTION_ENGINE 컬럼은 쿼리 실행 엔진에 대한 정보를 표기하는 컬럼으로 이 컬럼의 값은 Primary(프라이머리) 또는 Secondary(세컨더리) 중 하나로 표기되며 MySQL HeatWave Service 및 HeatWave에 사용됩니다.
Primary 엔진은 InnoDB이고 Secondary 엔진은 HeatWave(RAPID)입니다.
MySQL Community Edition Server, MySQL Enterprise Edition Server 및 HeatWave가 없는 MySQL HeatWave Service의 경우 값은 항상 Primary 이며, 이 컬럼은 MySQL 8.0.29에 추가되었습니다.
MySQL HeatWave에 대한 더 자세한 내용은 다음 포스팅을 참조하시면 됩니다.
글 작성 시점에 발표된 8.0.35, 8.20 버전에서 Deprecated가 된 상태임으로 당장은 사용 가능하지만(아직 Removed 되지 않았음) 향후에는 Removed 가 될 부분으로 INFORMATION_SCHEMA.PROCESSLIST 를 통한 DB모니터링 및 알람 등을 구현하여 사용하고 있었다면 포스팅 내용을 참조하여 조회 명령어의 변경이 필요할 것으로 예상됩니다.
이번 포스팅은 여기서 마무리하도록 하겠습니다.
Reference
Reference URL
• mysql.com/news-8-0-35
• mysql.com/news-8-2-0
• mysql.com/5.7/performance-schema-processlist
• mysql.com/performance_schema_show_processlist
연관된 다른 글
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