접속자가 몰려 서버가 느려지는 상황에서 주로 발생할 수 있는 문제 중 하나가 데이터베이스에 Lock이 걸리거나,
쿼리가 비효율적으로 실행되는 경우이다. 아래에 Lock 관련 문제를 확인하고 해결할 수 있는 쿼리를 정리하였다.
<MySQL>
-- 현재 활성화된 프로세스와 상태 확인
SHOW PROCESSLIST;
실행 중인 쿼리와 그 상태를 확인할 수 있다. 여기에서 State 값이 Locked 상태로 표시된 세션이
Lock을 유발하고 있을 가능성이 크다.
-- 특정 세션 종료
KILL [SESSION_ID];
Lock을 유발한 세션을 종료하기 위해 KILL 명령어를 사용한다.
[SESSION_ID] 자리에 SHOW PROCESSLIST; 쿼리에서 조회된 Id 값을 적는다.
<Oracle>
-- Lock이 걸린 테이블 조회
SELECT DO.OBJECT_NAME
, DO.OWNER
, DO.OBJECT_TYPE
, VO.XIDUSN
, VO.SESSION_ID
, VO.LOCKED_MODE
FROM V$LOCKED_OBJECT VO
, DBA_OBJECTS DO
WHERE VO.OBJECT_ID = DO.OBJECT_ID;
OBJECT_NAME이 테이블명
-- Lock이 걸린 테이블의 SID와 SERIAL# 조회(테이블별 확인)
SELECT A.SID, A.SERIAL#
FROM V$SESSION A
, V$LOCK B
, DBA_OBJECTS C
WHERE A.SID = B.SID
AND B.ID1 = C.OBJECT_ID
AND B.TYPE = 'TM'
AND C.OBJECT_NAME = '테이블명';
v$ 뷰는 관리자 권한 필요
-- 조회된 SID와 SERIAL# 값으로 세션 종료
ALTER SYSTEM KILL SESSION '[SID], [SERIAL#]';
'SQL > 참고자료' 카테고리의 다른 글
[SQL] 커넥션 (0) | 2025.01.21 |
---|---|
[SQL] 업무 참고 쿼리(변수 선언 및 사용, 반복 수행) (1) | 2024.12.07 |
[SQL] 업무 참고 쿼리(연속 참가 카운트) (1) | 2024.09.13 |
[SQL] 특정 테이블의 과거 데이터 조회 (0) | 2024.09.13 |
[SQL] Function, Procedure, Trigger, Sequence, View 스크립트 (0) | 2024.02.27 |