SQL Server 123

SQL Server가 논리 및 물리 프로세서를 결정하는 방법

SQL Server가 논리 및 물리 프로세서를 결정하는 방법 Version : SQL Server SQL Server는 하드웨어 레이아웃 정보를 바탕으로 NUMA 노드를 구성한다. SQL Server 2016 부터는 레이아웃 정보를 바탕으로 자동으로 NUMA 노드를 구성을 한다.· SQL Server 2016 Automatic Soft NUMA : http://sqlmvp.kr/220806805474그렇다면 SQL Server가 Native(bare metal) 또는 VM 환경과 같이 가상화 환경에서 구성된다면 어떻게 노드를 구성할까. 이 과정의 핵심은getlogicalprocessorinformation (windows API) API이며 논리적으로는 bare metal과 VM 기반이 동일하다. VM(..

SQL Server 2016 향상된 업데이트 스케줄링 알고리즘

SQL Server 2016 향상된 업데이트 스케줄링 알고리즘 Version : SQL Server 2016, Azure SQL Server SQL Server 2016에서는 업데이트 스케줄링에 대한 알고리즘이 향상되었다. 기존에는 큰 CPU 퀀텀 작업자(Large CPU Quantum)와 작은 작업자(Short CPU Quantum) 사이에서 스케줄링에 의해 자원 액세스에 대한 불균형이 발생할 수 있었다. 이 테스트는 SQL Server 2012 및 2014에서 백분위(percentile) 스케줄링 기반의 알고리즘에서 발견되었다. 다음 예제를 보면 작업자1(W1)은 읽기 및 인메모리 데이터베이스 페이지의 미리 읽기 등의 큰 작업을 하고 작업자2(W2)는 짧은 작업을 한다. 예를 들어 작업자1은 버퍼풀에..

SQL Server Job Agent는 몇 개까지 실행이 가능할까?

