목록전체 글 (18)
TechBlog
애플리케이션에서 데이터를 조회하게 되면 SQL Server는 버퍼풀에 데이터가 있는지 확인하고, 없을 경우 디스크에서 버퍼풀로 데이터를 복사한 후 데이터를 사용하게 된다. 버퍼풀에 데이터가 있으면 디스크에 액세스하지 않고 버퍼풀의 데이터를 바로 사용하게 된다. 데이터는 버퍼풀에 머무르면서 지속적으로 사용되며, 수정되는 경우에만 디스크에 새로 쓰여지게 된다. 버퍼풀 내의 데이터가 수정될 경우, 트랜잭션 로그에는 변경 내역이 즉시 반영되지만 실질적인 데이터 페이지에는 Checkpoint 시점의 최종적으로 수정된 데이터만 디스크에 쓰여져 디스크 I/O를 줄여준다. SQL Sever의 버퍼풀 메모리가 부족할 경우 잦은 디스크 I/O를 발생시키며, 쿼리를 실행하는데 필요한 최소 메모리를 얻지 못하고 리소스를 대..
트랜잭션 복제를 생성하기 위한 기본 스크립트와 매개변수를 확인해보자. (게시 구성, 구독 추가) 1. 게시 구성1) 게시 생성하기① 게시자에서 sp_addpublication 실행② 게시자에서 sp_addpublication_snapshot 실행③ sp_addarticle로 아티클 추가④ 스냅샷 에이전트를 실행하여 게시에 대한 초기 스냅샷 생성 2) 매개변수 설명① sp_addpublication: 게시 추가@pubilcation → 게시 이름@statusactive → 활성화 : 구독자가 게시 데이터를 즉시 사용inactive → 비활성화 : 게시가 처음 작성될 때 구독자가 게시 데이터 사용 불가@allow_push → 밀어넣기 구독 생성 가능 여부@allow_pull → 끌어오기 구독 생성 가능 여부..
1. 복제란?복제(Replication)한 데이터베이스에서 다른 데이터베이스로 데이터와 데이터베이스 개체를 복사 및 배포한 다음, 데이터베이스 간에 동기화를 수행하여 일관성을 유지하는 일련의 기술로, 고가용성을 높이기 위한 방법 복제의 구성게시자: 다른 서버에 동기화될 데이터가 포함된 원본 데이터베이스를 유지하는 서버배포자: 게시자가 제공하는 게시를 가져와 구독자에게 배포하는 역할을 맡은 서버구독자: 복제된 데이터를 전송 받는 서버구독 방식밀어넣기(Push): 배포자가 구독자의 요청과 관계 없이 게시자의 변경 내용을 구독자로 전달하는 방식끌어오기(Pull): 구독자가 게시자의 변경 내용을 직접 요청하는 방식 2. 복제 유형스냅샷 복제트랜잭션 복제병합 복제1) 스냅샷 복제복제를 구성하면, 게시 전체를 구독..
1. 개요 파라미터 스니핑 (Parameter Sniffing)저장 프로시저를 처음 실행할 때 옵티마이저는 통계 정보를 바탕으로 실행계획을 생성한다.이때 생성된 실행계획을 캐시에 저장하고, 이후에 저장 프로시저가 다시 실행되면 캐싱된 실행계획을 재사용한다.그러나 저장 프로시저의 파라미터 값이 어떻게 들어오는지에 따라 최적화되지 못한 실행계획으로 인해 성능 저하를 일으킬 수 있는데, 이러한 현상을 파라미터 스니핑이라고 한다.주로 저장 프로시저를 실행할 때 발생하는 현상이다. 해결 방안Recompile 옵션 사용IF 조건문 활용 2. 파라미터 스니핑 재현1) 테스트 쿼리예약 내역을 조회하는 쿼리가 있다. 예약 상태(status) 컬럼에는 Non Clustered Index가 생성되어 있고, 데이터 분포도가 ..
Join 종류로는 다음과 같은 것들이 있다. Inner JoinOuter Join(left, right, full)Cross JoinCross Apply, Outer ApplySelf Join 1. Inner JoinInner Join은 두 테이블의 조인 컬럼의 값이 일치하는 행만 결합된다.따라서 Join의 결과는 두 테이블의 교집합이다. 다음과 같이 두 테이블이 있다고 하자.employee 테이블과 department 테이블을 Inner Join한다.select *from employee as einner join department as don e.dept_id = d.dept_id Inner Join은 두 테이블의 dept_id 값이 일치하는 행만 결합되므로, Join의 결과는 다음과 같다. 2...
MS-SQL에서 지원하는 조인 방식에는 크게 3가지가 있다.중첩 반복(Nested Loops)정렬 병합(Sort Merge)해시 매치(Hash Match) 1. Nested Loops Join1) 의미선행 테이블의 결과 집합을 한 건씩 후행 테이블에 조인하고 이를 반복하여 최종 결과 집합을 만들어내는 조인 방식. 2) 특징선행적 선행 테이블의 처리 범위가 전체 일의 양을 결정, 즉 선행 테이블의 결과 집합 건 수만큼 조인이 반복된다.랜덤 액세스조인 키(A.KEY=B.KEY)로 선행 테이블에서 후행 테이블에 액세스할 때 랜덤 I/O가 발생한다.연결고리의 중요성선행 테이블의 처리 row를 가지고 후행 테이블의 인덱스 페이지를 액세스하기 때문에, 후행 테이블의 인덱스 유무가 중요하다.다른 방식에 비해 메모리..