In Memory 에 대한 오해 풀기

4
1

SQL SERVER에 In Memory OLTP 라고 해서,

메모리DB가 등장을 했습니다.

SQL Server 2014 에 최초로 등장을 했고,

SQL Server2016에 더욱 강력하게 업데이트 되어서 등장을 했습니다.

많은 분들이 In Memory DB 라고 하니,

메모리에 올라가니 매우 빠르겠구나 라고 생각 하는 경향이 매우 많으신데요…

매우 빠른 것은 맞지만, 제약사항이 매우 많습니다.

SQL2014 에서는 실제 사용이 거의 불가능 할 정도의 소개 수준이었다면,

SQL2016 에서는 느린 테이블 몇개를 올려서 속도를 개선할 수 있는 정도이지,

여전히 제약사항이 많습니다.

테스트 결과 우선 보시죠

500만건을 insert /select 를 하는 테스트를 진행했습니다.

진행은 제 노트북을 기준으로 하여서 실서버는 훨씬 더 호율이 좋아 질 수 있습니다.

SQL2014 부터 등장하는 SSD버퍼풀( BPE ) 라는 기능이 있는데,

이 기능을 활성화 시켜서 테스트 하였습니다.

SSD 버퍼풀 ( BPE) 는 서버에 디스크외에 대형작업용 버퍼를 위한 SSD 를 장착하여 보다 빠른 효율을 내도록 하는 옵션입니다.

SCHEMA&DATA 는 In Memory와 OnDisk 에 데이타를 저장을 모두 하여, 전원이 나가는 경우에도 데이타가 저장되는 기능이라고 보면 될것 같습니다.
( 단 DB가 재기동될 때, 올라오는 시간이 약간 걸리게 됩니다. )

SCHEME ONLY 는 In Memory 에만 데이터가 저장이 되어서, 전원이 꺼지거나 디비가 내려가게 되면 데이터가 사라지게 됩니다.

많이 빠르죠

게다가 SSD 버퍼풀 기능까지 확장하니 SCHME & DATA 의 효율을 더욱 끌어 올릴 수 있습니다.

그런데 반면 SELECT 풀스캔의 경우는 큰 효율이 없어 보입니다.

물론 풀스캔이어서 그럴 수는 있어보입니다.

우선, 간단한 테스트를 수행을 해본 결과입니다.

컬럼스토어로 묶거나 인덱스조절을 하게 되면 물론 월등히 빨라지긴 합니다만,

모든 데이터베이스를 In Memory로 올릴 수 있는 것이 아닙니다.

In Memory 로 올리는것 역시 마이그레이션을 진행해야 하고, 프로시저를 재컴파잉을 하고, 트리거도 수정을 해야 하고 코드도 수정을 해야 합니다. 모든 문법을 지원하지 않기 때문이죠

SQL2014 의 In MEMORY 는 거의 쓸 수 없을 정도로 제약이 많은 반면,

( 제약사항 : ALTER PROCEDURE, 모든 DML 문 , OUTER JOIN, SELECT DISTNCT, 서브쿼리 등 대부분 지원하지 않음 )

SQL2016은 많은 제약사항이 사라졌습니다.

그럼에도 아직까지 지원하지 않는 컬럼형식과, CASE WHERE THEN 과 같은 분기문을 지원하지 않으며,

외래키와 CHECK 기능등 를 가진 경우, 외래키를 제거후 마이그레션 이후 다시 설정을 해줘야 하며, 많은 번거로운 작업들이 있습니다.

간단히 말해, DBA가 없다면 in Memory 는 SQL2016 까진 동작이 거의 불가능 하다고 보시면 될것 같네요

SQL2018 이면 더욱 강력해지겠죠?


1
0

SQL이 성능이 점점 좋아지네요.. 저희는 아직 2008을 사용중인데.. 최신버전이면 얼마나 좋으려나^^;;

  • bytes
    최신이라고 속도가 좋아지는 것은 아닙니다. :) 잘써야 좋아지는거죠
  • werther20
    네 맞습니다. 좋은 엔진을 가지고 있는데.. 코딩을 아주 형편없게 해놓으면.. 성능이 안나기 마련인듯… (저희는 뭐 엔진도 별로지만.. 메인시스템 코딩이 아주 개판이라.. 속도가 느립니다^^;;)

총 1개 내용
의견 쓰기

쉐어드IT의 가입은 쉽고 간단합니다. 지금 하시고 IT관리자들과 의견을 함께 나누세요