2010-08-24 2 views
2

mysql 데이터베이스에서 두 개의 트랜잭션이 실행 중이며 어떤 것도 진행되지 않습니다. 양쪽 다 약간의 자물쇠를 잡는다. 그러나 내가 알고있는 한 그들이 충돌하지 않는다. 두 트랜잭션의 상태는 "ACTIVE"입니다 (둘 중 하나가 다른 트랜잭션에 의해 차단 된 경우 해당 트랜잭션 중 하나가 대기 상태 일 것으로 예상됩니다).두 트랜잭션이 서로를 차단하는 것 같지만 아무도 대기하지 않습니다.

나는 innodb 상태 출력 (잠금 모니터 정보 포함)의 "TRANSACTIONS"및 "ROW OPERATIONS"부분을 아래에 첨부했습니다.

이 거래가 왜 서로에게 영향을 미치는지에 대한 힌트를 줄 수 있습니까?

EJB 응용 프로그램에서 쿼리를 실행하기 때문에 쉽게 재현 할 수 없기 때문에 일반적으로 이런 종류의 문제가 일반적으로 발생하는지 이해하려고합니다. MySQL의에서

===================================== 
100823 16:04:53 INNODB MONITOR OUTPUT 
===================================== 
Per second averages calculated from the last 1 seconds 
---------- 
SEMAPHORES 
---------- 
OS WAIT ARRAY INFO: reservation count 25808, signal count 25608 
Mutex spin waits 0, rounds 108338, OS waits 1400 
RW-shared spins 18372, OS waits 17512; RW-excl spins 7055, OS waits 6782 
------------ 
TRANSACTIONS 
------------ 
Trx id counter 0 39456296 
Purge done for trx's n:o < 0 39455079 undo n:o < 0 0 
History list length 2 
Total number of lock structs in row lock hash table 3 
LIST OF TRANSACTIONS FOR EACH SESSION: 
---TRANSACTION 0 39456295, not started, process no 4183, OS thread id 140415939369296 
MySQL thread id 21, query id 90163 localhost 127.0.0.1 root 
---TRANSACTION 0 0, not started, process no 4183, OS thread id 140415938767184 
MySQL thread id 15, query id 89364 cl1010wo2431.inter.rsag.site 172.27.10.38 root 
---TRANSACTION 0 0, not started, process no 4183, OS thread id 140415939168592 
MySQL thread id 8, query id 90177 localhost root 
---TRANSACTION 0 39456204, ACTIVE 94 sec, process no 4183, OS thread id 140415938967888 
3 lock struct(s), heap size 368, undo log entries 1 
MySQL thread id 23, query id 89811 localhost 127.0.0.1 root 
Trx read view will not see trx with id >= 0 39456205, sees < 0 39454738 
TABLE LOCK table `server_database/error_data` trx id 0 39456204 lock mode IX 
TABLE LOCK table `server_database/error_status` trx id 0 39456204 lock mode IS 
RECORD LOCKS space id 2754 page no 3 n bits 72 index `PRIMARY` of table `server_database/error_status` trx id 0 39456204 lock mode S locks rec but not gap 
Record lock, heap no 6 PHYSICAL RECORD: n_fields 4; compact format; info bits 0 
0: len 3; hex 800001; asc ;; 1: len 6; hex 000000d7287f; asc  (;; 2: len 7; hex 00000030c816ce; asc 0 ;; 3: len 9; hex 7374617475734e6577; asc statusNew;; 
Aug 23 16:04:53 sv1010vm0007 mysqld[4184]: 
---TRANSACTION 0 39454738, ACTIVE 1594 sec, process no 4183, OS thread id 140416557721936 
6 lock struct(s), heap size 1216, undo log entries 5 
MySQL thread id 24, query id 83802 localhost 127.0.0.1 root 
Trx read view will not see trx with id >= 0 39454739, sees < 0 39454739 
TABLE LOCK table `server_database/error_data` trx id 0 39454738 lock mode IX 
TABLE LOCK table `server_database/error_status` trx id 0 39454738 lock mode IS 
RECORD LOCKS space id 2754 page no 3 n bits 72 index `PRIMARY` of table `server_database/error_status` trx id 0 39454738 lock mode S locks rec but not gap 
Record lock, heap no 6 PHYSICAL RECORD: n_fields 4; compact format; info bits 0 
0: len 3; hex 800001; asc ;; 1: len 6; hex 000000d7287f; asc  (;; 2: len 7; hex 00000030c816ce; asc 0 ;; 3: len 9; hex 7374617475734e6577; asc statusNew;; 
Aug 23 16:04:53 sv1010vm0007 mysqld[4184]: 
TABLE LOCK table `server_database/wtu_counter_daily` trx id 0 39454738 lock mode IX 
TABLE LOCK table `server_database/wtu` trx id 0 39454738 lock mode IS 
RECORD LOCKS space id 4349 page no 3 n bits 128 index `PRIMARY` of table `server_database/wtu` trx id 0 39454738 lock mode S locks rec but not gap 
Record lock, heap no 62 PHYSICAL RECORD: n_fields 32; compact format; info bits 0 
0: len 3; hex 802715; asc ' ;; 1: len 6; hex 00000258fa7b; asc X {;; 2: len 7; hex 000000003401e8; asc  4 ;; 3: SQL NULL; 4: len 3; hex 800005; asc ;; 5: len 12; hex 31302e37372e33322e313830; asc 10.77.32.180;; 6: len 4; hex 00000040; asc @;; 7: SQL NULL; 8: SQL NULL; 9: SQL NULL; 10: len 3; hex 8004d2; asc ;; 11: len 1; hex 37; asc 7;; 12: len 0; hex ; asc ;; 13: len 1; hex 80; asc ;; 14: len 1; hex 80; asc ;; 15: SQL NULL; 16: SQL NULL; 17: len 1; hex 35; asc 5;; 18: SQL NULL; 19: len 12; hex 77656273746172742e6a6e6c; asc webstart.jnl;; 20: SQL NULL; 21: len 1; hex 80; asc ;; 22: len 1; hex 81; asc ;; 23: len 1; hex 81; asc ;; 24: len 1; hex 80; asc ;; 25: len 2; hex 8000; asc ;; 26: len 13; hex 3139322e3136382e302e313830; asc 192.168.0.180;; 27: len 1; hex 81; asc ;; 28: SQL NULL; 29: len 4; hex 80000000; asc  ;; 30: len 1; hex 81; asc ;; 31: SQL NULL; 

-------------- 
ROW OPERATIONS 
-------------- 
0 queries inside InnoDB, 0 queries in queue 
3 read views open inside InnoDB 
Main thread process no. 4183, id 140415947962704, state: waiting for server activity 
Number of rows inserted 64, updated 450, deleted 0, read 89832081 
0.00 inserts/s, 0.00 updates/s, 0.00 deletes/s, 0.00 reads/s 
---------------------------- 
END OF INNODB MONITOR OUTPUT 
============================ 

답변

0

그래

예 : - 두번째 명령은 서버에 갈 때 당신이

다음 MySQL 서버에 4 명령을 실행하는 경우 그는 두번째 명령 응답에 대한 첫 번째와 세 번째 대기의 응답을 기다립니다 그 다음 서버가이를 승인합니다.

마지막 명령의 응답이 서버에서 나가지 않으면 다음 명령을 수락 할 수 없습니다.

그런 다음 한 번에 하나의 명령 또는 트랜잭션 만 실행해야합니다.

또한 연결 문자열의 명령 실행 시간 초과를 늘릴 수도 있습니다.

관련 문제