SQL Server/SQL Server Tip 662

메모리 관리 아키텍처 – 동적 메모리 관리

메모리 관리 아키텍처 – 동적 메모리 관리 Version : SQL Server 2005, 2008, 2008R2 SQL Server 데이터베이스 엔진의 기본 메모리 관리 동작은 시스템에 메모리가 부족해지지 않도록 필요한 만큼 메모리를 확보하는 것이다. 데이터베이스 엔진은 Windows의 메모리 알림 API를 사용하여 이 작업을 수행 한다. SQL Server의 가상 주소 공간은 버퍼풀이 차지하는 공간과 나머지 공간으로 고유하게 나눌 수 있다. AWE 메커니즘을 사용하면 버퍼 풀이 AWE 매핑된 메모리에 있을 수 있으며 데이터베이스 페이지를 위한 추가 공간을 제공 한다. 버퍼 풀은 SQL Server의 주 메모리 할당 소스로 사용된다. COM 개체 등 SQL Server 프로세스에 있으며 SQL Serv..

메모리 관리 아키텍처 – 프로세스 주소 공간

메모리 관리 아키텍처 – 프로세스 주소 공간 Version : SQL Server 2005, 2008, 2008R2 모든 32비트 응용프로그램은 4GB의 프로세스 주소 공간이 있다. (32비트의 주소 공간은 4GB의 메모리를 매핑 할 수 있음). 8-bit2^8256bits16-bit2^1664KB32-bit2^324GB64-bit2^642EB Windows 운영체제에서 응용 프로그램은 커널 모드와 사용자 모드의 공간으로 나누어 지며 사용자 모드는 2GB의 공간이 할당 되며 액세스 할 수 있다. 응용 프로그램에서 소유한 모든 스레드는 동일한 사용자 모드 가상 주소 공간을 공유 한다. Windows Server 2000 이후 버전에서는 커널 주소의 공간을 1G로 제한하고 응용 프로그램에 3GB의 프로세스 ..

메모리 관리 아키텍처 – 메모리 아키텍처

메모리 관리 아키텍처 – 메모리 아키텍처 Version : SQL Server 2005, 2008, 2008R2 SQL Server에서는 메모리를 필요에 따라 동적으로 확보하고 해제 한다. 일반적으로 관리자는 SQL Server에 할당 해야 하는 메모리 양을 지정할 필요가 없다. (필자의 생각은 SQL 전용 시스템의 경우 최소, 최대 메모리 할당을 통하여 만약의 사태에 SQL Server의 가용 메모리가 뺏기는 일이 없어야 한다고 생각한다.) SQL Servers는 32비트의 Windows 운영체제에서 실제 메모리를 4GB이상 사용할 수 있도록 하는 AWE(Address Windowing Extensions)를 지원하여 최대 64GB의 실제 메모리가 지원된다. Windows 2000에서 실행되는 SQL ..

데이터 압축 상태에 대한 개체 크기 예상

데이터 압축 상태에 대한 개체 크기 예상 Version : SQL Server 2008, 2008R2, 2012 SQL Server 2008 이상부터 데이터 압축에 대한 기능이 추가 되었다. 데이터베이스의 전체 테이블, 일부 테이블을 압축 할 수 있게 되었다. 압축 상태에 대한 개체 크기를 예상하는 방법으로 sp_estimate_date_compression_savings 프로시저를 통해 알아 보자. sp_estimate_date_compression_savings 프로시저를 이용하면 전체 테이블 및 일부 테이블에 대해 압축 전후의 크기를 계산 할 수 있다. 여기에는 힙, 클러스터형 인덱스, 비클러스터형 인덱스, 인덱싱된 뷰 및 테이블인덱스 파티션이 포함 된다. 개체는 행 압축 또는 페이지 압축을 사용하..

sp_MSforeachdb, sp_MSforeachtable 프로시저 활용하기

sp_MSforeachdb, sp_MSforeachtable 프로시저 활용하기 Version : SQL Server 2008, 208R2, 2012 master 데이터베이스에 있는 sp_MSforeachtdb, sp_MSForeachtable 프로시저에 대해서 알아 보자. (필자도 업무용 쿼리를 분석하다 알게 되었다). [sp_MSforeachdb] sp_MSforeachdb 프로시저는 SQL Server 인스턴스 내에 있는 모든 데이터베이스의 이름을 반환하며 이 이름을 참조하여 지정된 반복문을 수행 한다. 아래 스크립트는 인스턴스내의 모든 데이터베이스의 helpfile 정보이다. use master go exec sp_MSforeachdb 'use ? exec sp_helpfile' 아래 스크립트는 인..

