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;
더 구체 적 인 업무 대기 상황 보기:

SELECT
   b.trx_state,
   e.state,
   e.time,
   d.state AS block_state,
   d.time AS block_time,
   a.requesting_trx_id,
   a.requested_lock_id,
   b.trx_query,
   b.trx_mysql_thread_id,
   a.blocking_trx_id,
   a.blocking_lock_id,
   c.trx_query AS block_trx_query,
   c.trx_mysql_thread_id AS block_trx_mysql_tread_id
FROM
   information_schema.INNODB_LOCK_WAITS a
LEFT JOIN information_schema.INNODB_TRX b ON a.requesting_trx_id = b.trx_id
LEFT JOIN information_schema.INNODB_TRX c ON a.blocking_trx_id = c.trx_id
LEFT JOIN information_schema.PROCESSLIST d ON c.trx_mysql_thread_id = d.id
LEFT JOIN information_schema.PROCESSLIST e ON b.trx_mysql_thread_id = e.id
ORDER BY
   a.requesting_trx_id;
닫 히 지 않 은 트 랜 잭 션 보기:
CMySQL 5.6

SELECT
   a.trx_id,
   a.trx_state,
   a.trx_started,
   a.trx_query,
   b.ID,
   b.USER,
   b.DB,
   b.COMMAND,
   b.TIME,
   b.STATE,
   b.INFO,
   c.PROCESSLIST_USER,
   c.PROCESSLIST_HOST,
   c.PROCESSLIST_DB,
   d.SQL_TEXT
FROM
   information_schema.INNODB_TRX a
LEFT JOIN information_schema.PROCESSLIST b ON a.trx_mysql_thread_id = b.id
AND b.COMMAND = 'Sleep'
LEFT JOIN PERFORMANCE_SCHEMA.threads c ON b.id = c.PROCESSLIST_ID
LEFT JOIN PERFORMANCE_SCHEMA.events_statements_current d ON d.THREAD_ID = c.THREAD_ID;
CMySQL 5.5

SELECT
   a.trx_id,
   a.trx_state,
   a.trx_started,
   a.trx_query,
   b.ID,
   b. USER,
   b. HOST,
   b.DB,
   b.COMMAND,
   b.TIME,
   b.STATE,
   b.INFO
FROM
   information_schema.INNODB_TRX a
LEFT JOIN information_schema.PROCESSLIST b ON a.trx_mysql_thread_id = b.id
WHERE
   b.COMMAND = 'Sleep';
일정 시간 동안 닫 히 지 않 은 트 랜 잭 션 보기:

SELECT
    trx_id,
    trx_started,
    trx_mysql_thread_id
FROM
    INFORMATION_SCHEMA.INNODB_TRX
WHERE
    trx_started < date_sub(now(), INTERVAL 1 MINUTE)
