아래와 같이 SQL Server 2012 서비스팩 CTP3가 나와서 공유드립니다.

 

1. 요약
  > CTP3 에는 CU 1, CU 2의 내용이 포함되어져 있지 않습니다.
  > BI 관련 기능 추가되어지는 부분에 대한 테스트를 목적으로 하시는 분들만 설치 및 사전 테스트 진행을 목적으로 합니다.
    (Office 2013, SharePoint 2012 관련 기능)
  > 마이크로소프트에서는 서비스 환경에 대한 지원을 하지 않는 버전입니다. (절대 서비스 환경에 설치하지 마세요.)

 

2. 상세 정보

  >  Announcing Microsoft SQL Server 2012 Service Pack 1 (SP1) Community Technology Preview 3 (CTP3)

  > MICROSOFT® SQL SERVER® 2012 SERVICE PACK 1 (SP1), COMMUNITY TECHNOLOGY PREVIEW 3 (CTP3)

 

[출처]

  > SQL Server 2012 Service Pack 1 CTP3 is available - but there's a catch - (CU1, 2 링크도 있음)

 

 

저작자 표시 비영리
신고
Posted by 임현수

SQL Server 2008부터 Filtered Index가 추가 되었습니다.

Filtered Index를 사용하면서 ANSI OPTION의 영향으로 에러가 발생하는 내용이 있어 정리하였습니다.

 

결론: Filtered Index 사용 시 항상 아래 OPTION이 설정 되어 있어야 합니다.

        SET ANSI_NULLS ON

        SET ANSI_PADDING ON

        SET ANSI_WARNINGS ON

        SET ARITHABORT ON

        SET CONCAT_NULL_YIELDS_NULL ON

        SET NUMERIC_ROUNDABORT OFF

        SET QUOTED_IDENTIFIER ON

 

Ø   OPTION 별 인덱스 사용 유무

ANSI OPTION

Default Set

OPTION OFF 상수 Query

OPTION OFF  변수 Query

OPTION OFF SP

OPTION ON SP

ANSI_NULLS

ON

X

X

X

O

ANSI_PADDING

ON

X

X

X

X

ANSI_WARNINGS

ON

X

X

X

X

ARITHABORT

ON

O

O

O

O

CONCAT_NULL_YIELDS_NULL

ON

X

X

X

X

NUMERIC_ROUNDABORT

OFF

X

X

X

X

QUOTED_IDENTIFIER

ON

X

X

X

O

O

Filtered Index 인덱스 사용 가능

 

X

Filtered Index 인덱스 사용 불가

 

 


일반적으로 사용되는 SQL Server Management Studio 툴에서는 아래와 같은 옵션이 기본으로 설정 되어 있습니다.


기본 설정이 아닌 ANSI OPTION을 변경하여 발생 하는 오류에 대해 아래 테스트를 통해 확인 해보도록 하겠습니다.

테스트는 총 5가지를 진행 하였습니다.

공통 Filtered Index 사용할  있게 WHERE 조건 작성

Case1. WHERE 상수 입력

Case2. WHERE 변수 입력

Case3. SP 통해 실행

Case4. Index Hint 강제

