새기능으로더욱강력해 진 SQL Server 2012 BI 쿼드디멘션스 전략기획팀 BI 파트 박희용
강사소개 경력 Quaddimensions 전략기획팀 -BI 파트 한이음 IT 멘토 SQL Server 2008 R2 MDS, StreamInsight 강의 관심분야 카페 BI, DQ http://cafe.naver.com/microsoftbi
선두그룹
목차 Integration Service Expression Task( 식태스크 ) Redo, Undo Grouping( 그룹 ) CDC 작업 DQS Cleansing(DQS 정리 ) 피벗 Parameters( 매개변수 ) Deploy( 배포 ) Columnstore 인덱스
SSIS 새기능 [1] Expression Task( 식태스크 ) 변수제어가용이 제어흐름작업 -> SSIS도구상자 -> 식태스크 변수 = 표현식 예 ) @[User::from_date] = DATEADD( Day, -1, GETDATE())
SSIS 새기능 [2] Redo, Undo 실행취소및재실행기능
SSIS 새기능 [3] Grouping( 그룹 ) 작업환경정리기능 제어흐름, 데이터흐름, 이벤트처리등에서사용가능 하나또는다수의객체지정선택후우클릭 -> 그룹
SSIS 새기능 [4] CDC 작업 CDC( 변경데이터캡쳐 ) CDC 가적용된테이블의갱신작업내용기록 Insert, Delete, Update 데이터변경내역추적가능 변경데이터저장 주의사항» < 스키마 >_< 테이블 >_CT < 스키마 >_< 테이블 >_CT 테이블관리가필요 잦은갱신이발생할경우성능고려 CDC 활성화옵션 @supports_net_changes = 1 CDC 데이터의흐름
CDC 관련작업 제어흐름 CDC 제어작업 CDC 데이터 life cycle 관리» 데이터로딩을위한 LSN 설정 데이터흐름 CDC 데이터원본 변경된데이터를로딩할원본테이블 CDC 분할 연결정보 CDC 데이터를 Insert, Delete, Update 로구분 ADO.NET 연결정보를사용
CDC ETL 구현 작업순서 초기데이터작업 변경데이터작업 ETL 이후데이터관리작업 (_CT 테이블관리등 ) Mark Initial load start Mark Initial load end Get processing range Mark processed range 초기데이터로딩 변경데이터로딩 변경데이터로딩 Get processing range Mark processed range
초기데이터작업 CDC 제어작업 -> 초기로드시작표시 데이터흐름작업 -> 모든데이터로딩 CDC 제어작업 -> 초기로드종료표시
변경데이터작업 CDC 제어작업 -> 처리범위가져오기 데이터흐름작업 CDC 원본 (cdc.< 스키마 >_< 테이블 >_CT)» All( 모두 )» All with old value( 이전값포함모두 )» Net( 순변경 )» Net with update mask( 업데이트마스크포함순변경 )» Net with merge( 병합포함순변경 ) CDC 분할자» 삽입, 업데이트, 삭제를구분 데이터대상 CDC 제어작업 -> 처리된범위표시
SSIS 새기능 [5] DQS Cleansing(DQS 정리 ) Data Quality Server 설치후사용가능
Data Quality Service 지식기반데이터품질서비스 데이터품질강화및표준화기능 도메인으로데이터를관리 예 ) 권역도메인 서울특별시 서울 서울시 경기도 수원시 구리시 Data Cleansing( 정리 ) 서울, 서울시 -> 서울특별시 수원시, 구리시 -> 경기도
도메인관리화면
DQS Cleansing( 정리 )
SSIS 새기능 [6] 피벗 2 1 3
이전버전피벗
SSIS 새기능 [7] Parameters( 매개변수 ) 프로젝트매개변수 프로젝트모든 Package 에서공용하는변수 프로젝트배포모델에서사용가능 사용방법» 솔루션탐색기 -> Project.params 더블클릭 -> 매개변수추가» 변수명, 데이터타입, 값, 중요, 필수, 설명입력 Package 매개변수 해당 Package 에서만사용 입력값 중요항목 -> True 변경시 Value 암호화 필수항목 -> 배포후 Package 실행시 Value 입력 패키지구성보다사용이용이 패키지구성은속성으로이동
SSIS 새기능 [8] Deploy( 배포 ) Legacy Deployment 이전버전의배포와동일 하나의 Package가배포단위 Project Deployment Integration Services Catalogs에배포 유효성검사리포팅지원 버전기능 총 10 개버전지원 매개변수, Environment 지원 하나의프로젝트가배포단위
프로젝트배포과정 SSISDB Catalog 설치 CLR 통합기능체크, 암호입력 솔루션탐색기의프로젝트우클릭후배포 유효성검사 프로젝트, Package 단위 리포트및대시보드형태로열람가능 버전관리 이전버전으로롤백가능 배포된프로젝트만해당 프로젝트삭제 exec [catalog].[delete_project]' 프로젝트 ',' 폴더 ' exec [catalog].[delete_folder] ' 폴더 '
Columnstore Index SQL Server Columnstore 의특징 Enterprise Edition 지원 열기반데이터구조 집계쿼리성능향상 필요한열데이터만사용 높은압축률 다음데이터까지의바이트수감소 집계작업감소 Olap Cube 감소 집계테이블작업의감소 인덱스열개수제한 최대 1024 개 ( 일반테이블의최대열개수 ) 행기반의인덱스는 16 개제한 클러스터형제공 X 파티션된테이블지원 데이터직접갱신불가 ( 삽입, 삭제, 업데이트 ) 이후버전에서변경될가능성이있음
Columnstore Index Row-Store 행단위로데이터를페이지에저장 Column-Store 열단위로데이터를페이지에저장 Column1 Column2 Column3... Column1 Column2 Column3...............
Columnstore Index Row-Store Storage Column-Store Storage 8KB 8KB 8KB #Rows A1 B1 C1 A2 B2 C2 #val A1 A2 #val B1 B2 Am Bm Cm Page Info An Page Info Bn Page Info Table Page0 Page1 eof Table PageA0 PageA1 eof PageB0 PageB1 eof
Columnstore Index 장단점 Row-Store 데이터업데이트가보다용이함 일반적으로불필요한열데이터읽기발생 압축효율이상대적으로낮음 Random Access에유리함 Column-Store 대용량데이터읽기성능이비교적뛰어남 데이터업데이트가까다로움 압축효율이상대적으로높음
Columnstore Index SQL Server 2012 EmployeeID Name City State 1 Ross San Francisco CA 2 Sherry New York NY 3 Gus Seattle WA 4 Stan San Jose CA 5 Lijon Sacramento CA Row Store 1 Ross San Francisco CA 2 Sherry New York NY 3 Gus Seattle WA 4 Stan San Jose CA Columnstore 1 2 3 4 5 Ross Sherry Gus Stan Lijon San Francisco New York Seattle San Jose Sacramento CA NY WA CA CA 5 Lijon Sacramento CA
Columnstore Index xvelocity In-memory column store engine 이전버전에서 PowerPivot 에사용됨 (Vertipaq) 높은데이터압축률 20,000,000 건데이터 -> 엑셀 50MB (PASS 2009 PowerPivot) 데이터값의분포에따라압축률변동 향상된 I/O 성능제공 적은수의페이지접근 모든데이터의 distinct value를 dictionary에저장 비트맵인덱스인 pointer로 dictionary 참조
Columnstore Index Dictionary A B C 키열비트맵 1 100 2 010 3 100 4 001 5 100 6 010 7 010 데이터 A B A C A B B
Columnstore Index 성능 읽기성능 단순집계 (SalesOrderDetail) 약 200만건 Index Scan vs. Columnstore Index Scan 5576 ColumnStore 인덱스 IndexScan 1404 78 860 423 742 cpu 사용시간논리적읽기수경과시간
Columnstore Index 압축성능 Columnstore 인덱스의크기 sys.column_store_segments 와 sys.column_store_dictionaries 의 on_disk_size 열로확인 테이블 (206 만건 ) 사이즈비교 216.67 180.79 ColumnStore 인덱스 NonClustered 인덱스 44.28 8.48 reserved(mb) Index_size(MB)
Columnstore Index Columnstore Index 생성 create nonclustered columnstore index 인덱스명 on 테이블명 ( 컬럼명 ) 제한사항 특정데이터형식지원안됨 Binary, text, image, varchar(max), uniqueidentifier, timestamp, 18 자리이상의 decimal 과 numeric, xml 기본키또는외래키로사용불가 고유인덱스로생성불가 뷰또는인덱싱된뷰에생성불가 메모리요구사항 인덱스생성시 MSDN : 8MB * 인덱스열수 * DOP( 병렬처리수준 ) Technet : [(4.2 * 인덱스열수 ) + 68]*DOP + ( 문자열열수 * 34)
Columnstore Index 데이터업데이트 인덱스삭제후재생성 Columnstore 인덱스삭제 -> 데이터업데이트 -> Columnstore 인덱스생성 데이터업데이트빈도가적은경우 처리시간이충분한경우 파티션된테이블 1. 스테이지테이블 2 개생성 업데이트될파티션과같은위치 2. 스테이지테이블중 1 개에데이터삽입이후업데이트 3. 원본과같은 Columnstore 인덱스생성 4. 원본테이블데이터삭제 ( 빈스테이지테이블과스위치 ) 5. 파티션스위치 6. 스테이지테이블삭제 Union All
Columnstore Index 주의사항 성능저하가능성 전체적인작업성능저하 쿼리힌트로 Columnstore 인덱스피하기» IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX» 안될경우 Columnstore 인덱스삭제 큰테이블조인시 메모리를초과하는해시테이블생성 -> 성능저하 조인조건이두개이상인경우 쿼리결과로여러개의열이반환되는경우 Columnstore 인덱스를검색해야하는경우 SQL Server 메모리관리 (32bit 주의 ) 에러코드 701 관련오류 http://technet.microsoft.com/ko-kr/library/aa337311.aspx
Columnstore Index 고려사항 어느테이블의어떤열에 Columnstore 인덱스를생성할것인가? 제한된결과를반환할때불필요 조인테이블의결과가적을때 특정조건으로결과집합이작을때 큰범위의집계쿼리에적합 빈번한갱신이일어나는테이블? 유지보수비용고려 OLTP 에서사용이가능할까? 읽기전용 DB 에가능 비용측면 Columnstore 인덱스를읽기전용메커니즘으로사용하지말것 Cube 생성 vs. columnstore 인덱스
참고문헌 [1]SQL_Server_2012_xVelocityBenchmark_Datashee tmar2012[1].pdf [2]Microsoft_Press_ebook_Introducing_SQL_Server_ 2012_Preview_II.pdf [3]Column-Oriented Database Systems. [VLDB 2009 Tutorial] [4]Column-Stores vs. Row-Stores: How Different Are They Really? [sigmod08] [5]http://msdn.microsoft.com http://tdon.blog.me/ 외다수의블로그등