mysql 에서 실행중인 sQL문장 보기
 
MySQL에서 현재 실행 중인 SQL 문장을 확인하려면 SHOW PROCESSLIST 명령을 사용할 수 있습니다. 이 명령은 현재 서버에서 실행 중인 스레드의 목록을 표시하며, 각 스레드가 실행하고 있는 SQL 문장도 함께 볼 수 있습니다.

다음은 이 명령의 사용 예입니다:

sql
SHOW PROCESSLIST;

또는, 보다 많은 정보를 얻고 싶다면 다음과 같이 사용할 수 있습니다:

sql
SHOW FULL PROCESSLIST;

이 명령은 현재 실행 중인 SQL 문장의 전체 내용을 표시합니다.

또한, 특정 사용자 또는 특정 세션의 SQL 문장을 필터링할 수도 있습니다:

sql
SELECT * FROM information_schema.PROCESSLIST WHERE db = 'your_database_name';

이 명령은 특정 데이터베이스에서 실행 중인 프로세스만 필터링하여 보여줍니다.

 

mysql table에 강제로 Lock 일으키기

 

MySQL에서 테이블에 강제로 Lock을 일으키는 방법으로는 여러 가지가 있지만, 가장 일반적인 방법은 LOCK TABLES 명령을 사용하는 것입니다. 이 명령을 통해 특정 테이블에 대해 읽기 또는 쓰기 잠금을 설정할 수 있습니다.

1. 읽기 잠금 (READ LOCK)

테이블에 읽기 잠금을 설정하면 다른 세션이 테이블을 읽을 수는 있지만, 쓰기는 할 수 없습니다.

sql
LOCK TABLES your_table_name READ;

2. 쓰기 잠금 (WRITE LOCK)

테이블에 쓰기 잠금을 설정하면 해당 테이블에 대한 읽기 및 쓰기가 모두 차단됩니다. 즉, 잠금을 설정한 세션만이 테이블을 읽거나 쓸 수 있습니다.

sql
LOCK TABLES your_table_name WRITE;

3. 잠금 해제

모든 잠금을 해제하려면 다음 명령을 사용합니다:

sql
UNLOCK TABLES;

예시

sql
 
-- 테이블에 쓰기 잠금 설정 LOCK TABLES your_table_name WRITE; -- 잠금 동안 테이블 작업 수행 INSERT INTO your_table_name (column1, column2) VALUES ('value1', 'value2'); -- 잠금 해제 UNLOCK TABLES;

이 방법을 사용하면 테이블에 잠금을 강제로 설정하여 다른 세션이 해당 테이블에 접근하지 못하게 할 수 있습니다. 잠금이 설정된 동안에는 잠금을 설정한 세션에서만 테이블에 접근할 수 있으며, 다른 세션은 대기하게 됩니다.

주의사항: 잠금을 오랜 시간 동안 유지하면 다른 세션의 작업이 지연되거나 차단될 수 있으므로, 필요할 때만 잠금을 설정하고 작업이 완료되면 빠르게 해제하는 것이 좋습니다.

 
mysql Lock 찾기
 

MySQL에서 현재 설정된 잠금을 확인하려면 information_schema 데이터베이스의 INNODB_LOCKS 및 INNODB_LOCK_WAITS 테이블을 조회하면 됩니다. 이 테이블들은 InnoDB 스토리지 엔진에서 발생한 잠금과 관련된 정보를 제공합니다.

1. INNODB_LOCKS 테이블

이 테이블은 현재 활성화된 InnoDB 잠금에 대한 정보를 제공합니다.

sql
----
SELECT * FROM information_schema.INNODB_LOCKS;