SQL Server 쿼리 처리 아키텍처_분산 쿼리 아키텍처

SQL Server 쿼리 처리 아키텍처_분산 쿼리 아키텍처 Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server는 T-SQL문에서 다른 유형의 OLE DB 데이터 원본을 참조하는 두 가지 메서드를 지원 한다. [연결된 서버 이름] 시스템 저장 프로시저 sp_addlinkedserver 및 sp_addlinkedsrvlogin은 OLE DB 데이터 원본에서 서버 이름을 제공하는 데 사용 된다. 링크드 서버 등록 EXEC sp_addlinkedserver @server='Server1', -- Linked Server Name @srvproduct = '', -- NULL @provider = 'SQLNCLI', -- SQL Server Native Clien..

SQL Server 쿼리 처리 아키텍처_병렬 쿼리 처리 - 병렬 인덱스 작업

SQL Server 쿼리 처리 아키텍처_병렬 쿼리 처리 병렬 인덱스 작업 Version : SQL Server 2005, 2008, 2008R2, 2012 (Enterprise Edition only) 인덱스를 생성하거나 재생성 하는 작업 또는 클러스터형 인덱스를 삭제하는 작업을 위해 작성된 쿼리 계획에서는 여러 마이크로프로세서가 있는 컴퓨터에서 병렬 다중 스레드 작업을 할 수 있다. SQL Server는 다른 쿼리에 사용하는 것과 동일한 알고리즘을 사용하여 인덱스 작업에 대한 병렬처리 수준(실행할 스레드 수)을 결정한다. 인덱스 작업에 대한 최대 병렬 처리 수준은 max degree of parallelism 서버 구성 옵션을 따른다. SQL Server MAX DOP 설정 : http://sqlmvp..

SQL Server 쿼리 처리 아키텍처_병렬 쿼리 처리 - 병렬 처리 수준

SQL Server 쿼리 처리 아키텍처_병렬 쿼리 처리 병렬 처리 수준 Version : SQL Server 2005, 2008, 2008R2, 2012 (Enterprise, Developer 버전 지원) SQL Server에서는 병렬처리 실행 또는 인덱스 DDL(데이터 정의 언어)작업의 각각의 인스턴스에 대해 가장 적합한 병렬 처리 수준이 자동으로 검색 된다. 이때 아래와 같은 조건을 기준으로 수행 된다. SMP(대칭적 다중 처리)컴퓨터와 같이 둘 이상의 마이크로프로세서 또는 CPU가 있는 컴퓨터에 SQL Server가 실행 중이어야 한다. SMP 관련 링크 : http://sqlmvp.kr/140188414498 사용할 수 있는 스레드 수가 충분 해야 한다. 쿼리 또는 인덱스 작업을 실행하려면 일정..

SQL Server 쿼리 처리 아키텍처_병렬 쿼리 처리

SQL Server 쿼리 처리 아키텍처_병렬 쿼리 처리 Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server에서 CPU를 두 개 이상 사용하는 컴퓨터에서는 운영체제의 다중 스레드로 쿼리나 인덱스 작업을 병렬 수행 할 수 있음으로 작업을 빠르고 효율적으로 완료 할 수 있다. 쿼리를 최적화 하는 동안 SQL Server는 병렬 실행에 적합한 쿼리 인덱스 작업을 찾는다. 이러한 쿼리에 대해 SQL Server는 쿼리 실행 계획에 교환 연산자를 삽입하여 병렬 실행할 쿼리를 준비한다. 교환 연산자는 프로세스 관리, 데이터 재배포 및 흐름 제어를 제공하는 쿼리 실행 계획의 연산자이다. 교환연산자에는 하위 유형으로 Distribute Streams, Repartitio..

SQL Server 쿼리 처리 아키텍처_실행 계획 캐싱 및 다시 사용 - Preparing SQL Statements

SQL Server 쿼리 처리 아키텍처_실행 계획 캐싱 및 다시 사용 Preparing SQL Statements Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server 관계형 엔진에서는 SQL 문을 실행하기 전에 SQL 명령을 준비할 수 있는 기능을 제공한다. 응용 프로그램에서 SQL문을 여러 번 실행해야 하는 경우에는 데이터베이스 API를 사용하여 다음을 수행 할 수 있다. 프리페어드 쿼리를 한 번 실행한다. 이렇게 하면 SQL문이 실행 계획으로 컴파일 된다. 첫 번째 쿼리 실행 이후 프리페어드 쿼리문을 실행 할 때마다 미리 컴파일된 실행 계획을 사용한다. 이렇게 하면 쿼리를 실행 할 때마다 SQL 문을 다시 컴파일할 필요가 없다. 프리페어드 쿼리 실행은..