SQL Server 818

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

SQL on Azure 환경에서 SQL 서버 연결 불능 문제(VNET 설정 문제)

SQL on Azure 환경에서 SQL 서버 연결 불능 문제(VNET 설정 문제) Version : SQL on Azure 온프레미스 환경의 SQL Server를 Azure 환경으로 변경할 때 최소한의 노력은 이동 작업이다. 그러나 미묘하게 주의해야할 작업이 있다. 그 중 한가지가 네트워킹 플랜이다. Azure Virtual Network(VNET)는 온프레미스 환경과 Azure 환경의 다리 역할을 하거나 격리 수준 역할을 한다. 우리는SQL Serve 가상 머신과 IIS 가상 머신을 만들는 과정에서 자주 반복된 실수를 살펴본다. 자주 실수하는 부분 중 하나가VM을 생성할때 다른 VNET에서 생성하는 것이다. 서로 다른 VNET에 생성된 VM은 VPN을 사용한 동적 게이트웨이를 사용하지 않으면 통신할 수..

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

확장이벤트 사용시 주의사항 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..

Microsoft Azure - SQL Server가 포함된 가상 컴퓨터 생성하기

Microsoft Azure SQL Server가 포함된 가상 컴퓨터 생성하기 Microsoft의 클라우드 컴퓨팅 서비스인 Azure에서 SQL Server가 포함된 가상 컴퓨터를 생성하고 SQL Server를 사용하는 방법에 대해서 알아본다. 가상 컴퓨터를 생성하기 위해서는 Azure Portal 사용자 계정이 필요하다. 포탈 접속은 아래 주소를 참고 한다. Azure Portal : https://portal.azure.com/ Azure Portal에 접속한 화면이다. 필자의 경우에는 이미 Azure에서 SQL Server가 설치된 가상 컴퓨터를 2대를 사용하고 있기 때문에 대시보드 화면에서는 이미 생성된 가상 컴퓨터를 확인할 수 있었다. SQL Server가 포함된 가성 컴퓨터를 생성하기 위해 포..

시스템 관리자 권한이 없는 특정 프로그램에서 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-..

DeadLock(교착상태) 모니터 하기

DeadLock(교착상태) 모니터 하기 DeadLock(교착상태)? 한 태스크에서 잠근 리소스를 다른 태스크에서 잠그려고 하여 둘 이상의 태스크가 서로 영구적으로 차단하는 현상. (서로 맞물린 상태의 차단) 순환 교착(cycle DeadLock) : 서로 다른 개체를 차단할 때 발생 변환 교착(Conversion DeadLock) : 같은 대상에 대해 둘 이상의 세션이 동시에 잠금을 변경하려고 할 때 발생 교착 상태를 일으킬 수 있는 리소스 잠금 : 개체, 페이지, 행, 메타데이터, 응용 프로그램 등의 리소스에 대한 잠금을 획득하려고 대기 하는 경우. 작업자 스레드 : 사용 가능한 작업자 스레드를 대기하는 태스크가 교착 상태를 일으킬 수 있음.대기 태스크가 모든 작업자 스레드를 차단하는 리소스를 소유하는..