mysql table lock
글쓴이: peccavi / 작성시간: 금, 2007/02/02 - 10:44오전
안녕하세요.
mysql c api를 이용해 프로그램을 작성중입니다.
여러 프로세스에서 하나의 테이블에 접근해 insert, select, update하는 작업을 한다면
반드시 table lock을 걸어주어야 하나요?
(코드 안의 자체 mutex등은 별개로 합니다.)
read하는 작업만 있는게 아니라면 당연히 lock이 필요하다고 생각은 들지만
mysql 내부적으로 구현이 어떻게 되는지 잘 모르겠네요.
쿼리의 예를 들자면, select를 해서 record가 없으면 insert를 하고, record가 있으면 update를 합니다. 이런 프로세스가 하나의 테이블을 대상으로 여러개 돌고 있는 형태입니다.
이런 경우에, 반드시 table lock이 필요한가요?
Forums:
예를 드신 부분은 ON DUPLICATE KEY UPDATE 로 쓰심이
내일은 내일일뿐.....
기본적으로 myisam 을 쓰신다면 커리시 table lock이 걸립니다.
그리고 예를 드신부분은
INSERT INTO tablename( a, b) values(1, 2) ON DUPLICATE KEY UPDATE b=2; 이런식으로 쓰시면 한번에 커리 가능
내일은 내일일뿐.....
여러 프로세스가
여러 프로세스가 어떤 결과를 table에서 가져와 보여주느냐에 따라 lock의 여부를 결정할 문제일 겁니다. 일반적으로 트랜잭션을 쓰는 것은
http://en.wikipedia.org/wiki/Isolation_(computer_science)
여기의 3가지 문제가 내 코드 상에서 문제가 될 때 씁니다.
----
I paint objects as I think them, not as I see them.
Ubuntu Edgy user / Ubuntu KoreanTeam
----
I paint objects as I think them, not as I see them.
atie's minipage
참고로 mysql에서 트랜젝션은
innoDB 에서만 됩니다.
(혹시 모르시는 분 계실까봐 -.-;;)
$Myoungjin_JEON=@@=qw^rekcaH lreP rehtonA tsuJ^;$|++;{$i=$like=pop@@;unshift@@,$i;$~=18-length$i;print"\r[","~"x abs,(scalar reverse$i),"~"x($~-abs),"]"and select$good,$day,$mate,1/$~for 0..$~,-$~+1..-1;redo}
row 단위로 바꾸세요..
table lock 가 디비 내부에서 의 속도는 빠르지만
빈번한 락으로 인해 전체적인 성능 다운이 예상됩니다.
innoDB 타입으로 바꾸시구..
필요 하시면 Isolation 레벨 조절 해보세요
좋은 하루되세요.
종합하자면..
종합하자면.. myisam타입의 테이블에서는 논리적인 오류만 없다면
(다른 프로세스의 write쿼리 때문에 특정 프로세스에서 보유하고 있던 select값이 유효하지 않은 값이 되어버리는 등의 상황)
table lock은 고려하지 않아도 될까요?
개념만 잡고 작업하자니 힘드는군요.. ㅜ_ㅜ
답변주신분들 감사합니다~
----
jai guru deva om...
----
jai guru deva om...
댓글 달기