2012-10-11 2 views
2

PHP에서 파일을 만들었습니다. 그리고이 아래에서 읽기 모드로 테이블을 잠그는 코드를 작성했습니다. 그 파일 아래에 동일한 테이블에 삽입 작업을 작성했지만 읽기 잠금은 읽기 작업 만 지원합니다. 즉, 테이블에있는 내용 만 볼 수 있지만 수정할 수는 없습니다. 그리고 잘 돌아갑니다.PHP + MYSQL_locks ..... 제발 도와주세요 ..... 나는이 ..에 갇혀있어?

PROBLEM_EXIST_HERE : 동일한 테이블에 동일한 삽입 작업이 포함 된 다른 파일을 만들었습니다. 여기서는 삽입 코드가 아닌 삽입 작업 만 작성합니다.

이 파일을 사용하기 전에 첫 번째 파일 (잠금 + 삽입 포함) 작업을 사용한 후 동일한 브라우저에서 새 탭을 열고 두 번째 파일 (삽입 연산 만 포함)을 실행합니다.

이제 테이블에서 읽기 잠금이 이미 고정되어 있다는 것을 알았 으면 삽입 작업이 진행되는 이유는 무엇입니까? 테이블이 READ 잠김 모드에 있고 따라서 업데이트 할 수 없다는 오류가 표시되지 않는 이유는 무엇입니까? 아무도이 문제를 해결하는 방법을 알고 있습니까?

  1. 그리고 누가 테이블이 mysql db에서 읽기 또는 쓰기 상태로 잠겨 있는지를 아는 방법을 알고 있습니까? 아무도 나를 위해 PHP 코드를 말할 수 있습니까? 나는 하루 종일 수색을하고 해결책이 없다. 간단한 언어로 간단한 솔루션을 작성하십시오.
+0

위의 표에서 나는 단지 읽기 잠금을 사용하여 테이블을 잠근 ..... 실수로 실수로 내가 읽고 쓰는 것을 모두했습니다 ... –

답변

0

보기 LOCK TABLE에 대한 설명서 : InnoDB 테이블의 경우

 
WRITE locks normally have higher priority than READ locks to ensure that updates 
are processed as soon as possible. This means that if one session obtains a READ 
lock and then another session requests a WRITE lock, subsequent READ lock requests 
wait until the session that requested the WRITE lock has obtained the lock and 
released it. 

는, InnoDB는있는 Lock Monitor :

 
The InnoDB Lock Monitor is like the standard Monitor but also provides extensive lock 
information. To enable this Monitor for periodic output, create a table named 
innodb_lock_monitor. 

더 :

귀하의 다른 쿼리가 기다리고
 
The Lock Monitor is the same as the standard Monitor except that it includes additional 
lock information. Enabling either monitor for periodic output by creating the associated 
InnoDB table turns on the same output stream, but the stream includes the extra 
information if the Lock Monitor is enabled. For example, if you create the innodb_monitor 
and innodb_lock_monitor tables, that turns on a single output stream. The stream includes 
extra lock information until you disable the Lock Monitor by removing the 
innodb_lock_monitor table. 
0

자물쇠 장시간 실행될 수 있도록 해결되어야한다. 현재 쿼리를 특정 임계 값을 초과하는지 확인하기 위해 카운터를 두는 직접적인 방법은 없습니다. There are certain indirect ways given here

테이블이 잠겨 있는지 여부를 직접 알 수있는 방법은 없습니다. 경우에 따라 MySQL은 특정 쿼리를 실행하는 동안 테이블을 잠급니다. 다음 쿼리를 실행하여 테이블이 잠겨 있는지 여부를 알 수 있습니다. 이 쿼리에

SHOW OPEN TABLES FROM <database name> WHERE `table` = "<table_name>"; 

in_use 열 값을 1이있는 경우는 표 0 다음가 잠겨 있지 않은 경우 잠겨.

편집

INFORMATION_SCHEMA의 PROCESSLIST 정보를 사용하여뿐만 아니라 하나 개의 다른 방법이 있습니다. "state" 열 메시지입니다 무엇인지 확인

SELECT * FROM information_schema.`PROCESSLIST` WHERE db="<DB name>" AND command = "Query"; 

결과에서 :

는 쿼리를 실행? 그것은 무슨 일이 일어나고 있는지 더 많은 통찰력을 줄 것이다.그것은 또한 kill KILL <Query ID>을 사용하여 쿼리 ID를 제공합니다. 그러나 이러한 모든 일을하기 위해서는 MySQL 서버에 새로운 연결을해야합니다. 또한 조회가 실행 된 시간을 알게됩니다.

+0

upls는 쇼 오픈 테이블의 전체 구문을 제공 할 수 있습니다 .... ..는 예제와 함께 작동하는 방법을 의미합니다. –

+0

http://dev.mysql.com/doc/refman/5.0/en/show-open-tables.html – Shubhansh

관련 문제