InnoDB 써도 괜찮나요..

hun98의 이미지

웹호스팅에 처음 문의 했을때는 InnoDB타입을 지원하지 않는다고
해서 myisam으로 개발했습니다.
당연히 foreign key 설정도 안되고.. 트랜잭션도 않되고..
굉장히 찜찜했었는데..

오늘 웹호스팅에 알아보니.. InnoDB타입을 지원한다네요.
그러면서 InnoDB는 아직 베타라 위험할 수 있다고 겁을 주네요.

InnoDB를 쓰고 싶은데.(아직 써본적은 없습니다만)
많이 안정화됬나요.. InnoDB?

mysql 버전은 4.0.16 입니다.

송효진의 이미지

4.0 이 production release 인데 웬 베타죠?
3.23.x 때부터 지원하지요.
쓰세요 ;)
저는 한 프로세스에 2 업뎃 이상이면 무조건 씁니다.

4.1 이 지금 gamma 라서 쓰고싶어 안절부절 하고 있는데...(중얼)

maximus의 이미지

innoDB 쓴지 거의 3년째입니다.
예전 3.x 정식에 포함 되긴전 Beta 버젼때부터 썼지만 아주 훌륭합니다..

제가 서비스 하는 서비스 특성상 초당 쿼리가 장난이 아닙니다만.
넉넉하게 버티고 운영이 되고 있습니다.

오히려 low level locking 이 지원되기 때문에 update 문이 많은 DB라면 무조건 써야 하는 경우라고 여겨 집니다

=================================
:: how about a cup of tea ? ::
=================================

alfalf의 이미지

hun98 wrote:
오늘 웹호스팅에 알아보니.. InnoDB타입을 지원한다네요.
그러면서 InnoDB는 아직 베타라 위험할 수 있다고 겁을 주네요.

웹호스팅 쪽 관리자가 베타란 의미 아닐까요? :lol:
ckh0618의 이미지

maximus wrote:
innoDB 쓴지 거의 3년째입니다.
예전 3.x 정식에 포함 되긴전 Beta 버젼때부터 썼지만 아주 훌륭합니다..

제가 서비스 하는 서비스 특성상 초당 쿼리가 장난이 아닙니다만.
넉넉하게 버티고 운영이 되고 있습니다.

오히려 low level locking 이 지원되기 때문에 update 문이 많은 DB라면 무조건 써야 하는 경우라고 여겨 집니다

Row Level Locking 아닌가요 ?

이게 궁금해서 메뉴얼에서 InnoDB Locking 메커니즘이 나온 부분을 훑었는데, Oracle Style 이라는군요. 음.. Snapshot 소리도 보이고.. 언제한번 날잡고 파봐야겠습니다.

maximus의 이미지

^^ Row Level Locking 맞습니다.

간단하게 설명 드리면,
기존 MYISAM 의 경우 테이블에 수정사항이 생기면 전체 테이블에 락을 걸어 버리는반면 Row Level Locking이 지원되는 InnoDB는 해당 Row 에 한해서만 lock 이 걸립니다..

어떤 차이가 있는지는 얘기 안해도 짐작이 되시죠 ?

=================================
:: how about a cup of tea ? ::
=================================

dada의 이미지

거의 모든 면에서
innodb가 myism보다 우월하다는 느낌입니다.

myism의 극악한 table locking때문에 발생하던 병목에서 탈출한 것만으로도 innodb 강추입니다.

단 한가지, myism은 스냅샷만들기가 정말 쉬운데, innodb는 유료툴이 없으면 특별한 방법이 없는 듯 싶더군요.
제가 다루는 db는 mysqldump로 새벽에 2시간 정도의 시간이 소요됩니다. 데이타가 더 늘어나면 앞으로 어느정도 걸릴지 예측불가군요.

mysqldump받고 바이너리 로그 쌓는 것 이외에, 스냅샷 바로찍는 좋은 방법이 없을까요?

김성진의 이미지

굳이 사족을 달자면...

innodb는 돈을 지불하지 않는 선에서는 너무나 훌륭한

솔루션입니다.

그런데, 제가 DB개발업계에 있다보니 내부를 분석해 보았는데..

인덱스 처리에 잠재적인 문제가 있습니다.

대규모 상용 DBMS에서는 인덱스 처리스에 Node Level Latching 기법을

이용해서 update와 select가 하나의 인덱스 내부에서

parallel하게 동작합니다.

그러나, innodb의 경우 Tree Latch라고 해서 modify연산과

read 연산이 동시에 수행될 수 없는게 문제더군요.

일반적인 상황에서는 크게 느껴지지 않지만,

만일 select되는 대상 데이터 집합이 커서 버퍼 매니저에서

fix & unfix가 대량으로 발생할 경우에는

최악의 경우 100배 이상 느려질 수 있습니다.

그래서, 보통 이런 innodb의 경우에 buffer hit ratio를 거의 100%에 가깝게

튜닝하셔야 나중에 당황하지 않으실 겁니다.

아..그리고, 다른 문제점을 또하나 든다면,

기본적으로 지원되는 Isolation level에 Repeatable read인데

구현방식이 약간 다름으로 인해 select와 update가 동시에 발생할 경우에

때때로 consistent error가 발생할 수 있습니다.

물론 오라클은 이런 문제가 없습니다.

그래서 innodb의 클라이언트 개발할 때는 의도하지 않는

rollback에 대해 처리를 하고, 재시도하도록 하는 루틴이

추가되어야 하지 않을까 하는 생각을 합니다.

흑...마지막으로

innodb는 MVCC기법(오라클과 유사)인데,

busy한 select와 update 트랜잭션이 발생할 경우

구조적으로 성능이 과도하게 낮아질 위험성이 있습니다.

이것은 학문적으로 이야기하면 old view에 대한 처리 때문인데

innodb의 경우 읽을 대상 tuple이 old view인지 아닌지

판별하기 위해 매 커서 open시에 모든 트랜잭션의 모든 커서에 대해

방문을 해서 view 정보를 가져오기 때문에 성능이 급격하게

떨어질 위험성이 있습니다. 물론 몇백개의 트랜잭션이 동시에

수행될 때를 가정하는 것입니다.

-------------------------------------------

innodb의 단점만을 이야기 한 것 같은데,

이런 문제점을 알고 쓰는 것과 모르고 쓰는 것은 차이가 있기 때문에

혹시 도움이 될까 해서 올렸습니다.

개인적인 관점에서는

innodb의 스토리지 매니저 부분을 한 개인이 전담해서 개발했기 때문에

필연적으로 쉬운 방법을 택한게 아닌가 하는 생각입니다.

어떤 두뇌집단이 다시 쓴다면 더 좋은 제품이 될 것 같고,

현존하는 오픈 소프트웨어 DBMS 중에서는 가장 실용적인 것

같습니다.

건승하십시요.

김성진 드림

고도의 추상화, 극도의 구체화, 에디슨을 그리워하다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.