분류 전체보기 1385

DReplay 활성 세션 초과 에러

DReplay 활성 세션 초과 에러 Version : SQL Server 2012 SQL Server 2012 버전부터 Distributed Replay라는 새로운 기능이 도입 되었다. 이 기능은 SQL Server의 프로파일러와 마찬가지로 Distributed Replay를 사용하여 캡처된 추적을 업그레이드 된 테스트 환경에서 재생할 수 있다. Microsoft SQL Server Distributed Replay 기능은 여러 컴퓨터를 사용하여 추적 데이터를 생성하고 시뮬레이션을 할 수 있는 장점이 있다. 응용 프로그램 호환성 테스트, 성능 테스트 또는 용량계획을 예측하는데 Distributed Replay를 사용할 수 있다. 오늘 주제는 SQL Server 2012에 새로 도입된 SQL Server ..

저장 프로시저 내 임시 테이블 사용과 프로시저 재컴파일

저장 프로시저 내 임시 테이블 사용과 프로시저 재컴파일 Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server의 저장프로시저(Stored Procedure)는 보안이나 성능적인 측면에서 많은 이점을 제공한다. 성능적인 측면에서 가장 큰 장점은 프로시저가 처음 한번 실행 될 때 컴파일 되고 그 이후로는 컴파일 과정없이 재사용되는 것이다. 실제 저장프로시저의 컴파일(재컴파일) 비용은 매우 크므로 이 부분을 최대한 발생하지 않도록 해야 한다. 다음의 케이스는 어떤 저장프로시저가 실행 될 때 항상 재컴파일로 인하여 성능 문제가 발생했던 사례이다. 저장프로시저 안에서 사용된 임시 테이블을 ALTER 명령어를 통하여 수정하였을 때 재컴파일이 발생 한다. 다음 예제 스크..

NUMA 노드와 추척플래그 8048

NUMA 노드와 추척플래그 8048 Version : SQL Server 2008, 2008R2, 2012 SQL Server 2008 이상의 NUMA NODE 환경에서 노드당 CPU가 8개 이상 사용되는 서버에서 추적 플래그 8048이 필요한 경우를 살펴보자 이번 포스트는 CSS SQL Server Engineer 팀블로그에 게제된 내용으로 필자가 이해한 내용을 바탕으로 정리 하였으며 번역의 오류나 기술적 오류가 있음을 인지 한다. SQL Server 개발자는 메모리 사용에 따라 서로 다른 수준의 파티션 메모리를 할당하도록 선택 할 수 있다. 개발자는 글로벌, CPU, NODE, 작업 파티션 스키마를 선택 할 수 있다. SQL Server에서는 CMemPartitioned 할당을 사용한다. 이 파티션의..

온라인 인덱스 리빌드와 조각화 증가

온라인 인덱스 리빌드와 조각화 증가 Version : SQL Server 2005, 2008, 2008R2, 2012 데이터베이스를 설계하는 데 있어서 인덱스는 매우 중요하다. 처음 인덱스를 잘 설계 하더라도 운용하는 과정에서 데이터의 입력, 수정, 삭제 등으로 인하여 조각화가 발생하는 경우 성능이 저하 될 수 있다. SQL Server에서는 이러한 단편화를 제거하기 위해 인덱스 리빌드 라는 기능을 제공하고 있다. SQL Server Standard 에디션에서는 인덱스를 생성하고 다시 빌드하는 과정에서 테이블이 잠김으로 작업이 끝날 때 까지 SELECT, INSERT, UPDATE 작업이 원활하지 않을 수 있다. SQL Server Enterprise Edition을 사용할 경우 온라인 방식으로 인덱스를..

VARCHAR(MAX) and NTEXT 쿼리 성능

VARCHAR(MAX) and NTEXT 쿼리 성능 Version : SQL Server 2005, 2008, 2008R2, 2012 단일 컬럼에 크기가 큰 데이터(게시판 등)를 저장할 때 VARCHAR(MAX) 또는 NTEXT를 사용한다. varchar(max), nvarchar(max), varbinary(max)은 최대 2^31-1 바이트(약2GB)의 데이터를 저장 할 수 있으며 varchar(n), nvarchar(n), varbinary(n) 동작과 유사하여 SQL Server에서 큰 문자, 유니코드 및 이진 데이터를 보다 효율적으로 저장하고 검색 할 수 있다. . varchar(max), nvarchar(max), varbinary(max) 형식을 사용하면 이전 버전의 SQL Server에서 ..

CPU 리소스 상태에 따른 병렬 처리 제한