이 명령을 실행하면 다음과 같은 정보가 반환됩니다:

  • lock_id: 잠금의 고유 ID
  • lock_trx_id: 잠금을 보유한 트랜잭션의 ID
  • lock_mode: 잠금 모드 (S, X, IS, IX 등)
  • lock_type: 잠금의 유형 (RECORD 또는 TABLE)
  • lock_table: 잠금이 설정된 테이블
  • lock_index: 잠금이 설정된 인덱스
  • lock_space: 잠금이 설정된 테이블 스페이스
  • lock_page: 잠금이 설정된 페이지 번호
  • lock_rec: 잠금이 설정된 레코드 번호

2. INNODB_LOCK_WAITS 테이블

이 테이블은 현재 잠금을 기다리고 있는 트랜잭션에 대한 정보를 제공합니다.

sql
----
SELECT * FROM information_schema.INNODB_LOCK_WAITS;

이 명령을 실행하면 다음과 같은 정보가 반환됩니다:

  • requesting_trx_id: 잠금을 기다리고 있는 트랜잭션의 ID
  • requested_lock_id: 기다리고 있는 잠금의 ID
  • blocking_trx_id: 현재 잠금을 보유한 트랜잭션의 ID
  • blocking_lock_id: 현재 잠금을 보유한 잠금의 ID

3. SHOW ENGINE INNODB STATUS

또 다른 방법으로, SHOW ENGINE INNODB STATUS 명령을 사용하여 잠금 및 기타 InnoDB 관련 상태 정보를 확인할 수 있습니다:

sql
----
SHOW ENGINE INNODB STATUS;

이 명령을 실행하면 MySQL 서버의 현재 InnoDB 상태가 표시되며, 이 정보는 현재 잠금과 잠금 대기 상태를 포함할 수 있습니다.

예시

sql
----
SELECT * FROM information_schema.INNODB_LOCKS; SELECT * FROM information_schema.INNODB_LOCK_WAITS; SHOW ENGINE INNODB STATUS;

이 명령들을 사용하여 MySQL 데이터베이스에서 현재 활성화된 잠금과 잠금을 기다리고 있는 트랜잭션을 확인할 수 있습니다.

 

INNODB 인지 확인 방법

 

MySQL에서 특정 테이블이 InnoDB 스토리지 엔진을 사용하는지 확인하는 방법은 여러 가지가 있습니다. 가장 간단한 방법은 SHOW TABLE STATUS 명령을 사용하거나 information_schema 데이터베이스를 조회하는 것입니다.

1. SHOW TABLE STATUS 명령 사용

이 명령은 데이터베이스 내 모든 테이블의 상태를 보여줍니다. 각 테이블의 스토리지 엔진을 확인할 수 있습니다.

sql
--
SHOW TABLE STATUS LIKE 'your_table_name';

이 명령을 실행하면 테이블에 대한 정보가 포함된 결과가 반환됩니다. 결과의 Engine 열에서 해당 테이블이 InnoDB를 사용하는지 확인할 수 있습니다.

2. information_schema.TABLES 조회

information_schema 데이터베이스의 TABLES 테이블을 조회하여 특정 테이블의 스토리지 엔진을 확인할 수 있습니다.

sql
--
SELECT TABLE_NAME, ENGINE FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'your_database_name' AND TABLE_NAME = 'your_table_name';

이 쿼리는 특정 데이터베이스의 특정 테이블에 대해 스토리지 엔진을 반환합니다. ENGINE 열에 InnoDB가 표시되면 해당 테이블이 InnoDB 스토리지 엔진을 사용하고 있는 것입니다.

예시

sql
--
-- 방법 1: SHOW TABLE STATUS 사용 SHOW TABLE STATUS LIKE 'example_table'; -- 방법 2: information_schema.TABLES 조회 SELECT TABLE_NAME, ENGINE FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'example_database' AND TABLE_NAME = 'example_table';

이 명령을 사용하여 MySQL에서 특정 테이블이 InnoDB를 사용하는지 쉽게 확인할 수 있습니다.

'공부 > (IT) DBMS' 카테고리의 다른 글

MySQL 모니터링  (0) 2024.09.20
DB Log파일 위치(Oracle, MySQL)  (1) 2024.09.05

+ Recent posts