전체 글 1383

메모리 관리 아키텍처 – 버퍼 관리_페이지 쓰기

메모리 관리 아키텍처 – 버퍼 관리_페이지 쓰기 Version : SQL Server 2005, 2008, 2008R2 데이터베이스 엔진 인스턴스의 I/O에는 논리적 읽기 수 및 물리적 읽기 수가 포함되어 있다. 논리 쓰기는 버퍼캐시에 있는 페이지의 데이터가 수정 될 때 발생 한다. 물리적 쓰기는 페이지를 버퍼 캐시에서 디스크로 쓸 때 발생 한다. 페이지가 버퍼 캐시에서 수정 될 때 페이지는 디스크에 바로 기록되지 않고 대신 커밋되지 않음으로 표시 된다. 즉 페이지는 물리적으로 디스크에 기록되기 전에 두 개 이상의 논리적 쓰기를 수행 할 수 있다. 각 논리적 쓰기의 경우 트랜잭션 로그 레코드는 수정 사항을 기록하는 로그 캐시에 삽입 된다. 로그 레코드는 관련된 커밋되지 않은 페이지가 버퍼 캐시에서 제거되..

메모리 관리 아키텍처 – 버퍼 관리_페이지 읽기

메모리 관리 아키텍처 – 버퍼 관리_페이지 읽기 Version : SQL Server 2005, 2008, 2008R2 SQL Server 데이터베이스 엔진 인스턴스의 I/O에는 논리적 읽기 수 및 물리적 읽기 수가 포함되어 있다. 논리적 읽기는 데이터베이스 엔진이 버퍼캐시에서 페이지를 요청할 때마다 발생 한다. 페이지가 현재 버퍼캐시에 없는 경우 물리적 읽기가 먼저 디스크의 페이지를 캐시로 복사한다. 데이터베이스 엔진의 인스턴스로 생성된 읽기 요청은 관계형 엔진에 의해 제어되고 저장소 엔진에 의해 최적화 된다. 관계형 엔진은 테이블 검색, 인덱스 검색, 키 사용 읽기와 같은 가장 효과적인 액세스 방법을 결정 한다. 저장소 엔진 및 버퍼 관리자 구성 요소는 수행할 일반 적인 읽기 패턴을 결정하고 액세스 ..

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

메모리 관리 아키텍처 – 버퍼 관리 Version : SQL Server 2005, 2008, 2008R2 SQL Server 데이터베이스의 주 목적은 데이터 저장과 데이터 검색이므로 데이터베이스 엔진의 특성은 집중형 디스크 I/O이다. I/O 작업은 많은 리소스를 소비하며 완료하는 데 비교적 오랜 시간이 걸리므로 SQL Server에서는 I/O의 효율성을 높이는 것이 중요하다. 버퍼 관리는 이러한 효율성을 얻기 위한 핵심 구성요소이다. 버퍼 관리 구성 요소는 데이터베이스 페이지를 액세스하고 업데이트 하기 위한 버퍼 관리자와 데이터베이스 파일 I/O를 줄이기 위한 버퍼캐시(버퍼 풀이라고도 함)의 두 가지 메커니즘으로 구성되어 있다. [버퍼 관리 작업 방법] 버퍼는 데이터 또는 인덱스 페이지와 같은 크기인..

메모리 관리 아키텍처 – Min/Max Server Memory 효과

메모리 관리 아키텍처 – Min/Max Server Memory 효과 Version : SQL Server 2005, 2008, 2008R2 Min Server Memory / Max Server Memory의 두 가지 옵션을 사용하여 SQL Server 인스턴스에서 사용하는 버퍼 풀의 메모리 양을 제어 할 수 있다. 기본적으로 SQL Server는 사용할 수 있는 시스템의 리소스에 따라 메모리를 동적으로 변경 한다. Min Server Memory 의 최소 용량은 0 이며 Max Server Memory의 최소 용량은 16MB이다. Min / Max Server Memory 설정 : http://sqlmvp.kr/140167266577 SQL Server는 프로세스로서 Max Server Memory ..

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

메모리 관리 아키텍처 – 동적 메모리 관리 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..