Case5. SP 생성, 변경 시 OPTION의 영향


        /************************************************************

               테스트  환경 구성

        ************************************************************/

        USE TESTDB

        GO

 

        --@@ 테스트 테이블 생성

        IF OBJECT_ID('ttt_FilteredIndex','U') IS NOT NULL

        BEGIN

               DROP TABLE ttt_FilteredIndex

        END

 

        CREATE TABLE ttt_FilteredIndex

        (

               n8IndexSN bigint identity(1,1) not null

               , n8SeqNo bigint not null

               , TestID varchar(60) null

               , TestID2 varchar(300) null

               , ZZZZZ int null

               CONSTRAINT PK_TEST_n8IndexSN PRIMARY KEY CLUSTERED

               (

                       n8IndexSN

               )

        )

 

        --@@ 테스트 데이터 입력

        INSERT INTO ttt_FilteredIndex (n8SeqNo , TestID, TestID2)

        SELECT SalesOrderDetailID , 'taek'+ convert(varchar(100),SalesOrderDetailID ) , 'test'+ convert(varchar(100),SalesOrderDetailID )

        FROM AdventureWorks.Sales.SalesOrderDetail

 

        INSERT INTO ttt_FilteredIndex (n8SeqNo , TestID, TestID2)

        SELECT TOP 30000 SalesOrderDetailID , NULL , 'test'+ convert(varchar(100),SalesOrderDetailID )

        FROM AdventureWorks.Sales.SalesOrderDetail

 

        INSERT INTO ttt_FilteredIndex (n8SeqNo , TestID, TestID2)

        SELECT TOP 30000 SalesOrderDetailID , NULL , NULL

        FROM AdventureWorks.Sales.SalesOrderDetail

 

        INSERT INTO ttt_FilteredIndex (n8SeqNo , TestID, TestID2)

        SELECT SalesOrderDetailID , 'sssss'+ convert(varchar(100),SalesOrderDetailID ) , 'zzzzzz'+ convert(varchar(100),SalesOrderDetailID )

        FROM AdventureWorks.Sales.SalesOrderDetail

 

 

        --@@ Filtered Index 생성

        CREATE INDEX tti_FilteredIndex_FI_TestID_TestID2 ON ttt_FilteredIndex

        (

               TestID, TestID2

        )WHERE TestID IS NOT NULL

 

 

       

        CREATE PROC ttp_TestIndex

        (

               @TestID varchar(60)

               , @TestID2 varchar(300)

        )

        AS

 

        SELECT *

        FROM dbo.ttt_FilteredIndex WITH(NOLOCK)

        WHERE TestID = @TestID

        AND TestID2 = @TestID2

 

        CREATE PROC ttp_TestIndex2

        (

               @TestID varchar(60)

               , @TestID2 varchar(300)

        )

        AS

 

        SELECT *

        FROM dbo.ttt_FilteredIndex WITH(NOLOCK, INDEX = tti_FilteredIndex_FI_TestID_TestID2)

        WHERE TestID = @TestID

        AND TestID2 = @TestID2

 

 

 

        /************************************************************

               테스트 진행

        ************************************************************/

        --@@ 현재 세션의 옵션을 확인

        DBCC USEROPTIONS

        /*

        textsize       2147483647

        language       한국어

        dateformat     ymd

        datefirst      7

        statistics XML SET

        lock_timeout   -1

        quoted_identifier      SET

        arithabort     SET

        ansi_null_dflt_on      SET

        ansi_warnings  SET

        ansi_padding   SET

        ansi_nulls     SET

        concat_null_yields_null       SET

        isolation level        read committed

        */

 

        --@@ 현재 세션의 기본 옵션

        SET ANSI_NULLS ON

        SET ANSI_PADDING ON

        SET ANSI_WARNINGS ON

        SET ARITHABORT ON

        SET CONCAT_NULL_YIELDS_NULL ON

        SET NUMERIC_ROUNDABORT OFF

        SET QUOTED_IDENTIFIER ON

 

 

        --@@ 옵션을 끄고 테스트를 진행

        /*

               공통 Filtered Index 사용할 있게 WHERE 조건 작성

               Case1. WHERE 상수 입력

               Case2. WHERE 변수 입력

               Case3. SP 통해 실행

               Case4. Index Hint 강제

               Case5. SP 생성 시 OPTION의 영향

        */

 

        SET ANSI_NULLS OFF -- 인덱스 사용 불가 (SP 사용가능 )

        SET ANSI_PADDING OFF -- 인덱스 사용 불가

        --      다음 SET 옵션의 설정이 잘못되어 SELECT() 실패했습니다. 'ANSI_PADDING'. SET 옵션을 인덱싱된 /또는 계산 열에 대한 인덱스 /또는 필터링된 인덱스 /또는 쿼리 알림 /또는 XML 데이터 형식 메서드 /또는 공간 인덱스 작업과() 함께 사용할 있는지 확인하십시오.

        SET ANSI_WARNINGS OFF -- 인덱스 사용 불가

        -- 다음 SET 옵션의 설정이 잘못되어 SELECT() 실패했습니다. 'ANSI_WARNINGS'. SET 옵션을 인덱싱된 /또는 계산 열에 대한 인덱스 /또는 필터링된 인덱스 /또는 쿼리 알림 /또는 XML 데이터 형식 메서드 /또는 공간 인덱스 작업과() 함께 사용할 있는지 확인하십시오.

        SET ARITHABORT OFF -- 영향 없음

        SET CONCAT_NULL_YIELDS_NULL OFF       -- 인덱스 사용 불가

        -- 다음 SET 옵션의 설정이 잘못되어 SELECT() 실패했습니다. 'CONCAT_NULL_YIELDS_NULL'. SET 옵션을 인덱싱된 /또는 계산 열에 대한 인덱스 /또는 필터링된 인덱스 /또는 쿼리 알림 /또는 XML 데이터 형식 메서드 /또는 공간 인덱스 작업과() 함께 사용할 있는지 확인하십시오.

        SET NUMERIC_ROUNDABORT ON  -- 인덱스 사용 불가

        -- 다음 SET 옵션의 설정이 잘못되어 SELECT() 실패했습니다. 'NUMERIC_ROUNDABORT'. SET 옵션을 인덱싱된 /또는 계산 열에 대한 인덱스 /또는 필터링된 인덱스 /또는 쿼리 알림 /또는 XML 데이터 형식 메서드 /또는 공간 인덱스 작업과() 함께 사용할 있는지 확인하십시오.

        SET QUOTED_IDENTIFIER OFF --인덱스 사용 불가 (SP 사용가능 )

 

       

        --@@           일반적인 쿼리

        SELECT *

        FROM dbo.ttt_FilteredIndex WITH(NOLOCK)

        WHERE TestID = 'sssss111789'

        AND TestID2 = 'zzzzzz111789'

        GO

 

        DECLARE @TestID varchar(60)  = 'sssss111789'

        DECLARE @TestID2 varchar(300)  = 'zzzzzz111789'

 

        SELECT *

        FROM dbo.ttt_FilteredIndex WITH(NOLOCK)

        WHERE TestID = @TestID

        AND TestID2 = @TestID2

        GO

 

        DECLARE @TestID varchar(60)  = 'sssss111789'

        DECLARE @TestID2 varchar(300)  = 'zzzzzz111789'

 

        EXEC dbo.ttp_TestIndex @TestID, @TestID2

        GO

 

        --@@           Index Hint 강제

        SELECT *

        FROM dbo.ttt_FilteredIndex WITH(NOLOCK, INDEX = tti_FilteredIndex_FI_TestID_TestID2)

        WHERE TestID = 'sssss111789'

        AND TestID2 = 'zzzzzz111789'

        GO

 

        DECLARE @TestID varchar(60)  = 'sssss111789'

        DECLARE @TestID2 varchar(300)  = 'zzzzzz111789'

 

        SELECT *

        FROM dbo.ttt_FilteredIndex WITH(NOLOCK, INDEX = tti_FilteredIndex_FI_TestID_TestID2)

        WHERE TestID = @TestID

        AND TestID2 = @TestID2

        GO

 

 

        DECLARE @TestID varchar(60)  = 'sssss111789'

        DECLARE @TestID2 varchar(300)  = 'zzzzzz111789'

 

        EXEC dbo.ttp_TestIndex2 @TestID, @TestID2

        GO

 

 

        --@@ SP 가능한 경우에 대한 테스트

        /*

               오류 발생 상황이 모두 동일하기 때문에 옵션 1개에 대해서만 테스트를 진행

        */

 

        --@@ 옵션 ON 설정 SP 생성

        SET QUOTED_IDENTIFIER ON

        GO

 

        ALTER PROC ttp_TestIndex2

        (

               @TestID varchar(60)

               , @TestID2 varchar(300)

        )

        AS

 

        SELECT *

        FROM dbo.ttt_FilteredIndex WITH(NOLOCK, INDEX = tti_FilteredIndex_FI_TestID_TestID2)

        WHERE TestID = @TestID

        AND TestID2 = @TestID2

       

        --@@ 옵션 OFF SP 실행

        SET QUOTED_IDENTIFIER OFF

        GO

 

        DECLARE @TestID varchar(60)  = 'sssss111789'

        DECLARE @TestID2 varchar(300)  = 'zzzzzz111789'

 

        EXEC dbo.ttp_TestIndex2 @TestID, @TestID2

        GO

 

        --@@ 정상 출력

 

 

        --@@ 옵션 OFF SP 생성

        SET QUOTED_IDENTIFIER OFF

        GO

 

        ALTER PROC ttp_TestIndex2

        (

               @TestID varchar(60)

               , @TestID2 varchar(300)

        )

        AS

 

        SELECT *

        FROM dbo.ttt_FilteredIndex WITH(NOLOCK, INDEX = tti_FilteredIndex_FI_TestID_TestID2)

        WHERE TestID = @TestID

        AND TestID2 = @TestID2

       

 

        --@@ 옵션 OFF SP 실행

        SET QUOTED_IDENTIFIER OFF

        GO

 

        DECLARE @TestID varchar(60)  = 'sssss111789'

        DECLARE @TestID2 varchar(300)  = 'zzzzzz111789'

 

        EXEC dbo.ttp_TestIndex2 @TestID, @TestID2

        GO

 

        /* 에러 발생

        다음 SET 옵션의 설정이 잘못되어 SELECT() 실패했습니다. 'QUOTED_IDENTIFIER'. SET 옵션을 인덱싱된 /또는 계산 열에 대한 인덱스 /또는 필터링된 인덱스 /또는 쿼리 알림 /또는 XML 데이터 형식 메서드 /또는 공간 인덱스 작업과() 함께 사용할 있는지 확인하십시오.

        */

 

 

        --@@ 옵션 ON SP 실행

        SET QUOTED_IDENTIFIER ON

        GO

 

        DECLARE @TestID varchar(60)  = 'sssss111789'

        DECLARE @TestID2 varchar(300)  = 'zzzzzz111789'

 

        EXEC dbo.ttp_TestIndex2 @TestID, @TestID2

        GO

 

        /* 에러 발생

        다음 SET 옵션의 설정이 잘못되어 SELECT() 실패했습니다. 'QUOTED_IDENTIFIER'. SET 옵션을 인덱싱된 /또는 계산 열에 대한 인덱스 /또는 필터링된 인덱스 /또는 쿼리 알림 /또는 XML 데이터 형식 메서드 /또는 공간 인덱스 작업과() 함께 사용할 있는지 확인하십시오.

        */

 

 


 Ø  Query 정상 동작 시 Plan 정보

 


