“PostgreSQL 9.6 성능 이야기” 전자책용 미리보기 (1~2장)입니다.

“PostgreSQL 9.6 성능 이야기” 전자책 (PDF) 출간을 위한 편집 작업을 완료했습니다. e-Pub를 통한 Yes24, 알라딘, 반디앤루니스의 입점은 대략 3월20일 전후가 될 것 같습니다.

1~2장 미리보기 파일은 아래의 링크를 누르시면 다운로드할 수 있습니다. 기존의 종이책 미리보기 용 PDF 파일보다는 훨씬 보기 편리할 것 같습니다.  🙂

전자책-미리보기(1장,2장) Download

 

Advertisements

6 comments

  1. 전자책 출간해주셔서 감사합니다. 조금씩 읽어 나가고 있는 중입니다. 그리고 한가지 제안 드리고 싶은데 mariadb연구, 출판계획가지고 계시다면 성능관점에서 mariadb columnstore도 같이 대상에 포함시켜주시면 어떨까 합니다. 현재 제가 속한 회사에서도 관심을 가지고 지켜보고 있고 앞으로 핫한 아이템!이 되지 않을까 싶어요.^^ 너무 따끈따끈해서 아예 책은커녕 영어로 된 블로그도 찾기 힘드네요.

    Like

  2. 네. 4월초면 지금하고 있는 책 영어 번역 작업이 마무리 될 것 같습니다. 그 이후부터는 Mysql, Maria 연구를 시작할 예정인데요. 칼럼스토어도 연구 주제에 포함시키도록 하겠습니다. 좋은 의견 감사합니다. 책 구매도 감사드려요. 🙂

    Like

  3. Ring Buffer부분 질문좀 드릴게요. 책에 shared Buffer 훼손을 방지하기 위해 ring buffer를 사용한다고 되어 있는데 오라클의 경우에는 어떤 방법으로 훼손을 방지할까요

    Like

    1. 2장을 거의 다 읽으셨나보네요? 오라클은 Touch count 기반의 Midpoint insertion 기법을 사용합니다.

      간단히 정리하면 다음과 같은 알고리즘을 사용합니다.

      1) LRU를 Hot 영역 (자주 액세스되는 블록)과 Cold 영역 (자주 액세스되지 않는 블록)으로 구분합니다.
      2) 랜덤 IO (Index Scan)로 읽은 블록들은 LRU의 중간에 입력합니다. (중간에 입력하므로 Ageout될 가능성이 비교적 낮습니다)
      3) 스캔 (Table Full Scan, Index Fast Full Scan) 방식으로 읽은 블록들은 LRU의 끝 (Cold end)에 입력합니다. (맨 끝에 입력하므로 Ageout될 가능성이 매우 높습니다)
      4) 버퍼 내에 free 버퍼가 없을때는 LRU의 끝 (Cold End)부터 검색을 시작합니다.

      위와 같은 알고리즘을 이용하면 Ring Buffer와 일정 부분 비슷한 효과를 낼 수 있는데요. 예를 들어, 80 블록짜리 테이블을 Full Scan 방식으로 읽으면 다음과 같이 동작합니다.

      1) 8블록을 Multi Block IO로 읽습니다. 그리고 해당 블록들을 LRU의 맨 끝 (Cold end)에 위치시킵니다.
      2) 그 다음 8블록을 Multi Block IO로 읽습니다. 이때, LRU의 맨 끝에 위치했던 8블록이 Victim Buffer가 됩니다. 즉, 바로 이전에 로딩한 8블록이 Ageout되고, 그 위치에 8블록을 로딩합니다.
      3) 2번 Step을 반복합니다.

      이로인해, 80블록을 다 읽은 후에도 버퍼 내에는 해당 테이블의 8블록만 존재하게 됩니다. Ring Buffer와 비슷하죠?
      물론, 세부적으로는 다른 부분이 있지만, 버퍼를 보호하기 위한 목적은 동일하다고 할 수 있습니다.

      Like

  4. 답변감사합니다. 터치카운트 알고리즘 공부했었는데 너무 오랜만이라 잊고 있었던거 같아요. 근데 한가지확인하고 싶은건
    알려주신 내용에서 오라클 11g기준으로 3)번의 table full scan경우에도 테이블 사이즈가 작을 경우에는 중간영역으로 가는거죠? 그리고 작고 크고는 버퍼캐시의 25%정도에서 결정? 그러면 Postgres의 경우랑 비슷한거같아요 ”책 69페이지의 Postgres는 shared buffer크기의 1/4이상인 테이블에 대한 SeqScan시에만 bulk read방식을 사용한다” 다시 정리하면 오라클의 사이즈가 큰 테이블 full scan의 cold영역 할당방식= Postgres의 bulk read를 위한 ring buffer사용방식

    Like

  5. 네. 맞습니다. 작은 테이블의 기준은 _small_table_threshold 파라미터로 확인할 수 있습니다. 대략 버퍼 캐시의 1~2%정도입니다. 보다 자세한 사항은 욱짜님 블로그 http://ukja.tistory.com/133 를 참고하시면 좋을것 같습니다. 9년전 글인데, 다시봐도 좋네요. 🙂
    PS) 이렇게 비교해보니, PostgreSQL 기준인 1/4이 너무 큰것 같기도 합니다.

    Like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s