대용량 데이터베이스 튜닝 0 1 873

by 백상아리 [SQLServer] 대용량 [2018.05.15 13:10:08]


한달에 6억개에서 8억개 정도 쌓이는 테이블이 있습니다.

스키마는 이렇습니다.

CREATE TABLE [dbo].[tempData](

    [tempID] [int] IDENTITY(1,1) NOT NULL,

    [tempType] [varchar](15) NULL,

    [tempData] [varchar](max) NULL, -- 2000글자정도의 데이터

    [tempDatetime] [datetime2](7) NULL, -- 중복허용 클러스트 인덱스

    [tempSrcIP] [varchar](15) NULL, 

    [tempDestIP] [varchar](15) NULL, 

) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

인서트는 1분에 4만개 정도 입니다.

날짜타입에 인덱스를 걸어주어서 조회를 해주고 있는데 오래된 데이터 일수록 쿼리 검색 속도가 현저하게 떨어집니다.

테이블을 둘로 나누었더니 쿼리 속도는 어느 정도 나오는것 같습니다.

CREATE TABLE [dbo].[tempData](
    [tempDatetime] [datetime2](7) NULL,
    [tempID] [int] IDENTITY(1,1) NOT NULL,
    [tempSrcIP] [varchar](15) NULL,
    [tempDestIP] [varchar](15) NULL
) ON [PRIMARY]

tempID를 리턴 해주어 tempData_Raw 테이블에 넣어주는 형식입니다.

CREATE TABLE [dbo].[tempData_Raw](
    [tempID] [int] NOT NULL,
    [tempDATA] [varchar](max) NOT NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

이런식으로 둘로 나누거나 아니면 하나의 테이블을 가지고 파티션으로 나누어서 사용하려고 합니다. 

둘로 나누는 것이 맞는건지 아니면 다른 방법이 있나 해서 여쭤봅니다.

* 주기적으로 삭제 쿼리도 합니다.

by 마농 [2018.05.15 13:48:45]

1. 수평분할 : 행 단위 쪼개기
  - 파티션 테이블 사용
  - 대용량, 기간 검색, 주기적 삭제 등에 최적화
2. 수직분할 : 컬럼 단위 쪼개기
  - 작업 단위에 따른 컬럼 묶음 분할
  - Big Size 컬럼 분할
위 두가지 모두 적용하시면 될 듯 하네요.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입