SQL Server 818

SQL Server 쿼리 처리 아키텍처_저장 프로시저 및 트리거 실행

SQL Server 쿼리 처리 아키텍처_저장 프로시저 및 트리거 실행 Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server는 저장 프로시저와 트리거의 원본만 저장한다. 저장 프로시저나 트리거가 먼저 실행 될 때 원본은 실행 계획으로 컴파일 된다. 실행 계획이 메모리에서 에이징되기 전에 저장 프로시저나 트리거가 다시 실행되는 경우 관계형 엔진은 기존 계획을 검색하고 다시 사용한다. 계획에 메모리에서 에이징되면 새 계획이 작성된다. SQL Server에서 모든 SQL 문에 대해 수행하는 프로세스와 유사하다. 성능면에서는 동적 SQL의 일괄처리와 비교 했을 때 SQL Server에서 저장 프로시저와 트리거의 주요 이점은 SQL문이 항상 동일하다는 것이다. 따라서..

SQL Server 쿼리 처리 아키텍처 _ SQL 문 처리 (4/4) – 분산형 분할 뷰(View) 확인

SQL Server 쿼리 처리 아키텍처 _ SQL 문 처리 (4/4) – 분산형 분할 뷰(View) 확인 Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server 쿼리 프로세서에서는 분산형 분할 뷰의 성능을 최적화 한다. 분산형 분할 뷰 성능의 가장 중요한 측면은 멤버 서버 간에 전송되는 데이터의 양을 최소화 하는 것이다. SQL Server에서는 분산 쿼리를 효율적으로 사용하여 원격 멤버 테이블의 데이터에 액세스하는 지능적이고 동적인 계획을 작성 한다 로컬 분할 뷰(Local Partition View) : 수평으로 여러 테이블로 분할 된다. 일반적으로 모두 같은 구조를 가지고 있다. 크로스 데이터베이스 분할 뷰(Cross Database Partitione..

SQL Server 쿼리 처리 아키텍처 _ SQL 문 처리 (3/4) – 뷰(View)의 인덱스 확인

SQL Server 쿼리 처리 아키텍처 _ SQL 문 처리 (3/4) – 뷰(View)의 인덱스 확인 Version : SQL Server 2005, 2008, 2008R2, 2012 인덱스와 마찬가지로 SQL Server에서는 쿼리 최적화 프로그램에서 쿼리 계획에 인덱싱된 뷰를 사용하는 것이 효과적이라고 판단하는 경우 인덱싱된 뷰를 사용한다. [SQL Server 쿼리 최적화 프로그램에서 인덱싱된 뷰 사용] 아래의 세션 옵션이 ON 설정되어 있어야 한다. ANSI_NULLS ANSI_PADDING ANSI_WARNNINGS ARITHABORT CONCAT_NULL_YIELDS_NULL QUOTED_IDENTIFIER 아래 옵션이 OFF 설정 되어 있어야 한다. NUMERIC_ROUNDABORT 쿼리의 ..

SQL Server 쿼리 처리 아키텍처 _ SQL 문 처리 (2/4) – 뷰(View) 확인

SQL Server 쿼리 처리 아키텍처 _ SQL 문 처리 (2/4) – 뷰(View) 확인 Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server 쿼리 프로세서에서는 인덱싱된 뷰와 인덱싱 되지 않은 뷰가 다르게 처리 된다. 인덱싱된 뷰의 행은 테이블과 동일한 형식으로 데이터베이스에 저장 된다. 쿼리 프로세서에서 쿼리 계획에 인덱싱된 뷰를 사용하기로 결정하면 인덱싱된 뷰는 기본 테이블과 동일한 방법으로 처리 된다. 인덱싱되지 않은 뷰는 뷰의 정의만 저장되고 뷰의 행은 저장되지 않는다. 쿼리 최적화 프로그램은 인덱싱되지 않은 뷰를 참조하는 SQL문에 대해 작성하는 실행 계획에 뷰 정의의 논리를 추가 한다. SQL Server 쿼리 최적화 프로그램에서 인덱싱된 ..

SQL Server 쿼리 처리 아키텍처 _ SQL 문 처리 (1/4) – SQL 문 최적화 및 Worktables

SQL Server 쿼리 처리 아키텍처 _ SQL 문 처리 (1/4) – SQL 문 최적화 및 Worktables Version : SQL Server 2005, 2008, 2008R2, 2012 [SELECT 문 최적화] 단일 SQL문 처리는 SQL Server가 SQL문을 실행하는 기본적인 방법이다. SELECT 문은 프로시저를 통하지 않는다. 즉 데이터베이스 서버가 요청한 데이터를 검색하는데 사용해야 하는 정확한 단계를 지정하고 있지 않는다. 이는 데이터베이스 서버가 요청 구문을 분석하여 데이터를 출하는 가장 효율적인 방법을 판단해야 함을 의미 한다. 이것을 SELECT 문 최적화라고 하며 이를 위한 구성 요소를 쿼리 최적화 프로그램이라고 한다. 최적화 프로그램에 대한 입력은 쿼리, 데이터베이스, ..

SQL Server 2012 DMV를 이용한 통계 정보 확인

SQL Server 2012 DMV를 이용한 통계 정보 확인 Version : SQL Server 2008R2 SP2, 2012 SP1 통계 정보를 확인 하기 위해서는 DBCC SHOWSTATISTICS 명령어를 이용하였다. 내가 운영하는 서버가 SQL Server 2008R2 SP2 또는 SQL Server 2012 SP1 상위 버전인 경우 DMV를 통하여서도 통계 속성 정보를 확인 해 볼 수 있다. DBCC SHOWSTATISTICS 통계 관련 아티클 : http://sqlmvp.kr/140165557766 새로운 통계 관련 DMV를 사용하기 위해서는 위에서 설명 하였듯이 SQL Server 2008R2 SP2 또는 SQL Server 2012 SP1 이상 설치 되어 있어야 한다. [구문] sys.d..

DMV를 이용한 플랜 캐시 사용 정보 확인 - Sys.dm_exec_cached_plans

DMV를 이용한 플랜 캐시 사용 정보 확인 Sys.dm_exec_cached_plans Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server에서 빠른 쿼리 실행을 위해 실행계획을 캐시하고 있는데 sys.dm_exec_cached_plans DMV를 통하여 캐시된 쿼리 계획, 캐시된 쿼리 텍스트, 캐시된 계획이 사용한 메모리 양, 캐시된 실행 계획의 재사용 횟수 등의 정보를 확인 할 수 있다. 아래 스크립트를 이용하여 캐시된 계획을 확인 할 수 있다. 스크립트를 실행 하기 위해서는 서버에 대한 VIEW SERVER STATE 권한이 필요 하다. select * from sys.dm_exec_cached_plans 열이름데이터 형식설명bucketidInt캐시된..

SQL Server 테이블 및 인덱스 구조 아키텍처(4/4) – 비클러스터형 인덱스 구조

SQL Server 테이블 및 인덱스 구조 아키텍처(4/4) – 비클러스터형 인덱스 구조 Version : SQL Server 2005, 2008, 2008R2, 2012 비클러스터형 인덱스는 다음 두 가지 주요 차이점을 제외하고 클러스터형 인덱스와 동일한 B-tree구조를 갖는다. 기본 테이블의 데이터 행은 비클러스터형 키 기반의 순서대로 정렬되거나 저장되지 않는다. 비클러스터형 인덱스의 리프계층은 데이터 페이지 대신 인덱스 페이지로 구성 된다. 테이블이나 뷰에 클러스터형 인덱스나 힙과 함께 비크러스터형 인덱스를 정의할 수 있다. 비클러스터형 인덱스의 각 인덱스 행에는 비클러스터형 키 값과 행 로케이터가 있다. 이 로케이터는 키 값이 포함된 힙이나 클러스터형 인덱스의 데이터 행을 가리킨다. 테이블이 힙..

SQL Server 테이블 및 인덱스 구조 아키텍처(3/4) – 클러스터형 인덱스 구조

SQL Server 테이블 및 인덱스 구조 아키텍처(3/4) – 클러스터형 인덱스 구조 Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server에서 인덱스는 B-tree로 구성 된다. 인덱스 B-tree의 각 페이지를 인덱스 노드라고 한다. B-tree 맨 상위의 노드를 루트노드(root)라고 하며 최하위 노드를 리프노드(leaf)라고 한다. 루프노드와 리프노드 사이를 통틀어 중간노드(Non leaf)라고 한다. 클러스터형 인덱스의 리프노드에는 기본테이블의 데이터 페이지가 있다. 루트노드와 중간수준 노드에서는 인덱스 행을 포함하는 인덱스페이지가 있다. 각 인덱스 행에는 키 값과 함께 B-tree의 중간 수준 페이지에 대한 포인터나 인덱스 리프 수준의 데이터 행..

SQL Server 테이블 및 인덱스 구조 아키텍처(2/4) – 힙 구조

SQL Server 테이블 및 인덱스 구조 아키텍처(2/4) – 힙 구조 Version : SQL Server 2005, 2008, 2008R2, 2012 힙이란 클러스터 인덱스가 없는 테이블이다. 힙에는 힙에서 사용하는 각 파티션에 대해 index_id = 0의 sys.partitions 행이 하나 있다. select * from sys.partitions 기본적으로 힙은 단일 파티션을 사용한다. 힙이 다중 파티션을 사용하는 경우 각 파티션은 특정 파티션에 대한 데이터를 포함하는 힙 구조를 갖는다. 예를 들어 힙이 4개의 파티션을 사용하면 각 파티션마다 하나씩 총 4개의 힙이 있다. 힙의 데이터 형식에 따라 각 힙 구조에는 특정 파티션에 대한 데이터를 저장하고 관리하는 할당 단위가 하나 이상 있다. 최..