SQL Server Job Agent는 몇 개까지 실행이 가능할까? Version : SQL Server 2005, 2008, 2008R2, 2012, 2014, 2016 SQL Server Job Agent는 몇개까지 실행이 가능할까? SQL Server Job Agent실행할 수 있는 제한범위를 초과하면 다음과 같은 에러를 나타낸다. SQLServerAgent Error: Request to run job Job_id (from User distributor_admin) refused because the job is already running from a request by User distributor_admin. Changed database context to 'db_name'. (Micro..

확장이벤트 사용시 주의사항

확장이벤트 사용시 주의사항 Version : SQL Server 2012, 2014, 2016 SQL Serve Extended Event (xevent, 확장이벤트)는 다양한 이슈 및 성능을 해결하기 위한 매우 좋은 도구이다. 하지만 확장이벤트는 사용방법에 따라 오버헤드가 발생하기 때문에 주의하여야 한다. 아래 사례는 Microsoft CSS SQL Server Engineers 공식 블로그에 게시된 내용으로 고객 사례를 바탕으로 주의점을 설명하였다. 자세한 내용은 원문을 참고 한다. Not every extended event is suited for all situations : https://blogs.msdn.microsoft.com/psssql/2016/02/24/not-every-extend..

Unix(Linux) timestamp(bigint) 형식을 datetime 으로 변경하기

Unix(Linux) timestamp(bigint) 형식을 datetime 으로 변경하기 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014, 2016 데이터를 운용하다 보면 시간(날짜)와 관련해서 다양한 데이터 형식 사용된다. 이번 포스트는 유닉스(리눅스)에서 전달받은 timestamp 형식을 SQL Server에서 datetime 형식으로 변경하는 방법에 대해서 알아본다. Timestamp 값은 1700-01-01 00:00:00부터 시작하는 밀리세컨드(ms)값이다. dateadd() 함수를 사용하여 간단히 해결 할 수 있다. Dateadd() 함수는 int 형식을 지원하므로 ms -> s로 변경하기 위해 timestamp/1000으로 계산해야 한다. dec..

Query Rule Off를 사용한 SQL Server 옵티마이저 비활성화

Query Rule Off를 사용한 SQL Server 옵티마이저 비활성화 Version : SQL Server 2012, 2014, 2016 SQL Server는 쿼리를 실행 할 때 다양한 비용을 계산하여 최적의 계획을 생성하고 사용한다. 여러 사용 가능한 실행 계획 중에 비용이 가장 적게 드는 하나의 실행 계획을 선택하는 프로세스를 최적화라 한다. 쿼리 처리에 대한 아키텍처는 아래 링크를 참고 한다. SQL Server 쿼리 처리 아키텍처 : http://sqlmvp.kr/140188321707 SQL Server에서 쿼리를 실행 할 때 옵티마이저가 최적의 실행 계획을 만들어 사용할 수도 있지만 쿼리를 튜닝하는 과정에서 옵티마이저의 최적화를 사용하지 않도록 비활성화 할 수 있다. 문서화 되지 않은 Q..

시스템 관리자 권한이 없는 특정 프로그램에서 Trace Flag 사용하기

시스템 관리자 권한이 없는 특정 프로그램에서 Trace Flag 사용하기 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014, 2016 관리자 권한이 없는 계정을 사용하는 특정 어플리케이션이 실행될 때 예약된 추적 플래그를 실행하는 방법에 대해서 알아본다. 유사한 케이스로 프로파일러 사용법도 있다. 비관리자 계정으로 프로파일러 사용하기 : http://sqlmvp.kr/220322107960 시나리오는 다음과 같다. 특정 시스템에 추적 플래그를 설정 해야 한다. 하지만 서버에 추적 플래그를 설정하게 되면 다른 어플리케이션에 영향이 있다. 따라서 해당 어플리케이션이 실행될 때 추적플래그를 실행하고 싶다. 그런데 해당 어플리케이션을 사용하는 계정은 관리자 권한이 없다..

In-Memory OLTP 환경에서 체크포인트 작업과 디스크 부족 경고

In-Memory OLTP 환경에서 체크포인트 작업과 디스크 부족 경고 Version : SQL Server 2014, 2016 SQL Server 2014 버전부터 제공되는 인메모리 OLTP 기능을 사용하는 동안에도 여전히 충돌이나 재시작시 복구 시간을 줄일수 있는 방법이 필요하다. 디스크기반의 테이블 경우 체크포인트가 발생할때 디스크에 기록되지 않은 더티페이지가 디스크에 기록(플러시) 된다. 인메모리 OLTP의 경우에도 별도의 체크포인트 파일 세트가 있으며 체크포인트 파일은 MEMORY_OPTIMIZED_DATA 파일 그룹을 생성할 때 지정한 디렉토리에 생성된다. 인메모리 테이블에서 체크포인트시 디스크가 부족할 경우 데이터베이스는 온라인 상태로 유지되지만 아래와 같은 오류메시지가 나타난다. 2015-..

Spool 연산자와 추적 플래그 8690

Spool 연산자와 추적 플래그 8690 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014, 2016 쿼리 실행계획을 확인하다 보면 스풀(spool) 연산자(인덱스 스풀 또는 테이블 스풀)를 볼 수 있다. 스풀 연산자는 중간 결과를 저장하기 때문에 SQL의 다시 스캔 하거나, 또는 반복 사용을 위해 다시 계산할 필요가 없도록하여 쿼리 성능을 개선하는데 도움이 된다. 스풀 테이블은 tempdb 데이터베이스 저장되어 쿼리 사용 기간 중에만 존재한다. 예를 들어 Nested Loops 연산자로 연산자를 다시 수행하지만 다시 바인딩할 필요가 없을 경우 입력 사항을 다시 검색하는 대신 스풀된 데이터를 사용한다. 스풀 실행 계획은 아래 그림과 같은 아이콘으로 표시 된다. ..

.NET 4.6.1에 변경된 Multisubnet 기본 수신기 동작

.NET 4.6.1에 변경된 Multisubnet 기본 수신기 동작 Version : SQL Server 2012, 2014, 2016 SQL Server에서 AlwaysOn을 구성하여 사용할 때 리스너는 여러 개의 IP 주소를 감지하여 가용성 그룹에 정의되어 있는 IP주소에 연결을 시도하는데 간헐적으로 연결시간 초과가 발생할 수 있다. SQL 클라이언트의 기본 동작은 DNS에서 반환된 모든 IP 주소에 연결을 시도하는데 DNS 구성에 의존하기 때문에 몇 가지 문제가 발생할 수 있다. 가장 빈번하게 발생하는 문제가 정확하지 않은 IP 반환 또는 온라인되어 있지 않은 IP 반환이다. 기본적으로 TCP 연결 시도에 대한 기본 제한시간은 21초이며 IP 주소가 온라인 상태가 아닌 경우 다음 IP를 시도하기까지..