Ø  Option 수정 후 Plan



신고
Posted by TaekSu

SQL Server 2012 메모리 관리 부분에서 변경된 내용이 있어 간략히 정리하여 공유드립니다.

 

1. Memory Manager surface area changes in SQL Server 2012

1-1. 요약

    - 멀티페이지 관리 주체가 변경됨.

    - 메모리 관련 모니터링 항목의 기준 통일 (kb 단위)

    - NUMA 노드 메모리 관리나 추적이 좋아짐.

    - DMV 변경 사항 (원문 참고)

 

1-2. SQL Server 2008과 2012의 아키텍쳐 변경

         

 

2. Memory Manager Configuration changes in SQL Server 2012

2-1. 요약

    - Max server memory : 해당 항목이 관리하는 설정 범위가 변경됨

 

    - awe_enabled 옵션 제거

 

출처. 제목에 원본글 링크되어 있음.

 

저작자 표시 비영리
신고
Posted by 임현수

아래와 같이 SQL Server 2008에 대한 Cumulative Updates가 나와서 공유드립니다.

1. Cumulative Update #11 for SQL Server 2008 Service Pack 2

   > The build number is 10.00.4333

   > Event ID 322 오류 수정

 

2. Cumulative Update #6 for SQL Server 2008 Service Pack 3

  > The build number is 10.00.5788

  > Event ID 322 오류 수정 

  > 쿼리가 병렬처리로 수행되어지는 경우 잘못된 결과를 반환될 수 있는 부분 수정

  > SQL Server가 응답을 중지하고 에러("Non-yielding Scheduler")를 기록하는 부분 수정

  > 등등...

 

출처. July 2012 : Cumulative Updates for SQL Server 2008 are available

저작자 표시 비영리
신고
Posted by 임현수


티스토리 툴바