CPU 리소스 상태에 따른 병렬 처리 제한 Version : SQL Server 2005, 2008, 2008R2, 2012 우리는 SQL Server에서 코어가 2개 이상일 경우 병렬 처리를 수행 할 수 있다는 것은 잘 알고 있다. 그런데 동일한 쿼리이면서 병렬 실행계획까지 똑같은데 왜 실행 시간이 다를까? CPU와 병렬처리간에 어떤 상관관계가 있는지 알아 보자. 결론은 쿼리를 병렬로 컴파일 할 때 여러 스레드로 실행 된다는 보장은 없다. SQL Server는 시스템 부하에 따라 병렬로 수행하지 않도록 선택한다. 서버가 매우 바쁜 경우 불특정한 응답 시간을 나타낸다. 이번 포스트는 CSS SQL Server Engineer 팀블로그에 게제되어 있는 내용으로 필자가 읽고 이해한 내용을 바탕으로 정리 하였..

매개변수 값의 변경과 SQL 서버 성능 저하

매개변수 값의 변경과 SQL 서버 성능 저하 Version : SQL Server 2005, 2008, 2008R2, 2012 매개변수 값의 변경과 그에 따른 SQL Server의 성능문제에 대해서 살펴 본다. 해당 내용은 CSS SQL Server Engineer 팀블로그에 기재된 내용으로 원문을 참고로 하여 필자가 이해한 내용을 바탕으로 정리 하였으며 번역의 오류 및 기술적인 오류가 있을 수 있음을 미리 인지 한다. 매개변수 스니핑은 이미 많은 사용자들에게 알려져 있다. 하지만 매개변수 스니핑이 정확하지 않을 때가 있다. 예를 들어 사용자 프로시저 안에서 매개변수의 값을 변경하는 경우 SQL Server는 알 수가 없다. 따라서 프로시저가 처음에 컴파일 되면서 카디널리티를 예측한 매개변수의 값을 사용..

IN 절 사용시 예기치 못한 액세스 위반과 SQL Server 종료

IN 절 사용시 예기치 못한 액세스 위반과 SQL Server 종료 Version : SQL Server 2008, 2008R2, 2012 이번 포스트는 CSS SQL Server Engineer 팀블로그에 게제된 내용으로 SQL Server의 버그와 함께 핫픽스를 통한 해결 방법을 안내하고 있다. 필자가 원문의 글을 읽고 이해한 내용을 포스팅하는 관계로 주관적인 해석 및 번역의 오류나 기술적인 오류가 있음을 미리 인지한다. SQL Server 2008 이상의 버전에서 IN절에 큰 상수의 숫자를 사용하면 예기치 않게 SQL Server가 종료될 수 있다고 한다. 이때 오류 로그에는 어떠한 SQL 덤프가 생성되지 않는다. 대부분의 경우에는 이러한 유형의 문제를 경험하지 못 할 수 있다. 이 조건을 만족하기..

SQL 버전과 CLR (.NET Framework 버전에 따른 오류)

SQL 버전과 CLR (.NET Framework 버전에 따른 오류) Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server 2005 버전부터 CLR을 지원하고 있다. 최근 SQL Server 2012버전으로 업그레이드 후 CLR을 사용하는 시스템에서 다음과 같은 오류를 발견 할 수 있다. Msg 6544, Level 16, State 1, Line 2 CREATE ASSEMBLY for assembly '' failed because assembly '' is malformed or not a pure .NET assembly. Unverifiable PE Header/native stub. .NET 어셈블리에는 두 가지 유형이 있다. .NET 어셈블리는 ..

SWITCHOFFSET 내장함수의 잘 못된 예측 - 미리 계산한 값을 쿼리에 연결하여 최적화 하기

SWITCHOFFSET 내장함수의 잘 못된 예측 미리 계산한 값을 쿼리에 연결하여 최적화 하기 Version : SQL Server 2005, 2008, 2008R2, 2012 이번 사례는 SQL Server CSS Engineer 공식 팀블로그에 기재된 내용으로 SQL Server의 내장 함수인 SWITCHOFFSET 함수 사용으로 잘못된 예측으로 인한 성능 문제이다. [SWITCHOFFSET 함수] 저장된 표준 시간대 오프셋에서 지정된 새 표준 시간대 오프셋으로 변경된 datetimeoffset 값을 반환. CREATE TABLE dbo.test ( ColDatetimeoffset datetimeoffset ); GO INSERT INTO dbo.test VALUES ('1998-09-20 7:45:..