전체 글 1383

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

테이블 반환 매개변수 사용과 SQL 2012의 향상된 캐싱 기능

테이블 반환 매개변수 사용과 SQL 2012의 향상된 캐싱 기능 Version : 2008, 2008R2, 2012 테이블 반환 매개 변수는 사용자 정의 테이블 형식을 사용하여 선언 된다. 테이블 반환 매개 변수를 사용하면 임시 테이블이나 많은 매개 변수를 만들지 않고도 저장프로시저 또는 함수와 같은 T-SQL 문이나 루틴에 여러 행의 데이터를 보낼 수도 있다. 테이블 반환 매개변수는 OLE DB 및 ODBC의 매개변수 열과 유사하지만 보다 유연하고 집합 기반 작업에 사용할 수 있다. T-SQL은 입력 데이터의 복사본을 만들지 않기 위해 참조로 루틴에 테이블 반환 매개 변수를 전달한다. 테이블 반환 매개 변수를 사용하여 T-SQL 루틴을 만들고 실행 다음 모든 관리 언어의 T-SQL 코드, 관리되는 클라..

디스크 섹터 크기와 데이터베이스 성능

디스크 섹터 크기와 데이터베이스 성능 Version : SQL Server 2005, 2008, 2008R2, 2012 디스크 섹터와 데이터베이스는 어떤 관계가 있을까? 디스크 섹터와 구조에 대해서 궁금하다면 다음 링크를 참고 한다. 디스크 구성 및 종류 : http://sqlmvp.kr/140191323779 이번 포스팅의 초점은 필자가 생각하기엔 조금 오래된 내용이긴 하지만 많은 분들이 고민 하였던 내용이며 매우 중요한 이슈라 생각 한다. (아직 이 사실을 모르고 있다면 IT 소식에 관심을 가지도록 하자) 2010년쯤 세계적인 하드디스크 제조사인 씨게이트(http://www.seagate.com/)에서 포맷 방식을 변경한다고 하였다. 글을 쓰는 지금쯤이면 변경된 포맷방식이 정착되었을 시기이기도 하다...