SQL Server/SQL Server Tip 662

In-Memory 최적화 테이블을 사용하여 임시 테이블 및 테이블 변수 성능 향상

In-Memory 최적화 테이블을 사용하여 임시 테이블 및 테이블 변수 성능 향상 Version : SQL Server 2014, 2016 SQL Server tempdb는 임시 테이블, 테이블 변수, 정렬, 중간값 저장 등에 사용되며 여러 병목 구간 중 하나 이다. Tempdb 경합 확인 및 해결 (Tempdb Contention) : http://sqlmvp.kr/140194260164 2014부터 도입된 In-Memory 기술은 OLTP 환경에서 메모리 기술을 사용하여 워크로드의 성능을 향상 시켰다. 임시 테이블 및 테이블 변수 또한 In-Memory 테이블을 사용하여 성능을 개선 할 수 있다. 기존의 전통적인 tempdb 기반의 테이블 유형은 아래와 같은 방법으로 생성한다. CREATE TYPE ..

SQL Server 2016 Tempdb 환경 설정

SQL Server 2016 Tempdb 환경 설정 Version : SQL Server 2016 SQL Server 2016에서는 tempdb 설정에 대해 사용자 편리하게 다양한 속성을 구성할 수 있도록 기능이 확장 되었다. 이번 기능은 DB의 성능에 대한 부분보다 사용자 편리성에 초점이 맞추어진 기능으로 변경된 기능에 대해서 설명한다. (이미 많은 DBA들은 예전 부터 tempdb에 대한 기본 값을 직접 수정하여 사용 하였다.) 아래 그림은 tempdb의 기본 옵션 및 설정 화면을 보여주는 것으로 SQL Server 2016 CTP3에 적용된 화면이다. 데이터베이스 엔진 구성 단계에서 tempdb 설정 전용탭이 워크플로우 단계에 추가 되었다. 구성 옵션 Number of file : 기본설정 값 8 ..

SQL Server 2016 향상된 즉시 파일 초기화

SQL Server 2016 향상된 즉시 파일 초기화 Version : SQL Server 2016 SQL Server는 데이터베이스 파일을 생성하거나 파일 크기가 증가할 때 파일을 0으로 초기화 하는 작업이(file initialization) 진행된다. 이때 오버헤드가 발생하기 때문에 사전에 미리 파일 크기를 증가시켜 놓거나 스토리지 성능에 따라 작은 크기로 계속해서 증가시키는 등의 방법을 사용하기도 한다. SQL Server 2005부터는 즉시 파일 초기화 기능을 제공되었다. 기존 삭제된 데이터 파일을 0으로 채우지 않고 그 위에 덮어씀으로써 운영체제에서 초기화 과정을 거치지 않았다. 하지만 즉시 초기화 작업을 하기 위해서는 SQL Server 계정이 윈도우의 Administrators 그룹 권한을..

SQL Server 2016 LDF 생성 또는 증가 시 변경된 스탬프 패턴

SQL Server 2016 LDF 생성 또는 증가 시 변경된 스탬프 패턴 Version : SQL Server 2016 SQL Server 데이터베이스에서 로그 파일(LDF)이 생성 또는 증가하는 경우 특정 바이트(0x00) 패턴의 스탬프가 기록된다. 이 패턴은 로그블록 레이아웃의 마지막 로그마커 표시이다. SQL Server 7.0에 변경된 LDF 포맷 디자인은Sybase 데이터베이스의 2K 단위로 로그 블럭을 0(0x00)으로 섹터를 정렬하는 디자인을 따른 것으로, LDF 파일이 새로 생성되거나 확장할 경우 확장 로그에 대해 0x00 바이트 로그를 기록 한다. SQL Server 2016에서는 0x00대신 0xC0로 스탬프를 변경하였다. (2014년 이후의 Azure SQL 경우 변경된 스탬프를 사..

SQL Server 2016 Tempdb 성능 향상

SQL Server 2016 Tempdb 성능 향상 Version : SQL Server 2016 SQL Server에서 Tempdb는 성능 관점에서 매우 중요한 부분이다. 쿼리를 실행할 때 중간 값을 저장하기 위한 용도, 테이블변수, 임시 테이블, 정렬, 해쉬 등에 사용된다. Tempdb 경합 확인 및 해결 : http://sqlmvp.kr/140194260164 Tempdb 경합 : http://sqlmvp.kr/140164023333 아래 링크는 SQL Server 2012, 2014에서 권장하는 tempdb 최적화 구성 방법이다. Recommended updates and configuration options for SQL Server 2012 and SQL Server 2014 with hig..

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..

SQL Server 2016 DBCC CHECK 작업 성능 향상

SQL Server 2016 DBCC CHECK 작업 성능 향상 Version : SQL Server 2016 대부분의 SQL Server (MULTI_OBJECT_SCANNER* base) 환경에서 DBCC CHECKS* (checkdb, checktable,…) 검사를 실행하는 동안 대기(wait)를 경험하게 된다. 내부적으로 DBCC CHECKS*를 실행하면 페이지 스캔 코디네이터 디자인(MultiObjectScanner)을 사용한다. SQL Server 2016 버전부터는 DBCC 작업시 이전보다 훨씬 더 확장 할 수 있도록 내부설계를 인모메리 최적화(Hekaton) 객체에 사용되는 것과 유사한 락(lock) 디자인을 적용하여 작업 성능을 향상 시켰다. 다음 차트는 동일한 1TB 데이터베이스의 테..

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..