SQL Server 818

강제 매개변수화로 인한 성능 저하 사례

강제 매개변수화로 인한 성능 저하 사례 Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server는 쿼리 요청을 받으면 쿼리를 컴파일하고 통계 및 기타 정보를 이용하여 최적의 실행계획을 선택하여 사용한다. 쿼리 옵티마이저는 무조건 비용이 낮은 계획을 선택하지 않으며 여러 가지 상황을 고려하여 최적의 플랜을 선택 한다. SQL Server 쿼리 처리 아키텍처 : http://sqlmvp.kr/140188321707 이번 포스트는 SQL Server Premier Field Engineer Blog에 게시된 내용으로 강제 매개변수화로 인한 성능 저하의 사례를 소개하고 있다. 필자가 읽고 이해한 내용을 바탕으로 정리하였으며 번역의 오류나 기술적 오류가 있음을 미리 알..

파라메터 스니핑과 데이터 스큐

파라메터 스니핑과 데이터 스큐 Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server에서 Procedure를 호출 할 때 대부분 잘 실행 되지만 간혹 매우 느리게 실행 될 때가 있다. 이런 현상을 다음 사례를 통해서 알아 보자. 이번 포스트는 SQL Server Premier Field Engineer Blog에 게시된 내용으로 필자가 읽고 이해한 내용을 정리 하였으며 번역의 오류나 기술적 오류가 있음을 미리 알려 둔다. 자세한 내용은 원문을 참고하길 바란다. 대부분 이런 현상이 나타날 때 일반적인 상황은 파라메터 스니핑과 관계가 있다. 이 문제는 간혹 고르지 않은 데이터 분포 때문이다. 스큐된 데이터를 표시하고 있지만 파라메터 스니핑은 컴파일 타임에 알 수..

DBCC CHECKDB 버그 및 해결 방법