AND trx_operation_state IS NULL
AND trx_query IS NULL;
추가:MySQL 잠 금 상태 보기 명령
1 show processlist;
SHOW PROCESSLIST 는 어떤 스 레 드 가 실행 중인 지 보 여 줍 니 다.my sqladmin processlist 문 구 를 사용 하여 이 정 보 를 얻 을 수 있 습 니 다.SUPER 권한 이 있다 면 모든 스 레 드 를 볼 수 있 습 니 다.그렇지 않 으 면 현재 사용 하고 있 는 MySQL 계 정과 연 결 된 스 레 드 만 볼 수 있 습 니 다.update 나 insert 의 한 표 에 스 레 드 가 있 으 면 프로 세 스 의 status 는 updatting 또는 sending data 입 니 다.
"too many connections"오류 정 보 를 얻 고 발생 하고 있 는 상황 을 알 고 싶다 면 이 문 구 는 매우 유용 합 니 다.MySQL 은 관리자 가 시스템 에 수시로 연결 하고 검사 할 수 있 도록 SUPER 권한 을 가 진 계 정 을 사용 할 수 있 도록 추가 연결 을 유지 합 니 다(이 권한 을 모든 사용자 에 게 주지 않 았 다 고 가정 합 니 다).
Status
속뜻
Checking table
데이터 시트 검사 중 입 니 다.
Closing tables
표 에서 수 정 된 데 이 터 를 디스크 에 새로 고치 고 다 쓴 시 계 를 닫 고 있 습 니 다.이것 은 매우 빠 른 작업 입 니 다.그렇지 않 으 면 디스크 공간 이 꽉 찼 거나 디스크 가 무 거 운 짐 에 있 는 지 확인 해 야 합 니 다.
Connect Out
서버 에서 홈 서버 에 연결 하 는 중 복사 합 니 다.
Copying to tmp table on disk
임시 결과 집합 이 tmp 보다 크기 때문에table_size,임시 시 계 를 메모리 에서 디스크 로 저장 하여 메모 리 를 절약 하고 있 습 니 다.
Creating tmp table
일부 조회 결 과 를 저장 하기 위해 임시 표를 만 드 는 중 입 니 다.
deleting from main table
서버 에서 다 중 테이블 삭제 의 첫 번 째 부분 을 실행 하고 있 습 니 다.첫 번 째 테이블 을 삭 제 했 습 니 다.
deleting from reference tables
서버 는 다 중 표 삭제 의 두 번 째 부분 을 실행 하고 있 으 며 다른 표 의 기록 을 삭제 하고 있 습 니 다.
Flushing tables
다른 스 레 드 가 데이터 시트 를 닫 을 때 까지 FLUSH TABLES 를 실행 하고 있 습 니 다.
Killed
한 라인 에 kill 요청 을 보 냈 습 니 다.이 라인 은 kill 표지 위 치 를 검사 하고 다음 kill 요청 을 포기 합 니 다.MySQL 은 매번 메 인 순환 에서 kill 플래그 위 치 를 검사 하지만,일부 경우 이 스 레 드 는 조금 지나 야 죽 을 수 있 습 니 다.이 스 레 드 가 다른 스 레 드 에 잠 겨 있 으 면 kill 요청 은 잠 금 이 풀 릴 때 바로 유효 합 니 다.
Locked
다른 조회 에 잠 겼 습 니 다.
Sending data
SELECT 조회 기록 을 처리 하 는 동시에 결 과 를 클 라 이언 트 에 보 내 고 있 습 니 다.
Sorting for group
그룹 BY 정렬 중 입 니 다.
Sorting for order
ORDER BY 정렬 중 입 니 다.
Opening tables
이 과정 은 다른 요소 의 방 해 를 받 지 않 는 한 매우 빠 를 것 이다.예 를 들 어 ALTER TABLE 이나 LOCK TABLE 문 구 를 실행 하기 전에 데이터 시트 는 다른 스 레 드 에 의 해 열 릴 수 없습니다.시 계 를 열 려 고 시도 하고 있 습 니 다.
Removing duplicates
SELECT DISTINCT 방식 의 조 회 를 실행 하고 있 지만 MySQL 은 중 복 된 기록 을 이전 단계 에서 최적화 할 수 없습니다.따라서 MySQL 은 중복 되 는 기록 을 다시 삭제 한 다음 에 결 과 를 클 라 이언 트 에 보 내야 합 니 다.
Reopen table
시계 에 대한 자 물 쇠 를 얻 었 지만 시계 구조 가 수정 되 어야 이 자 물 쇠 를 얻 을 수 있 습 니 다.잠 금 이 풀 려 데이터 시트 를 닫 고 데이터 시트 를 다시 열 려 고 시도 하고 있 습 니 다.
Repair by sorting
복구 명령 이 색인 을 만 들 기 위해 정렬 되 고 있 습 니 다.
Repair with keycache
복구 명령 은 색인 캐 시 를 이용 하여 새 색인 을 하나씩 만 들 고 있 습 니 다.그것 은 Repair by sorting 보다 느 릴 것 이다.
Searching rows for update
갱신 을 위해 조건 에 맞 는 기록 을 찾 고 있 습 니 다.그것 은 UPDATE 가 관련 기록 을 수정 하기 전에 완성 해 야 한다.
Sleeping
클 라 이언 트 가 새로운 요청 을 보 내 기 를 기다 리 고 있 습 니 다.
System lock
외부 시스템 잠 금 을 가 져 오 기 를 기다 리 고 있 습 니 다.현재 여러 my sqld 서버 를 실행 하지 않 고 같은 표를 요청 하지 않 았 다 면,추가--skip-external-locking 파 라 메 터 를 통 해 외부 시스템 잠 금 을 금지 할 수 있 습 니 다.
Upgrading lock
INSERT DELAYED 는 새 기록 을 삽입 하기 위해 잠 금 표를 얻 으 려 고 시도 하고 있 습 니 다.
Updating
일치 하 는 기록 을 검색 하고 수정 하고 있 습 니 다.
User Lock
GET 대기 중LOCK()。
Waiting for tables
이 스 레 드 는 데이터 시트 구조 가 수정 되 었 음 을 알 리 고 데이터 시트 를 다시 열 어 새로운 구 조 를 가 져 와 야 합 니 다.그리고 데이터 시트 를 다시 열기 위해 서 는 모든 다른 스 레 드 가 이 표를 닫 을 때 까지 기 다 려 야 합 니 다.다음 몇 가지 상황 에서 이 알림 이 발생 합 니 다:FLUSH TABLES tblname,ALTER TABLE,RENAME TABLE,REPAIR TABLE,ANALYZE TABLE,또는 OPTIMIZE TABLE.
waiting for handler insert
INSERT DELAYED 는 처리 해 야 할 모든 삽입 작업 을 처리 하고 새로운 요청 을 기다 리 고 있 습 니 다.
대부분의 상 태 는 빠 른 조작 에 대응 하고 하나의 스 레 드 가 같은 상 태 를 몇 초 동안 유지 하면 문제 가 발생 했 을 수 있 으 므 로 검 사 를 해 야 한다.또 다른 상 태 는 위 에 열거 되 지 않 았 지만 대부분 서버 에 오류 가 있 는 지 확인 하 는 것 만 사용 할 수 있 습 니 다.
2 show full processlist;
show processlist;앞의 100 개 만 보 여 줍 니 다.모두 보 여 주 려 면 show full processlist 를 사용 하 십시오.
3 show open tables;
이 명령 은 현재 열 려 있 는 시 계 를 볼 수 있 습 니 다.In_use 열 은 몇 개의 스 레 드 가 어떤 시 계 를 사용 하고 있 는 지 표시 합 니 다.Namelocked 는 표 이름 이 잠 겨 있 는 지 여 부 를 표시 합 니 다.이것 은 보통 Drop 이나 Rename 명령 으로 이 표를 조작 할 때 발생 합 니 다.그래서 이 명령 은 우리 가 흔히 볼 수 있 는 문 제 를 해결 하 는 데 도움 이 되 지 않 는 다.현재 어떤 시계 에 자물쇠 가 있 는 지,누가 시계 에 있 는 이 자 물 쇠 를 가지 고 있 는 지 등 이다.

show open tables from database;

4 show status like ‘%lock%'
서버 상태 보기.

5 show engine innodb status\G;
MySQL 5.1 이전 명령 은:show innodbstatus\\G;,MySQL 5.5 는 위의 명령 을 사용 하면 innodb 엔진 이 실 행 될 때의 정 보 를 볼 수 있 습 니 다.

6 show variables like ‘%timeout%';
서버 설정 인자 보기.

이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.만약 잘못 이 있 거나 완전히 고려 하지 않 은 부분 이 있다 면 아낌없이 가르침 을 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기