포럼

쉽게 설명을 해보도록 할게요.


innodb 와 myisam 은 뭐 트랜잭션을 지원한다던가 다양한 차이점이 있지만,

웹사이트 성능에 가장 큰 영향을 미치는건, locking 방식의 차이라고 할수있습니다.


locking 방식은

innodb 는 row 단위로,

myisam 은 table 단위로 처리하게 되지요.


아 이게 무슨소린지 잘 모르셔도 일단 저 두가지를 이해하고 다음으로 넘어가 주시길 바랍니다.


일단 먼저 왜 데이터베이스가 lock 이라는것을 수행하는지 이해하셔야 합니다.


예를들어서 A 에 10이라는 정보가 들어가있다고 합시다.

우리는 A 에 들어가있는 숫자를 연산을 통해서 2배로 만드는 프로그램을 가지고 있습니다.

근데 그 프로그램 연산하는데에는 무려 20초가 걸린다고 가정해봅시다.


그러면, 

요구 -> A 가져옴 -> 20초 동안 처리 -> 원래값의 2배인 20을 A 에 넣음

의 순서를 가지게 됩니다.

근데 웹서비스(데이터베이스)는 같은 시간에 다양한 요구가 오는 상태가 매우 잦지요.


요구 A 도 A 를 2배로 만들고

요구 B 도 A 를 2배로 만든다고 해봅시다.


요구 A --> A 가져옴 --> 처          리        중 --------------------> 2배인 20을 넣음

이라고 할때

      요구B -----> A 가져옴 --> 처    중 ----------------------------> ??


맨 마지막의 ?? 의 결과값은 몇이 될까요?

원래라면 두번 처리되었으므로, 40이 들어가야 맞지만,

요구 B 가 A 를 가져오는순간에는 여전히 10이므로,

최종값은 20이 됩니다.


이렇게 되면, 난리가 벌어지겠지요?

은행에서 계좌이체를 연타하면 계좌 돈은 한번만 빠져나갔는데 입금은 여러번 되는 돈복사 버그가 벌어질지도 모릅니다.


이러한 것을 막기 위해서 데이터베이스는 lock 이라는걸 지원합니다.

요구 A 가 모든 처리를 끝낼때까지 다른 사람은 A 를 건들지 못하게 하는거죠.


요구 A --> A 가져옴 --> 처          리        중 --------------------> 2배인 20을 넣음

      요구B -----> A 가져옴 --> 처    중 --------------------------> ??



요구 A --> A 가져옴 --> 처          리        중 ----------> 2배인 20을 넣음

      요구B -----> 대기  -----------------------------> A 가져옴 - > 처리 -> 2배인 40을 넣음


을 되게 만드는거지요.


자, 그럼 이게 어떠한 차이를 유발하느냐.

조금더 이야기를 해봅시다.


myisam 의 경우

table 단위로 이러한 lock 을 처리합니다.


xe_documents 라는 XE 문서 전체 테이블 단위로 lock 을 거는거죠.

A 라는 사람이 글을 수정하는 동안에는

B 는 글을 수정할수가 없습니다.

그것이 설사 다른 글이라고 해도 말이죠.


A 가 documents 테이블에서 행동을 하는동안은

documents 테이블에 관련된 모든 요구가 대기상태에 빠집니다.


!!!


innodb 의 경우는 DB 의 row 단위로 lock 을 처리합니다.

myisam 과는 다르게

글 번호 100번을 건들고 있다면

101번은 동시에 건들수 있는거죠.


오오! 동시 작업 능력이 훨씬 나아지고,

대기시간이 나아지는 좋은거군요!


라고 생각할수 있는데, 

이 방식도 단점이 존재합니다.


lock 을 처리해야할 양이 많아져서

그러한 처리양이 부담이 되는거지요.


테이블 단위라면 테이블 30개 정도의 lock 만 관리하면되는데

리플이 300만개라면 300만개의 lock 를 관리해야겠지요


다만 그러한 관리의 부담을 고려하고서라도,

테이블 단위의 락은 테이블에 데이터가 많이 들어가고, 그 데이터에 많은 사람이 접근하는경우는 지연 시간이 기하급수적으로 늘어납니다.


그러한 의미에서 대규모 접속이 많은 사이트의 경우는 innodb 를 추천하는거지요


'-^

글쓴이 제목 최종 글
코뿔소2020 XE-Core 데모 사이트(테스트 전용) [33] 2011.11.08 by 양파농부
銀童 innodb 와 myisam 에 대한 비교 [2] 2011.11.08 by 지투스
BlogJh 텍스타일은 정말 버려진건가요? [11] 2020.03.14 by ㅠ도라에몽ㅠ
집으로.. 업그레이드 이후 게시판 ex가 이상합니다. [4] 2011.11.07 by 집으로..
sarahkim 서버이전 [2] 2011.11.07 by sarahkim
ForHanbi 1.5.0.8부터 상대경로를 절대경로로 바꾼건가요?? [2] 2011.11.07 by 집으로..
thisend XE + mysqli 조합에 어떤가요? [1] 2011.11.07 by 銀童
카마또 버전 업그레이드 후 홈페이지 접속이 되질 않습니다. [2] 2011.11.07 by 비나무
희망과의서약 xe 1.5로 업그레이드 이후, 플래닛 덧글 작성 되시나요? file  
이키나_ 사이트 검색 잘 되시나요? [2] 2011.11.06 by 손주사랑
코뿔소2020 한국의 인터넷 전용회선의 평균 최고속도가 얼마정도나 되나요. [3] 2011.11.06 by ToFinder
클라데스 XE에 버전정책을 변경해야 한다고 생각합니다. [4] 2011.11.06 by 순수의시절
실실 Parse error: syntax error, unexpected '}' in ......./classes/template/TemplateHandler.class.php(277) : eval()'d code on line 143 [11] 2011.11.05 by 배워서남준다
가브리엘조 xe포럼 사이트 - 사이트맵 위젯은 사용할 수 없나요? file  
희망과의서약 게시판 EX 호환 부분 문제 질문 안내 외 1가지  
銀童 ob_gzhandler 옵션에 관해서 [6] file 2011.11.05 by 쏘프티
roks821 페이지 편집을 html 편집 가능하게 [3] file 2011.11.05 by roks821
misol 저작권 어떻게 생각하세요? [3] 2020.03.14 by Garon
Yosida_sakura 1.5 미만 사용자들을 위한 보안패치는 게속 해줄까요? [5] 2011.11.04 by snows96
Community 혹시 DB에 자동으로 게시판 분류 사용과....