DBCC CHECKDB 버그 및 해결 방법 Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server는 무결성 검사를 위해 DBCC CHECKDB 명령어를 제공 한다. DBCC CHECKDB는 컬럼의 값이 열의 데이터 형식의 법적 범위 내에 유효성을 검사하여 무결성을 판단한다. 이번 포스트는 SQLskills.com의 Paul Randal 아티클을 바탕으로 필자가 이해한 내용을 정리 하였으며 번역의 오류나 기술적 오류 가능성을 미리 알려둔다. SQL Server에서 master 데이터베이스에 손상(currption)을 발견되었고 DBCC CHECKDB는 이를 수행하지 않았다. (DBCC CHECKDB 코드 버그라기보다는 데이터베이스 생성시 버그인듯 하다고 한다...

NOLOCK HINT 이해

NOLOCK HINT 이해 Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server에서 데이터를 조회할 때 NOLOCK 힌트를 사용한 적이 있는가? 또한 NOLOCK 힌트는 어떻게 동작 할까? 하나의 스테이트먼트가 아닌 세션에 대해서 NOLOCK의 옵션을 사용하고 싶다면 READUNCOMMITTED를 사용할 수 도 있다. NOLOCK의 작동법을 확인하기 위해 몇 가지 예제를 살펴보자. 이번 실습은 AdventureWorks 데이터베이스의 Person.Contact 테이블을 사용 하였다. 다음 스크립트는 ContacID가 20보다 작은 값을 모두 반환한다. Suffix 컬럼의 값이 NULL을 포함한 다양한 값이 들어 있는 것을 확인 할 수 있다. SELECT *..

인증으로부터 분리된 사용자 방지

인증으로부터 분리된 사용자 방지 Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server 관리자가 겪는 문제 중 하나가 인증 관련문제로 '고아'가 발생하는 경우이다. SQL Server에서 SQL Server 로그인을 만들 때 문제가 발생 한다. 이 작업을 수행 할 때 SQL Server는 SQL Server 로그인에 대해 고유 SID를 생성한다. 로그인을 생성한 후 해당 서버 인스턴스의 사용자 데이터베이스에서 데이터베이스 사용자를 작성하고 해당 SQL Server 로그인을 사용하여 데이터베이스 사용자를 연결 한다. 다른 SQL Server 인스턴스에 해당 사용자 데이터베이스를 복원하려고 할 때 까지는 잘 작동하다가 서버에 이전과 동일한 사용자 ID를 가진 S..

비관리자 계정으로 쿼리 계획 보기

비관리자 계정으로 쿼리 계획 보기 Version : SQL Server 2005, 2008, 2008R2, 2012 SQ Server를 운영하거나 개발 할 때 어떤 권한의 계정으로 사용하는가? 아마 대부분의 관리자는 sysadmin의 강력한 권한을 가지고 있을 것이다. 그러나 호스팅을 하여 사용하는 경우 또는 보안상 권한이 매우 제한적인 사용자일 경우 여러 가지 제약을 받게 된다. 이번 포스트는 Sysadmin이 아니거나 View Server State 권한 없을 때 쿼리 계획을 가져오는 방법을 알아 본다. 이 방법은 트위터의 #sqlhelp 해시태그에 배치되어 있다. SQL Server에서 권한이 없을 때 쿼리 계획을 확인하는 방법은 SQL Server에서 가장을 사용하는 것이다. 다음과 같은 시나리오..

SSMS 폴링 간격 구성

SSMS 폴링 간격 구성 Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server Management Studio(SSMS) 개체탐색기에서 SQL Server의 상태 및 SQL Agent의 서비스 상태를 표시한다. 이 서비스 표시에 사용되는 메커니즘에 대해서 알아 보자. 이번 포스트는 CSS SQL Server Engineer 팀 블로그에 포스트된 내용으로 필자가 읽고 이해한 내용을 정리하였으며 번역의 오류 및 기술적 오류의 가능성을 미리 알려둔다. 자세한 내용은 원문을 참고 하길 바란다. 개체탐색기의 서비스 상태 정보를 표시하는 것은 WMI 계층을 통해 제공 된다. SSMS를 실행하면 개체 탐색기 창에서 초기화 할 때 이 정보를 얻기 위해 개체 탐색기 WMI..

Deadlock 감지하여 알림하기

Deadlock 감지하여 알림하기 Version : SQL Server 2005, 2008, 2008R2, 2012 교착 상태란 둘 이상의 프로세서가 서로 남이 가진 자원을 요구하면서 양쪽 모두 작업을 수행 할 수 없이 대기 상태로 놓여지는 상태로 멀티프로그래밍이 가능한 시스템에서 일어날 수 있는 현상이다. A라는 태스크가 B라는 태스크의 종료 후에 실행되기 위해 대기 상태에 있을 때 B라는 태스크도 A의 종료 후에 실행을 종료시키는 상태에 있으면 모두 무한 대기 상태가 되며 시스템이 정지해 있는 것처럼 되어 버린다. 이 상태에서는 어느 하나를 강제로 종료하지 않으면 처리가 이루어지지 않기 때문에 이를 빨리 감지하여 해결하는 것이 매우 중요하다. 이번 포스트는 데드락 이벤트가 발생 하였을 때 이를 모니터..

Suspect_pages 테이블 이해 및 관리

Suspect_pages 테이블 이해 및 관리 Version : SQL Server 2005, 2008, 2008R2, 2012 Suspect_pages 테이블은 SQL Server 2005부터 도입되었으며 msdb 데이터베이스에 위치한다. 주의대상이 발생하였을 때 대상 페이지에 대한 정보를 유지 관리하는데 사용되며 복원이 필요한지 여부를 결정하는데 사용 된다. SQL Server 데이터베이스 엔진에서 데이터 페이지를 읽으려고 할 때 다음 오류 중 하나가 발생하면 페이지가 "주의대상"으로 간주 된다. 디스크 오류(특정 하드웨어 오류)와 같이 운영체제에서 실행되는 CRC(순환 중복 검사)로 인해 발생하는 823 오류 조각난 페이지(논리적 오류)와 같은 824 오류 데이터베이스 엔진에서 다음과 같이 정상적인..

SSRS SocketException

SSRS SocketException Version : SQL Server 2008, 2008R2, 2012 SQL Server 솔루션에 포함된 SSRS(SQL Server Reporting Service)서비스는 SQL Server의 데이터베이스의 데이터를 기반으로 보고서를 생성 및 퍼블리싱 기능을 제공한다. 이번 포스트는 CSS SQL Server Engineer에 기재된 내용으로 SQL Server 2008에서 2012로 업그레이드 후 리포팅 서비스에서 발생한 SocketException의 트러블슈팅에 관한 내용이다. 필자가 이해한 내용을 정리하였으며 번역의 오류나 기술적 오류 가능성이 있기에 원문을 참고 한다. SQL Server 2008에서 SQL Server 2012로 업그레이드를 하고 난 뒤..