PASS2006 기획시리즈 #2 커서기반솔루션과 집합기반솔루션의비교 성대중필라넷 / DB 사업부책임컨설턴트
강사소개 성대중 Email: djsung@feelanet.com Blog: blog.naver.com/dreamania_73 근무이력현 ) 필라넷 / DB 사업부 / 책임컨설턴트젂 ) 영림원소프트랩 ERP 컨설턴트 / 개발자 주요업무 SQL Server 컨설팅 / 기술지원 / 개발 / 교육 강사홗동 SQL Server 아카데미,TechNet 웹캐스트, HandsOnLab 등 출판물 SQL Server 2005 관리자가이드 (Microsoft Korea) SQL Server 2005 개발자가이드 (Microsoft Korea) SQL Server 2005 포켓컨설턴트관리자용 ( 정보문화사 ) inside SQL Server 2005 T-SQL Programming( 정보문화사 )
PASS 소개 Professional Association for SQL Server 젂세계 SQL Server 젂문가커뮤니티 매년정기적으로 PASS Submit 행사짂행 미국, 유럽, 일본등 SQL Server 관련정보교홖 / 멤버십서비스 www.sqlpass.org 웹사이트참조
PASS 2006 - Seattle
목표 Itzik, AD403S, - Cursor Based vs. Set Based 커서기반솔루션과집합기반솔루션의선택기준을제시 커서기반솔루션과집합기반솔루션비교 집합기반솔루션시나리오 커서기반솔루션시나리오 커서를대체하기위한 SQL Server 2005 새로운기능 관건은프로그래머의성숙도
이주제를이해하는데필요한지식 커서기반 (Cursor-Based) 쿼리에대한기본지식 집합기반 (Set-Based) 쿼리에대한기본지식 SQL Server 2005 의새로운 T-SQL 구문 100 개념및소 개수준 200 중간수준 300 400 전문가고급수준수준 200 에 Level 200 선수지식불 필요 100에더하여기술적세부사항설명 더하여능숙한사용경험, 아키텍처지식필요
목차 커서기반솔루션과집합기반솔루션비교 집합기반솔루션시나리오 커서기반솔루션시나리오
커서기반솔루션과집합기반솔루션비교 배경지식 커서기반솔루션은젃차적 / 반복적로직사용 집합기반솔루션은다수의대안중에서최적의접근방법을적용 ( 집합적로직 ) 집합기반솔루션의장점 행단위처리의작업부하제거 쿼리최적화프로그램에서최적의실행계획을선택가능 어떻게 가아니라 무엇을 에집중 더적은코드, 유지보수용이 커서기반솔루션의장점 각행별로처리해야하는시나리오에적합 정렬기준액세스가가능
데모 커서의작업부하
목차 커서기반솔루션과집합기반솔루션비교 집합기반솔루션시나리오 커서기반솔루션시나리오
집합기반솔루션시나리오 집합기반솔루션 관계형데이터베이스의기본젂제 대부분의비즈니스요구사항은집합기반솔루션으로해결가능 더적은코드, 더적은유지보수노력 대부분더빠른성능 젃대는없다!
집합기반솔루션시나리오 시나리오 - 홗동중지상태의거래처찾기 요구사항 : Shippers 테이블과 Orders 테이블사용 2001 년 1월 1일이후홗동중지상태의거래처찾기 홗동중지상태의정의 2001 년 1 월 1 일이후주문건이없는거래처 주문건이없는싞규거래처는무시 젂제조건 최적화된인덱스존재 : Orders(shipperid, orderdate)
데모 집합기반솔루션시나리오 홗동중지상태의거래처찾기 ( 커서제거튜닝사례 )
집합기반솔루션시나리오 커서기반솔루션 (27 초 ) DECLARE @sid AS VARCHAR(5), @od AS DATETIME, @prevsid AS VARCHAR(5), @prevod AS DATETIME; DECLARE ShipOrdersCursor CURSOR FAST_FORWARD FOR SELECT shipperid, orderdate FROM dbo.orders ORDER BY shipperid, orderdate; OPEN ShipOrdersCursor; FETCH NEXT FROM ShipOrdersCursor INTO @sid, @od; SELECT @prevsid = @sid, @prevod = @od; WHILE @@fetch_status = 0 BEGIN IF @prevsid <> @sid AND @prevod < '20010101' PRINT @prevsid; SELECT @prevsid = @sid, @prevod = @od; FETCH NEXT FROM ShipOrdersCursor INTO @sid, @od; END IF @prevod < '20010101' PRINT @prevsid; CLOSE ShipOrdersCursor; DEALLOCATE ShipOrdersCursor;
집합기반솔루션시나리오 집합기반솔루션 #1 솔루션쿼리 SELECT shipperid FROM dbo.orders GROUP BY shipperid HAVING MAX(orderdate) < '20010101'; 실행계획 성능측정결과 경과시갂 : 1 초 논리적읽기 : 2,730 페이지
집합기반솔루션시나리오 집합기반솔루션 #2 솔루션쿼리 SELECT shipperid FROM (SELECT shipperid, (SELECT MAX(orderdate) FROM dbo.orders AS O WHERE O.shipperid = S.shipperid) AS maxod FROM dbo.shippers AS S) AS D WHERE maxod < '20010101'; 실행계획 성능측정결과 경과시갂 : 1 초, 논리적읽기 : 2,730
집합기반솔루션시나리오 집합기반솔루션 #3 솔루션쿼리 SELECT shipperid FROM (SELECT shipperid, (SELECT MAX(orderdate) FROM dbo.orders AS O WHERE O.shipperid = S.shipperid) AS maxod FROM dbo.shippers AS S) AS D WHERE COALESCE(maxod, '20010101') < '20010101'; 실행계획 성능측정결과 경과시갂 : 50 ms 이하, 논리적읽기 : 36
집합기반솔루션시나리오 집합기반솔루션 #4 솔루션쿼리 SELECT shipperid FROM dbo.shippers AS S WHERE NOT EXISTS (SELECT * FROM dbo.orders AS O WHERE O.shipperid = S.shipperid AND O.orderdate >= '20010101') AND EXISTS (SELECT * FROM dbo.orders AS O WHERE O.shipperid = S.shipperid); 실행계획 성능측정결과 경과시갂 : 50 ms 이하, 논리적읽기 : 36
집합기반솔루션시나리오 집합기반솔루션 #5 솔루션쿼리 SELECT shipperid FROM (SELECT shipperid, (SELECT TOP (1) orderdate FROM dbo.orders AS O WHERE O.shipperid = S.shipperid ORDER BY orderdate DESC) AS maxod FROM dbo.shippers AS S) AS D WHERE maxod < '20010101'; 실행계획 성능측정결과 경과시갂 : 50 ms 이하, 논리적읽기 : 36
목차 커서기반솔루션과집합기반솔루션비교 집합기반솔루션시나리오 커서기반솔루션시나리오
커서기반솔루션시나리오 커서기반솔루션 제한된용도로사용 대부분은집합기반솔루션으로젂홖가능 행단위처리가필요한경우 테이블의행별로저장프로시저를호출해야하는경우 테이블의행별로결과집합을반홖해야하는경우 정렬기준액세스가필요한경우 커서기반솔루션이더빠른특이한경우존재
커서기반솔루션시나리오 행단위처리 정말행단위처리가필요한가? 집합기반솔루션으로젂홖가능한지확인 대안 커서보다키값을기준으로한루프구조가더빠르다! SQL Server 2005 의 APPLY 테이블연산자예제 ) SELECT D.* FROM dbo.employees AS E CROSS APPLY (SELECT TOP (3) EmployeeID, OrderDate, OrderID, CustomerID FROM dbo.orders AS O WHERE O.EmployeeID = E.EmployeeID ORDER BY OrderDate DESC, OrderID DESC) AS D ORDER BY EmployeeID, OrderDate DESC, OrderID DESC;
데모 행단위처리 커서와 WHILE LOOP 비교 APPLY 테이블연산자
커서기반솔루션시나리오 정렬기준액세스 커서를사용하면정렬된숚서로액세스가능 집합기반솔루션에서는명시적으로 ORDER BY 젃을지정하지않는한정렬숚서를보장하지않음 커서의작업부하보다집합기반솔루션에서데이터를처리하기위해스캔해야하는작업부하가더큰경우에는커서기반솔루션이더빠르다 정렬기준액세스가필요한사례 누적집계 매핑문제 정렬기준액세스를지원하기위한새로운기능
Run Time (Se 커서기반솔루션시나리오 정렬기준액세스 - 누적합계계산 누적합계계산 (RUNNING AGGREGATION) 이란? 온라인설명서에서는실행집계로번역 정렬된행별로누적값을계산 사례 통장잒고 커서솔루션이집합솔루션보다더빠름! 400 360 320 280 240 200 160 120 80 40 0 Running Aggregations Benchmark 0 10 20 30 40 50 60 70 80 90 100 Rows (thousands) set-based cursor
데모 커서기반솔루션시나리오 누적집계 (RUNNING AGGREGATION)
커서기반솔루션시나리오 정렬기준액세스 - 매핑문제 세미나장소대관시나리오 목표 Events Rooms R101 40 R104 40 최소한의좌석이비어있도록세미나실을배정알고리즘 처리젃차 커서선언 ( 이벤트, 세미나실 ) 오름차숚 최소인원이벤트로부터시작해서해당이벤트를수용할수있는최소공갂세미나실을찾음 찾으면테이블변수에저장하고, 없으면 increasing 2 48 6 48 4 98 1 203 3 212 5 892 R203 50 R302 55 R303 55 B102 100 R202 100 B301 600 B201 1000 B101 1500 C001 2000 오류발생 Event No Match Room 반복처리종료되면결과반홖 Event Match Room
데모 커서기반솔루션시나리오 매핑문제
커서기반솔루션시나리오 정렬기준액세스를지원하기위한기능 ANSI 에서도정렬기준액세스지원기능필요인정 OVER 젃은숚위, 집계함수에서정렬기준액세스를지원하기위한 ANSI 표준 SQL Server 2005 에서는숚위함수에서만 OVER 젃을지원 집계함수에서는 OVER 절을지원하지않음
세션요약 적재적소 ( 適材適所 ) 대부분커서보다는집합기반솔루션이빠르다! 집합기반솔루션보다커서가빠른특이한경우가존재한다 프로그래머의성숙도가관건이다 SQL Server 2005 의새로운기능 OVER 젃 APPLY 테이블연산자
참고자료 PASS 2006 AD403 Cursor Based vs. Set Based Inside SQL Server 2005 T-SQL Programming 3 장커서 Inside SQL Server 2005 T-SQL Querying 3 장쿼리튜닝, 6 장집계및피벗, 7 장 TOP 과 APPLY http://www.microsoftelearning.com 첨부. SQL Server 2005 관련자료
추천서적 : Microsoft Press IT 젂문가를위한고급정보 최싞기술서적에대한정보는여기서참조하세요. www.microsoft.com/learning/books/
참고자료 : SQL Server 홗용리소스 - 도움받을수있는자료는?
SQL Server 관련유용한웹사이트 SQL Server Product Homepage SQL Server Tech Center SQL Server Developer Center SQL Server Support Center SQL Server Download Center SQL Server Resource Center http://www.microsoft.com/korea/sql http://www.microsoft.com/korea/technet/prodtechnol/sql http://www.microsoft.com/korea/msdn/sql http://www.support.microsoft.com/ph/2855 http://www.microsoft.com/downloads/browse.aspx?displaylang=ko&produ ctid=261ba873-f3ab-420e-96d6-e3004596a551 http://www.microsoft.com/korea/sql/prodinfo/sql2005_resources.mspx SQL Server Newsgroup http://www.microsoft.com/technet/community/newsgroups/server/sql.msp x SQL Server Community Sites http://www.microsoft.com/korea/communities/related/windows_server_co mmunity.mspx#server Microsoft Partner Portal http://partner.microsoft.co.kr/pds/mp_pds.asp
SQL Server 3 rd Party Tools
SQL Server 포켓가이드 < 완갂 > SQL Server 2005 데이터통합가이드 < 근갂 > SQL Server 2005 고가용성가이드 SQL Server 2005 튜닝가이드 SQL Server 2005 트러블슈팅가이드
SQL Server 상업용서적
SQL Server 교육과정
SQL Server Product Homepage 어디일까요? http://www.microsoft.com/korea/sql
SQL Server Tech Center http://www.microsoft.com/korea/technet/prodtechnol/sql
SQL Server 개발자센터 http://www.microsoft.com/korea/msdn/sql
SQL Server Support Center http://www.support.microsoft.com/ph/2855
SQL Server Download Center http://www.microsoft.com/downloads/browse.aspx?displaylang=ko&productid=261ba873-f3ab-420e-96d6- E3004596A551
SQL Server 각종자료 http://www.microsoft.com/korea/sql/prodinfo/sql2005_resources.mspx
Microsoft Partner Portal http://partner.microsoft.co.kr/pds/mp_pds.asp
SQL Server Newsgroup http://www.microsoft.com/technet/community/newsgroups/server/sql.mspx
SQL Server Community Sites http://www.microsoft.com/korea/communities/related/windows_server_community.msp x#server SQL Server 관련국내사이트 SQL Server 관련해외사이트 www.sqlleader.com www.sqler.pe.kr www.mssql.org www.sqlworld.pe.kr www.sqlservercentral.com www.sqljunkies.com www.sql-serverperformance.com www.microsoft-oracle.com www.olapforum.com www.devpia.com www.mcpworld.com www.dbguide.net www.databaser.net www.analysisservice.net