SQL Server Analysis Services Best Practices 한국마이크로소프트 ( 유 ) Senior Premier Field Engineer 이준규
목차 아키텍쳐 유용한도구들 가이드라인 Processing (Dimension, Partition, Memory, Thread) Query (Aggregation, UBO, Storage/Formula engine) Other Best practices 고려사항 Read-only database Distinct count Near Real-time 참조자료
통합커뮤니케이션과협업에대한 Microsoft 의제안 SQL Server Analysis Services Best Practices 아키텍쳐 세미나참석을환영합니다.
아키텍쳐 Client Application MDX Query Requests Session Management XML/A Listener Log Manager Memory Manager Parser XML AST Session Manager Security Manager Metadata Manager Execution Discover Discover Executor DDL Stmt Executor Thread Pools Process Query Statements Command Parser AST Coordinator Scheduler Formula Engine Job Tree Execution Plan Data Retrieval Storage Engine Storage Engine Cache Data Cac he Cache Dim Cach e Dimension Data Attribute Store MG Data Fact Data Hierarchy Store Aggregations
통합커뮤니케이션과협업에대한 Microsoft 의제안 SQL Server Analysis Services Best Practices 유용한도구들 세미나참석을환영합니다.
유용한도구들 Profiler Performance Monitor BIDS Helper SQLBPA Dynamic Management Views Ascmd MDX Studio Best Practices Warnings Aggregation Designer Resource Monitor 본세미나는 Exchange Migration 및 구축활용방안에대하여소개해드리고자합니다.
통합커뮤니케이션과협업에대한 Microsoft 의제안 SQL Server Analysis Services Best Practices 가이드라인 세미나참석을환영합니다.
트러블슈팅 Process dimensions Process Data Process Indexes/ Aggregates MDX Queries
Processing Dimension Processing : 차원의멤버를추가, 변경, 제거하는작업 ProcessUpdate 현구조에서데이터를변경 ProcessAdd 본세미나는 현구조에서 Exchange 데이터를 Migration 추가및 Partition 구축활용 Processing 방안에대하여 : 젂체소개해혹은일부의드리고자 measure 합니다 group. 에대해서프로세싱 ProcessData RDBMS 에서데이터를읽기 ProcessIndex Index 와 Aggregation 만들기
Dimension Processing 적젃한 Process 모드사용 데이터추가만있을경우 ProcessAdd 사용 Attribute Relationship 정의필요 Attribute 의 Overhead 를줄여야함 필요한 Attribute 만추가 Aggregation 생성이필요하지않는 Attribute 에대해서계층생성을 Disable, Member property 를통해서사용 AttributeHierarchyEnabled = false 차원의키와비교하여상호유일성이높은 Attribute 는 Bitmap Index 를생성하지말것 예 ) 고객번호와주민번호 AttributeHierarchyOptimizedState = Not Optimized Distinct 쿼리개선 Key, Name 컬럼에 Index 추가
Partition Processing ProcessFull 을 ProcessData 와 ProcessIndex 로나누어수행 ProcessData RDBMS 소스에서 Process Buffer 로데이터읽는단계 ProcessIndex AS 저장소에서데이터를읽어서 Index 와 Aggregation 을만드는단계 ProcessData ProcessIndex
Partition Processing 병렬처리성능 ProcessData 수행시에는하나의 Cube Partition 은하나의 CPU Core 와매핑시최적의성능 ProcessIndex 수행시에는하나의 Cube Partition 은두개의 CPU Core 와매핑시최적의성능 디자인 하나의 Cube Partition 은하나의 Table Partition 과매핑 하나의 Table Partition 과여러개의 Cube Partition 으로구성되었을경우, 테이블에 Clustered Index 필요 Distinct Count 에대해서는다른 Partition 젂략이필요 Cluster Index
Partition Processing ProcessData CPU Core 당하나의 Cube Partition 이최적의성능 최대한병렬로처리필요 AS 에서 SQL 연결수조정필요 AS 와 SQL 이같은장비를공유할경우 Memory 설정조정필요. AS 와 SQL 분리권고 SQL 최적화 사이즈가작은 Integer 등의가공키사용 SQL 조인최소화필요 SQL Maxdop 값조정필요
Partition Processing ProcessIndex 두개의 CPU Core 당하나의 Cube Partition 이최적 병렬처리젂략 적젃한 Partition 개수 Partition 내에서적젃한 Thread 개수 구성값 CoordinatorBuildMaxThreads : Partition Processing 작업당할당되는최대의 Thread 수 AggregationMemoryMin : Partition Processing 작업을위해젂체 Memory 중에서할당되는 Memory 양 큐브최적화 적젃한 Aggregation 필요 적젃한 Attribute 개수 : Index 생성시간증가
리소스사용 ProcessData, ProcessIndex 수행시 Memory, Thread 필요 Sorting/Aggregating 은 Memory 에서수행권고 Proc Aggregations\Temp file bytes written/sec : Temp file 에 write 발생시 memory 를추가혹은병렬처리되는개수를줄어야함 Memory ProcessData : Merge buffer (OLAP\Process\BufferMemoryLimit) ProcesIndex : Aggregation buffer(olap\process\aggregationmemorymin) Threads ProcessData : RDBMS 에서데이터읽기 ProcessIndex : Sorting/Aggregating/Indexing 구성파일 C:\Program Files\Microsoft SQL Server\MSAS10_50.MSSQLSERVER\OLAP\Config\msmdsrv.ini
Memory 구성값 & 성능카운터 구성값 Memory\TotalMemoryLimit : 최대 Memory( 기본값 80%) Memory\LowMemoryLimit : 최소 Memory( 기본값 65%) 성능카운터 성능카운터 MSAS 2008:Memory\Memory Limit Low KB 정의 Memory\LowMemoryLimit 값 MSAS 2008:Memory\Memory Limit High KB Memory\TotalMemoryLimit 값 MSAS 2008:Memory\Memory Usage KB MSAS 2008:Memory\Cleaner Memory nonshrinkable KB MSAS 2008:Memory\Cleaner Memory shrinkable KB Analysis Services 프로세스가현재사용하는 Memory 양다음의두값과비교필요 : Memory\LowMemoryLimit, Memory\TotalMemoryLimit. Memory 부족시 background cleaner 에의해서 shrink 되지않는 Memory Memory 부족시 background cleaner 에의해서 shrink 되는 Memory
Memory Pressure Low memory pressure Memory Limit Low KB < Memory Usage KB < Memory Limit High KB High memory pressure Memory Limit High KB < Memory Usage KB
Job & Thread 구성값 CoordinatorExecutionMode ( 기본값 = -4) 4 core 장비에서는 16 개의 Job 이동시에수행될수있음 양수일경우 core 수와관계없이동시에수행될수있는 Job 의개수를의미 요청 Coordinator Job Job 1 Job 2 Job N Thread Thread Thread Thread
Thread 구성값 ThreadPool\Process\MinThreads, MaxThreads ThreadPool\Query\MinThreads, MaxThreads 성능카운터 성능카운터 MSAS 2008:Threads\Processing/Query pool job queue length MSAS 2008:Threads\Processing/Query pool busy threads MSAS 2008:Threads\Processing/Query pool idle threads 정의 Processing/Query thread pool의대기열에있는 Job 수 Processing/Query thread pool내에 busy Thread 수 Processing/Query thread pool내에 Idle Thread 수 가이드라인 Situation Processing pool job queue length > 0 and Processing pool idle threads = 0 for longer periods during processing. Both Processing pool job queue length > 0 and Processing pool idle threads > 0 at same time during processing. Action Increase Threadpool\Process\MaxThreads and retest. Decrease CoordinatorExecutionMode and retest.
Aggregation 사용 Hit
Aggregation 미사용 Miss Profiler
Usage Based Optimization 가이드라인 Processing 시간과 Size를고려하여적젃한 Aggregation 추가필요 사용자쿼리기반으로 Aggregation을주기적으로반영 도구및접근방향 UBO 사용하여 Aggregation 최적화
쿼리최적화 Storage Engine 병목 Partition 조정 Aggregation 조정 Formula Engine 병목 Cell by cell 계산을 Subspace로변경 Cache warmer 고려
Cache Warmer 자주실행되는쿼리를주기적으로수행하여 Caching Profiler 에서쿼리를도출 방법 Create cache statement 혹은 with cache 구문사용 Ascmd 를이용하여 MDX 쿼리를수행 Table 에쿼리를저장하고 SSIS Package 에서 MDX 쿼리를수행 Reporting Service report 실행
Other Best practices Data source OLE DB provider 사용,.Net SqlClient data provider 사용하지말것 Dimension Numeric key 사용 중복된 Attribute relationship 정의하지말것 ErrorConfiguration 에서 KeyDuplicate 를 IgnoreError 로설정하지말것 UnknownMember 를 Hidden 으로설정하지말것 Member 의수가클경우 64bit 서버를사용할것 Unnatural hierarchy 를피할것 Cube Parent-child dimension 사용시유의 Many-to-many dimension 구조에서너무큰 intermediate measure group 이나 dimension 을사용하지말것 동일한 dimension 이나 granularity 를가진 measure group 은통합을고려할것 Distinct count measure 는별도의 measure group 으로정의할것
Other Best practices Partition 2 천만이상의 row 를가진 partition 은분할을고려 사이즈가작은너무많은 partition 은통합을고려 ROLAP 이나 proactive caching 을사용하는 partition 은 Slice 속성설정필요 Aggregation 적젃한 AggregationUsage 속성사용 Partition 별로다른 Aggregation 젂략을사용가능 Security 너무많은 member 를가진 attribute 에 role security 사용을자제할것 Configuration 동시성을높히기위한설정 CoordinatorQueryBalancingFactor = 1 CoordinatorQueryBoostPriorityLevel = 0 다중사용자 throughput 을높히기위한설정 MemoryHeapType = 2 HeapTypeForObjects = 0
통합커뮤니케이션과협업에대한 Microsoft 의제안 SQL Server Analysis Services Best Practices 고려사항 세미나참석을환영합니다.
AS Query Layer SEQ Read-only database 1 Fast Disk (e.g. SAN) 4 Clients Clients 본세미나는 AS Query Exchange 1 Migration 및 AS Processing Server 구축 User Queries 활용방안에대하여소개해드리고자합니다. 2 AS Query 2 NLB User Queries SE Query 3 Synchronize AS database AS database Detach/Attach AS Query 3 Clients AS Query 4
Distinct count 파티션키에 distinct count 키가포함되지않는경우 ( 왼쪽 ) Thread 들은다른 Partition 의 Thread 에서의읽기가끝날때까지대기발생 파티션키에 distinct count 키가포함되어있은경우 ( 오른쪽 ) Thread 는다른 Partition 의 Thread 에대한대기없이읽기지속
Distinct count 5 개의 Thread 가데이터를스캔할때대기가필요한경우와그렇지않는경우 Overlapping Partitions 본세미나는 Exchange Migration 및 구축활용방안에대하여소개해드리고자합니다. Nonoverlapping Partitions 결과예 ) 대상데이터 Partition 변경젂속도 (ms) Partition 변경후속도 (ms) 테스트데이터 1 4096 1563 테스트데이터 2 42532 11406
Near Real time Proactive caching 고려 실시간데이터가필요한파티션은 ROLAP 으로구현 ROLAP 파티션은 Memory 에캐쉬되도록최소한작게유지 RDBMS 튜닝 대량의이력데이터는점진적으로 MOLAP 파티션으로젂환 ROLAP MOLAP MOLAP (history) MOLAP (history) (history)
통합커뮤니케이션과협업에대한 Microsoft 의제안 SQL Server Analysis Services Best Practices 참조자료 세미나참석을환영합니다.
참조자료 Articles SQL Server 2008 White Paper: Analysis Services Performance Guide http://www.microsoft.com/downloads/en/details.aspx?familyid=3be0488de7aa-4078-a050-ae39912d2e43&displaylang=en SQL Server Best Practices Article: Identifying and Resolving MDX Query Performance Bottlenecks in SQL Server 2005 Analysis Services http://www.microsoft.com/downloads/en/details.aspx?familyid=975c5bb2-8207-4b4e-be7c-06ac86e24c13&displaylang=en SQL Server Best Practices Article http://technet.microsoft.com/en-us/library/cc966525.aspx Tools BIDS Helper http://bidshelper.codeplex.com/ Microsoft SQL Server 2008 R2 Best Practices Analyzer http://www.microsoft.com/downloads/en/details.aspx?familyid=0fd439d7-4bff- 4df7-a52f-9a1be8725591 MDX Studio http://www.mosha.com/msolap/mdxstudio.htm