>  기사  >  데이터 베이스  >  mysql 쿼리 잠긴 테이블

mysql 쿼리 잠긴 테이블

王林
王林원래의
2023-05-23 09:29:367803검색

Mysql은 일반적으로 사용되는 데이터베이스 관리 시스템으로 오늘날의 인터넷 애플리케이션에서 중요한 역할을 합니다. 그러나 Mysql을 관리하고 유지하는데 있어서 성능과 안정성을 향상시키는 것도 매우 중요한 측면입니다. Mysql을 적용하는 과정에서도 잠긴 테이블이 자주 발생하는데, 이 경우 잠긴 테이블을 어떻게 쿼리해야 할까요? 아래에서는 잠긴 테이블을 MySQL에서 쿼리하는 방법을 자세히 소개하겠습니다.

  1. Mysql의 기존 잠금 상태 보기

Mysql 클라이언트에 다음 명령을 입력하세요.

show engine innodb status;

이 명령의 기능은 Mysql의 현재 잠금 상태를 확인하는 것입니다. InnoDB 스토리지 엔진의 형태. 이 명령을 통해 InnoDB 스토리지 엔진 버전, 현재 획득한 잠금 수, 잠긴 트랜잭션의 트랜잭션 ID 등 많은 정보를 관찰할 수 있습니다.

  1. 잠긴 거래 정보 보기

Mysql 스토리지 엔진에는 현재 잠긴 모든 거래 정보를 보는 데 사용할 수 있는 trx_rollback_to_savepoint 매개변수가 있습니다. Mysql 클라이언트에 다음 명령을 입력합니다.

SELECT r.trx_id waiting_trx_id,
       r.trx_mysql_thread_id waiting_thread,
       r.trx_query waiting_query,
       b.trx_id blocking_trx_id,
       b.trx_mysql_thread_id blocking_thread,
       b.trx_query blocking_query
FROM   information_schema.innodb_lock_waits w
       INNER JOIN information_schema.innodb_trx b ON b.trx_id = w.blocking_trx_id
       INNER JOIN information_schema.innodb_trx r ON r.trx_id = w.requesting_trx_id;

이 명령의 기능은 잠긴 테이블의 특정 정보와 해당 차단 트랜잭션 ID를 보는 것입니다. 출력 결과에서 wait_trx_id는 차단된 트랜잭션 ID를 나타내고,waiting_thread는 해당 트랜잭션에 해당하는 프로세스 번호를 나타내며,waiting_query는 트랜잭션이 실행한 SQL 문을 나타내고,blocking_trx_id는 해당 트랜잭션을 차단한 트랜잭션 ID를 나타내며,blocking_thread는 해당 트랜잭션에 해당하는 프로세스 번호를 나타냅니다. transaction. ,blocking_query는 트랜잭션에 의해 실행된 SQL 문을 나타냅니다.

  1. 잠긴 테이블 정보 쿼리

Mysql 스토리지 엔진에는 현재 잠긴 모든 테이블의 정보를 보는 데 사용할 수 있는 innodb_locks 테이블이 있습니다. Mysql 클라이언트에 다음 명령을 입력합니다.

SELECT concat('`', t1.`TABLE_SCHEMA`, '`.`', t1.`TABLE_NAME`, '`') AS `table`,
       t2.`ENGINE`,
       t2.`TRX_ID`,
       t2.`LOCK_MODE`,
       t2.`LOCK_TYPE`,
       t2.`LOCK_DATA`
FROM   `information_schema`.`TABLES` t1,
       `information_schema`.`INNODB_LOCKS` t2
WHERE  ( ( t1.`TABLE_SCHEMA` = DATABASE() )
         AND ( concat('`', t1.`TABLE_SCHEMA`, '`.`', t1.`TABLE_NAME`, '`') = t2.`LOCK_DATA` ) );

이 명령의 목적은 현재 잠긴 테이블을 보는 것입니다. 여기서 'table'은 현재 잠긴 테이블의 이름을 나타내고 'ENGINE'은 테이블에서 사용하는 스토리지 엔진을 나타냅니다. . 동시에, 'TRX_ID'는 테이블을 잠그는 트랜잭션 ID를 나타내고, 'LOCK_MODE'는 잠금 모드를 나타내며, 'LOCK_TYPE'은 잠금 유형을 나타내고, 'LOCK_DATA'는 잠긴 데이터를 나타냅니다.

요약:

Mysql에서 잠긴 테이블을 쿼리하는 방법에는 여러 가지가 있습니다. 위의 방법을 통해 현재 잠긴 테이블과 해당 트랜잭션 정보를 매우 자세하게 볼 수 있으며, 이는 관리자가 Mysql의 성능 병목 현상을 해결하는 데 도움이 됩니다. 근본적인 문제. 다만, 잠긴 테이블 정보를 조회할 때 kill -9 등의 연산을 통해 프로세스를 강제로 종료하는 것은 피해야 한다. 그렇지 않으면 예상치 못한 결과가 나올 수 있다. 따라서 실제 적용 과정에서는 Mysql이 잠긴 테이블의 상황을 주의 깊게 처리하고, Mysql의 운영 효율성과 안정성을 향상시키기 위해 특정 비즈니스 및 시스템 아키텍처를 기반으로 해당 솔루션과 전략을 채택하는 것도 필요합니다.

위 내용은 mysql 쿼리 잠긴 테이블의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.