'MS-SQL Server'에 해당되는 글 118건

  1. 2012.12.31 [펌/공유]데이터베이스 지도
  2. 2012.12.26 [소개]SQL Server 차기 버전에 포함될 신기능 소개 (Hekaton - In-Memory database engine)
  3. 2012.08.12 [펌/TIP]BACKUP시 로그를 남기지 않기 (2)
  4. 2012.08.10 User Defined Function 사용시 잘못된 실행계획 비용예측
  5. 2012.08.02 [소식]SQL Server 2008 R2 서비스팩,CU 나왔습니다. (2)
  6. 2012.07.25 [소식]SQL Server 2012 Service Pack 1 (CTP3) 나왔습니다.
  7. 2012.07.20 Filtered index 사용 시 ANSI OPTION 설정
  8. 2012.07.18 [펌/정리]SQL Server 2012 메모리 관리자 변경 관련
  9. 2012.07.18 [소식]SQL Server 2008 Cumulative Updates 나왔습니다.
  10. 2012.05.23 [소식]SQL Server 2008 SP2 & SP3에 대한 Cumulative Updates 나왔습니다.
  11. 2012.05.21 [발표자료]NDC 2012 - 활용예시를 통한 SQL Server 2012의 향상된 프로그래밍 기능 엿보기
  12. 2012.04.30 SQL Server 고가용성 이야기 (AlwaysOn Availability 데모 포함)
  13. 2012.04.24 [소식]SQL Server 2012 AlwaysOn Availability Group Failover 성능개선 핫픽스 나왔습니다.
  14. 2012.04.18 [소식]긴급 보안 공지 MS12-027가 나왔습니다.
  15. 2012.04.17 [소식]SQL Server 2012 CU1 나왔습니다.
  16. 2012.03.22 [Re-Blog]좋은 글 소개
  17. 2012.03.21 [소식]SQL Server 2008 Cumulative Updates 나왔습니다.
  18. 2012.03.19 [펌/TIP]Restore 명령어 수행에 대한 상세로그 보기
  19. 2012.03.12 [소식]SQL Server 2012 출시
  20. 2012.02.09 [소식]SQL Server 2012 세미나 및 정보 공유
  21. 2012.01.29 [펌/소식]SQL Server 2008 SP2/SP3 CU 새로 나왔습니다.
  22. 2012.01.29 [Re-Blog]블로그에 올라온 좋은 글 소개드립니다. (2012년 01월)
  23. 2012.01.14 SQL Server 2012 신규 기능 소개 - Analytic Functions
  24. 2012.01.08 [Re-Blog]블로그에 올라온 좋은 글 소개드립니다. (2011년 12월)
  25. 2011.11.17 [Re-Blog]블로그에 올라온 좋은 글 소개드립니다. (Series 7)
  26. 2011.11.14 [Re-Blog]블로그에 올라온 좋은 글 소개드립니다. (Series 6)
  27. 2011.11.13 [Re-Blog]블로그에 올라온 좋은 글 소개드립니다. (Series 5)
  28. 2011.11.13 "랜덤블로그 방문" 기능 구현 사례
  29. 2011.11.11 [Re-Blog]블로그에 올라온 좋은 글 소개드립니다. (Series 4)
  30. 2011.11.11 [펌/Tip]Msdb안에 저장된 SSIS 패키지의 암호를 잊어버렸을 때....

블로그 보다가 데이터베이스들을 카테고리별로 정리해놓은 자료가 있어 공유드립니다. (mssql은 Relational zone 중간쯤에 있습니다. ^^)


출처. Database Landscape Map - December 2012

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

가을에 진행된 PASS 2012 행사에서 소개된 신기능에 대해 소개드릴려고 합니다. 

프로젝트명 hekaton으로 불리는 신기능(인메모리 데이터베이스 엔진)이 SQL Server 차기 버전에 포함될 예정이라고 합니다.


그럼 지금까지 소개된 내용에 대해서 간략히 보도록 하겠습니다. 좀 더 자세한 내용이 궁금하신 분께서는 관련 링크를 참고해주세요.


0. Hekaton이란? (트랜잭션 처리를 빠르게 하기 위한 인메모리 데이터베이스 엔진)


1. Hekaton의 의미

   > 그리스어로 100

   > 데이터베이스를 100배 빠르게 향상시킨다는 의미 (가능한)


2. 설계 원칙

2-1. Optimize for main memory data access

   > 메인 메모리에 접근 빈도가 높은 테이블을 올려놓고 관리함. (ACID 만족시킴)

   > ACID를 보장하기 이해서 sequential IO가 발생함.

2-2. Accelerate business logic processing

   > Query와 Procedure를 컴파일하여 native code로 저장해놓아서 수행시 컴파일시간을 최적화함. (단축시킴)

2-3. Provide frictionless scale-up

   > Lock-free data structure를 사용하여 기존의 lock과 latch를 제거하여 높은 동시성을 제공

   > 하지만 데이터 일관성은 동일하게 보장

2-4. Built-in to SQL Server

   > SQL Server 차기버전에 포함된 기능

   > 프로그램 변경이 필요 없음.


3. 사용 예시

3-1. 테이블 생성

3-2. 프로시져 생성


4. 기타

   > xVelocity와 Hekaton은 둘 다 인메모리 기술이기는 하나 다른 목적을 가지고 있습니다. xVelocity의 경우 컬럼스토어, 파워피벗 등 BI/레포팅을 위한 기술이며, Hekaton의 경우 전통적인 데이터베이스 App에서 활용하기 위해서 설계된 row-based 기술입니다. (OLTP 환경에서 활용)


5. 참고 문헌

   > SQL Server vNext coming up with lot a new features|Hekaton, Polybase, PDW, and many more

   > SQL SERVER? What is Hekaton?? Simple Words Explanation

   > How Fast is Project Codenamed “Hekaton” ? It’s ‘Wicked Fast’

   > Hekaton? SQL Server’s in-memory database engine

   > Hekaton: In-Memory Transaction Processing Integrated with SQL Server

   > Breakthrough performance with in-memory technologies

   > Hekaton Query Acceleration Technology FAQs









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

SP_READERRORLOG를 사용하여 로그 확인시 빈번히 백업된 내역들 때문에 정작 중요한 정보들을 확인하기가 어려운 경우가 있습니다. 

그럴경우 TRACEFLAG 3226 을 적용하여 백업시 로그를 남기지 않게 할 수 있습니다. 백업로그가 필요한 경우에는 적용하지 않으셔도 됩니다 ^^;

※ 참고로 백업시 발생되는 오류 정보는 남습니다.

 

[TEST] TRACEFLAG 적용 전과 후를 비교하여 백업 로그가 남는지 확인 

 

USE MASTER;

GO

CREATE DATABASE BACKUPLOGTEST;

GO

BACKUP DATABASE BACKUPLOGTEST TO DISK ='D:\BACKUP1.BAK'

/*

파일2에서데이터베이스'BACKUPLOGTEST', 파일'BACKUPLOGTEST'에대해176개의페이지를처리했습니다.

파일2에서데이터베이스'BACKUPLOGTEST', 파일'BACKUPLOGTEST_log'에대해2개의페이지를처리했습니다.

BACKUP DATABASE() 178개의페이지를0.246초동안처리했습니다(5.645MB/).

*/

exec sp_readerrorlog;

 

 - 로그 확인: 정상적으로 백업로그 확인 가능함

 

 - DBCC TRACEON (3226,-1) 적용

 

USE BACKUPLOGTEST;

GO

SELECT top 1000 * INTO dbo.spt_values FROM master.dbo.spt_values;

 

DBCC TRACEON(3226,-1)

DBCC TRACESTATUS

/*

TraceFlag Status Global Session

--------- ------ ------ -------

3226      1      1      0

*/

BACKUP DATABASE BACKUPLOGTEST TO DISK ='D:\BACKUP2.BAK'

/*

파일3에서데이터베이스'BACKUPLOGTEST', 파일'BACKUPLOGTEST'에대해176개의페이지를처리했습니다.

파일3에서데이터베이스'BACKUPLOGTEST', 파일'BACKUPLOGTEST_log'에대해5개의페이지를처리했습니다.

BACKUP DATABASE() 181개의페이지를0.419초동안처리했습니다(3.364MB/).

*/

exec sp_readerrorlog

 

 - 로그 확인 : TRACEFLAG 적용 후 백업로그를 확인할 수 없음(아래 백업로그는 TRACEFLAG 적용 전 로그)

 

[출처] Suppress Backup information in Errorlog

신고
Posted by 조창원

UDF(User Defined Function) 사용시 잘못된 비용을 예측하여 실행계획을 생성하는 경우가 있어 공유 드립니다.


UDF 사용시에는 실제 실행계획 + SET STATISTICS IO ON 뿐만 아니라 예상 실행 계획 + SET STATISTICS TIME ON+ PROFILER 를 확인하여 검토하여야 할 것 같습니다.


아래는 UDF 사용에 따른 비용 확인을 테스트 한 내용입니다.

TEST 1 . SELECT 내에서 계산과 함수계산에 대한 실행계획을 비교

 --테스트용 테이블 생성

CREATE TABLE dbo.FuncTestTable(

       idx int

       ,name varchar(255)

)

GO

--데이터 입력

INSERT INTO FuncTestTable(idx,name)

       SELECT top 100000 ROW_NUMBER() OVER(ORDER BY (SELECT 1))

             ,'TESTNAME'

             FROM master..spt_values AS a

                    CROSS JOIN master..spt_values AS b;

-- 테스트 함수 생성 RETURN(입력값 * 5)

CREATE FUNCTION dbo.FuncTest5(@idx int)

       RETURNS INT

AS

BEGIN

       DECLARE @R int;

       SET @R = @idx *5;

       RETURN @R

END

 

-- CPU 사용 시간 비용 확인을 위하여 SET STATISTICS TIME ON  추가

SET STATISTICS TIME ON

SELECT MAX(dbo.FuncTest5(idx))

       FROM dbo.FuncTestTable;

SELECT MAX(5*idx)

       FROM dbo.FuncTestTable;

SET STATISTICS TIME OFF


TEST1. 결과확인

실제 실행계획 : 함수 사용시 비용이 49% 로 더 적은 비용을 사용한 것을 확인 할 수 있음

CPU Time 확인 : 실제 실행 계획과는 틀리게 CPU 를 더 소모 하였다는 것을 확인 할 수 있음

예상실행계획 : 예상실행 계획에서는 실제 실행계획에서 확인하지 못했던 UDF의 실행계획을 확인 할 수 있음


TEST 1 결론 : UDF 사용시 함수내에서 사용되는 비용이 계산 되지 않아 실제 실행계획과 함께 SET STATISTICS TIME ON 및 예상실행 계획을 통하여 확인하여야 함.


TEST 2 .함수에 SELECT 문장을 추가하여 추가된 IO 비용 및 실행계획을 확인

--IO 비용을 추가하기 위하여 SELECT 절을 추가한 함수 생성

CREATE FUNCTION dbo.FuncTest5_2(@idx int)

       RETURNS INT

AS

BEGIN

       DECLARE @R int;

       DECLARE @R2 int;

       SET @R = @idx *5;

       SELECT top 1 @R2 = idx FROM dbo.FuncTestTable;

       RETURN @R

END

 

SET STATISTICS IO ON

SET STATISTICS TIME ON

SELECT MAX(dbo.FuncTest5(idx))

       FROM dbo.FuncTestTable;

      

SELECT MAX(dbo.FuncTest5_2(idx))

       FROM dbo.FuncTestTable;

 

SELECT MAX(5*idx)

       FROM dbo.FuncTestTable;

SET STATISTICS TIME OFF

SET STATISTICS IO OFF 

TEST2. 결과확인

TEST2 실제 실행계획 : 기존 함수와 동일한 비용인 33% 로 SELECT 절에서 계산하는 비용보다 더 적은 비용을 사용하였음을 확인 할 수 있음

CPU Time 확인 :  SELECT 를 포함한 UDF 함수가 CPU 를 훨씬 많이 소모 하였다는 것을 확인 할 수 있음

 

 

IO 비용 확인 : IO 비용은 함수내에 SELECT 가 포함되어 있어 더 많이 확인 되어야 하는데 동일한 결과가 출력 (이것 역시 믿을 수 없는 결과로 확인)

프로파일러 확인 : 함수를 포함한 쿼리의 IO 비용 및 CPU 비용을 이제서야 확인 할 수 있음


예상 실행 계획 : 예상실행 계획에서는 실제 실행계획에서 확인하지 못했던 UDF의 실행계획을 확인 할 수 있음


최종 결론 .

UDF 사용시 실제 실행 계획 및 SET STATISTICS IO ON 만으로는 비용을 계산할 수 없으므로 PROFILER , 예상 실행계획 , SET STATISTICS TIME ON 을 확인하여 비용을 확인 하여야 할 것 같습니다.



신고
Posted by 조창원

아래와 같이 SQL Server 2008 R2 서비스팩, CU 나와서 공유드립니다.

 

1. SQL Server 2008 R2 서비스팩 2
   - 신규 DMV 추가 (sys.dm_db_stats_properties)
   - 집계합수, 조인, Distinct 등을 사용하는 복잡한 쿼리를 수행할 때 부정확한 결과를 받을 수 있는 이슈 개선

   - 그 외 다수

 

2. SQL Server 2008 R2 서비스팩 2 CU 1
   - Extended Events 세션을 변경, 정지하는 경우 쿼리 응답이 멈출 수 있는 이슈 개선
   - 전체백업이 진행 중 취소되어도 로그 백업이 받아질 수 있는 이슈 개선
   - 유지관리 계획 만들 때 'The connection string format is not valid' 에러 수정
   - Like, Escape 구분을 포함한 조회 구문의 성능이 저하되어지는 이슈 개선
   - 파티션 변경하는 시점에 해당 파티션 작업을 하게 되면 deadlock 발생할 수 있는 이슈 개선
   - 그 외 다수

 

3. 참고. 서비스팩/CU별 버전 정보 정리

SQL Server 2008 R2 SP1 Builds
Build Description
10.50.2500 SP1 RTM
10.50.2769 SP1 CU1
10.50.2772 SP1 CU2
10.50.2789 SP1 CU3
10.50.2796 SP1 CU4 
10.50.2806 SP1 CU5  
10.50.2811 SP1 CU6
10.50.2817 SP1 CU7  

 

SQL Server 2008 R2 SP2 Builds
Build Description
10.50.4000 SP2 RTM
10.50.4260 SP2 CU1

 

 

@@ 출처.

1. SQL Server 2008 R2 서비스팩 2 관련

   - SQL Server 2008 R2 Service Pack 2

   - SQL Server 2008 R2 SP2 Release Notes

   - List of the bugs that are fixed in SQL Server 2008 R2 Service Pack 2 CTP

 

2. SQL Server 2008 R2 서비스팩 2 CU1 관련

   - SQL Server 2008 R2 Service Pack 2 Cumulative Update 1

 

 

 

 

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

아래와 같이 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 임현수

아래와 같이 각 서비스팩별 CU가 나와서 해당 내용 공유드립니다.

 

1. Cumulative update package 10 for SQL Server 2008 Service Pack 2
   - 클라이언트 프로그램에서 attention 신호를 sql server에 보낼 때 발생하는 버그 수정 (상세 내용)

   - 에러메시지 예시> 오류: 18056, 심각도: 20, 상태: 29


2. Cumulative update package 5 for SQL Server 2008 Service Pack 3

   - CDC 활성화 상태에서 복구가 느린 문제, Agent Job 관련 이슈 등 개선


출처. Cumulative Updates available for SQL Server 2008 SP2 & SP3

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

NDC 2012 행사기간에 발표했던 자료 공유합니다. 그동안 블로깅했던 내용 중 SQL Server 2012에서 향상된 프로그래밍 기능을 간략히 정리해보았습니다.

상세 테스트 스크립트와 내용정리는 "[펌/정리]SQL Server 2012 (Denali) 신기능" 글의 링크를 통해서 보실 수 있습니다.

 

 

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

SQL Server 언플러그 세미나 - 토크쇼 때 이야기나누었던 내용 간략히 정리하여 공유드립니다.

 

이야기드리고자 했던 내용은 아래와 같습니다.

  1. 고가용성 시스템 구축시 기술에 대한 깊이 있는 검토/테스트 필요 (장단점 비교 분석)

      - 안정성을 높이기 위한 기술인데 이로 인하여 문제가 발생하면 안되겠죠.~

  2. DB 시스템보다는 서비스 측면에서의 고민 필요

 

간략히 PT와 SQL Server 2012의 고가용 기능에 대한 테스트 동영상 올립니다.

 

[SQL Server 2012 AlwaysOn Availability Group]

 

 

 

 

 

 

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

기능 테스트를 해보았는데 미러링에 비하여 약간 무거운 느낌이 있었는데 바로 핫픽스가 나왔네요.

클러스터 기반으로 동작하기 때문에 아무래도 미러링에 비해서 안정성이 높은 대신 조금 무겁다고 생각했는데

핫픽스 적용해봐야겠네요. 테스트 결과는 다음번에 공유하겠습니다.

 

자세한 내용은 아래와 문서를 참고해주세요.

   1. A hotfix that improves the performance of the "AlwaysOn Availability Group" feature in SQL Server 2012 is available for Windows Server 2008 R2

   2. Windows Hot Fix makes SQL 2012 AG’s fail over faster

 

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

MS12-027: MSCOMCTL.OCX의 취약성으로 인한 원격 코드 실행 문제

  - 영향 받는 SQL Server 버젼 : sql server 2000 sp4, 2005, 2008 일부 버젼 (참고문서)

 

심각도가 높은 항목이니 보안업데이트를 빠른 시일내에 진행하시기를 권유드리고 싶네요.

 

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

Cumulative update package 1 for SQL Server 2012 
 > Build number : 11.0.2316.0.
 > 주요 변경 사항 (OLTP 관련 버그이며 MDX, SSAS 관련 수정사항도 많이 있으니 참고 부탁드립니다.)
  - FIX: Out-of-memory error when you run SQL Server 2012 on a computer that uses NUMA
  - FIX: The secondary databases are in "unknown" state if you join the secondary replica into the AGs two times in SQL Server 2012
  - FIX: It takes a long time to restore a database in SQL Server 2008 R2 or in SQL Server 2008 or in SQL 2012
  - FIX: Low CPU spikes at a set interval even without user activity in SQL Server 2008 R2 or in SQL Server 2012

저작자 표시 비영리
신고
Posted by 임현수
1. A faster CHECKDB ? (Part I, Part II)
   > CHECKDB 느리시죠... 한번 읽어보시면 도움이 되실수도..

2. Technical Reference Guides for Designing Mission-Critical Solutions
   > 새롭게 시스템을 구성중이신 분은 참고하시면 좋을 것 같습니다.

3. Intel Xeon E5 (Sandy Bridge-EP) and SQL Server 2012 Benchmarks
   > 하드웨어 구성에 관심 있으신 분은 참고해주세요. 추가적으로 HP에서 Gen8 서버 출시되었습니다.
저작자 표시 비영리
신고
Posted by 임현수
아래와 같이 2개의 Cumulative Updates 가 나와서 공유드립니다.

1. Cumulative update package 9 for SQL Server 2008 Service Pack 2
  - DBCC CHECKDB 성능 개선(PHYSICAL_ONLY option 사용시), Merge 구문 오류, 백업 관련 오류 등 해결됨

2. Cumulative Update #4 for SQL Server 2008 Service Pack 3
  - DBCC CHECKDB 성능 개선(PHYSICAL_ONLY option 사용시), 백업 관련 오류 등 해결됨

저작자 표시 비영리
신고
Posted by 임현수
대용량 데이터베이스를 복구하는 경우 현재 어떤 작업을 진행중인지 궁금해하면서 빨리 끝나기만을 기다리던 분들이 있을 것으로 생각합니다. 저 역시 그랬구요. 하지만 아래의 옵션을 사용하면 복구 진행과정 중 현재 어느 단계를 수행중인지/어느단계가 시간이 오래걸렸는지 바로 확인이 가능합니다.

[구문]

   DBCC TRACEON (3004, 3605, -1)


    - Trace
Flag 3004 : 백업 또는 복구 수행시 어떤 작업을 진행 중인지 상세히 로그를 보여줌

    - Trace Flag 3605 : SSMS에서 쿼리 수행시 결과창이 아니라 error log에 기록 

 
그럼 간단한 복구 테스트를 통해서 옵션 사용 유무에 따라서 얼마나 차이가 나는지 보도록 하겠습니다.

[테스트]
1. 복구 (옵션 비활성화)

-- 복구 수행하기
restore database testdb_restore FROM  DISK = N'E:\testdb_simple.bak' WITH file = 1,
        move N'testdb' to N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\testdb_01.mdf',
        move N'testdb_log' to N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\testdb_log_01.ldf',
        move N'Data01' to N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\testdb_data_01.mdf',
        move N'Data01_text' to N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\testdb_data_text_01.mdf'

-- 에러로그 보기 (복구에 대한 기록은 5줄만 기록됨)
sp_readerrolog




2. 복구 (옵션 활성화)
-- Errorlog recycle
sp_cycle_errorlog

-- 옵션  활성화
DBCC TRACEON (3004, 3605, -1)

-- 복구 수행하기
restore database testdb_restore_option FROM  DISK = N'E:\testdb_simple.bak' WITH file = 1,
        move N'testdb' to N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\testdb_restore.mdf',
        move N'testdb_log' to N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\testdb_restore_log.ldf',
        move N'Data01' to N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\testdb_data_restore.mdf',
        move N'Data01_text' to N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\testdb_data_text_restore.mdf'


-- 에러로그 보기 (복구에 대한 기록은 58줄 기록됨, 옵션 빈활성화에 비하여 약 11배이상 상세로그 기록됨)
sp_readerrolog




-- 옵션 비활성화
DBCC TRACEOFF (3004, 3605, -1)


[의견]
복구 절차 진행시 어디서 시간이 많이 소요되어지는 볼 수 있어 알아두면 도움이 될 것으로 보입니다.

[출처] What Is My Restore Doing?

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

SQL Server 2012가 드디어 출시 되었습니다.

출시와 관련 글 정리해서 공유드립니다. 관심있으신 분은 참고 부탁드립니다.

1. Microsoft® SQL Server® 2012 Evaluation (평가판 다운로드)
2. Microsoft® SQL Server® 2012 기능 팩
3. SQL Server Data Tools
4. SQLAuthority News – Download Microsoft SQL Server 2012 RTM Now
5. Have You Downloaded SQL Server 2012 Evaluation Edition? Why Not?!
6. SQL Server 2012 Release Date: April 1, 2012
7. SQL Server 2012 Released to Manufacturing, Sets Performance Records, Offers Increased ROI
8. Professional SQL Server 2012 Internals and Troubleshooting
                 

저작자 표시 비영리
신고
Posted by 임현수
1. SQL Server 2012 관련 TechNet 세미나 개최 소식이 있어 공유드립니다.
   > 일시 : 2012년 2월 27일(월) 13:00 ~ 18:00
   > 장소 : 양재동 AT 센터 3층 중회의실
   > 등록 : 등록하기 URL
   > 참고
       


2. SQL Server 2012 신규 기능 테스트 환경을 MS에서 제공해주고 있어서 참고로 공유드립니다. (Virtual Labs)


저작자 표시 비영리
신고
Posted by 임현수
Cumulative Update #8 for SQL Server 2008 Service Pack 2


Cumulative Update #3 for SQL Server 2008 Service Pack 3

출처. New cumulative Updates for SQL Server 2008 SP2/SP3 are available!

저작자 표시 비영리
신고
Posted by 임현수
1. SQL Server and UTF-8 Encoding (1) -True or False
   > 검색 색인을 할 때 DB에 있는 데이터를 파일로 변환하여 검색서버로 전달할 때 고민을 많이 했던 부분이라서
      공유드립니다.
2. Increase SQL Server Error Log Files
   > 예전의 에러로그를 보고 싶은데 이미 삭제된 경우를 경험해 보신 분이라면 좋아하실 것 같네요.
3. New TPC-E Benchmark for HP DL385 G7
   > AMD의 경우 Intel에 비하여 코어 개수가 많은 구조라서 SQL Server 2012부터는 가격적인 측면에서 불리해질 것 같네요.
4. The Art of the Execution Plan
   > 재미삼아 보시면 좋을 것 같아 공유드립니다. (예술입니다. ㅎㅎㅎ)
5. Performance impact: hyperthreading for OLTP queries 
   > OLTP 쿼리 사용시 하이퍼스레딩의 효과에 대한 BMT 내용입니다. 팀 내에서도 이야기가 많았던 내용이였습니다.
     (팀에서 이야기되었던 부분은 나중에 기회가 되면 정리해서 올리도록 하겠습니다.)





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

SQL Server 2012에 신규로 추가된 Analytic Functions 중 LAG 함수 사용 사례를 보도록 하겠습니다.
조회시 데이터 레코드간에 편차를 보여주고 싶을 때 사용하시면 매우 유용한 기능입니다.

함수에 대한 간략히 설명드리고, SQL Server 2008 R2 이하 버전에서는 어떻게 쿼리 작성을 해서 사용했었는지와
함수 사용을 할 경우 성능차이가 있는지 테스트를 해보도록 하겠습니다.

[설명/문법]
1. 설명
 
    - LAG 함수란 동일한 레코드셋안에서 이전에 조회된 레코드에 포함된 값을 접근할 수 있도록 해줍니다. 
      SQL Server 2008 R2 이전 버전에서 동일한 결과를 만들기 위해서는 셀프조인을 활용해야 가능했습니다.

2.  문법 (상세내용은 온라인 도움말 참고)
    - LAG (scalar_expression [,offset] [,default]) OVER ( [partition_by_clause ] order_by_clause )

[테스트]
1. 테스트 환경 셋팅

-- 데이터베이스 생성

create database TESTDB 

use testdb
go

-- 임시 테이블 생성
-- drop table tab_01
create table Tab_01 (
    seqNo int identity(1,1)
,   compareValue int default 0);
go

create clustered index idx_Tab_01_seqNo on Tab_01 (seqNo)
go

-- 20개의 compareValue 랜덤값을 가지는 데이터 입력
insert into tab_01 (compareValue) values (rand()*1000)
go 20

-- 쿼리 성능 보기 위한 옵션 설정
set statistics io on
set statistics time on

2-1. LAG 함수 사용 (Case 1)
select
    seqNo
,   compareValue
,   lag(compareValue, 1, 0) over (order by seqNo) as LagValue
from tab_01 with (readuncommitted)
order by seqNo

-- 결과



-- 성능


-- 실행계획


2-2. 셀프 조인 사용_01 (Case 2, 순차적인 고유번호가 있는 경우)
select a.seqNo, a.CompareValue, b.CompareValue
from tab_01 a with (readuncommitted)
   
left outer join tab_01 b with (readuncommitted) on a.seqNo -1 = b.seqNo
order by a.seqNo

-- 결과


-- 성능


-- 실행계획


2-3. 셀프 조인 사용_02 (Case 3, 순차적인 고유번호가 없는 경우)
select a.seqNo, a.CompareValue, b.CompareValue
from
   
(
     select seqNo, CompareValue, rank() over (order by seqNo asc) RankNo
    
from tab_01 with (readuncommitted)
    )
a
    left outer join
   
(
     
select seqNo, CompareValue, rank() over (order by seqNo asc) RankNo
    
from tab_01 with (readuncommitted)
    )
b
    on a.RankNo -1 = b.RankNo
order by a.seqNo

-- 결과


-- 성능


-- 실행계획


3. 테스트 결과
    - 테스트 결과 IO 사용량의 차이는 아래와 같습니다. LAG 함수 사용이 이전 방식에 비하여 20배이상 성능이 좋은 것을 볼 수 있습니다.
      > Case 1. LAG 함수 사용 : 논리적인 읽기수 = 2
      > Case 2. 셀프 조인 사용_01 : 논리적인 읽기수 = 42
      > Case 3. 셀프 조인 사용_02 : 논리적인 읽기수 = 43

[의견]

    - LAG 함수를 사용하는 경우 조인을 하지 않아도 되기 때문에 읽기수 비용 절감율이 높다.
    - 다양한 활용/응용이 가능한 함수이기 때문에 참고에 적어놓은 아티클은 꼭 보시기를 권장해드리고 싶습니다.

[참고]
1. SQL Server 2012 온라인 도움말
2. SQL Server Mag - SQL Server 2012's Window Functions, Part 2 (Itzik Ben-Gan)

저작자 표시 비영리
신고
Posted by 임현수
1. SQL Server 2012 RC0 출시 소식
   > 관련 자료를 깔끔하게 정리되어 있네요. 관심 있으신 분은 참고하시면 좋을 듯 합니다.

2. 5 Tips for a Smooth SSIS Upgrade to SQL Server 2012
   > SSIS에 대해서 관심 있으신 분은 참고하시면 좋을 듯 합니다.

3. DBCC CHECKDB 성능 개선 (Physical_only 옵션 사용시)
   > SQL Server 2008R2 버전에 대한 내용입니다.



저작자 표시 비영리
신고
Posted by 임현수
1. Eighty Logical Cores of Goodness!
   > 64-Core 이상을 가진 서버를 사용하시는 경우 참고해주세요.

2.SQL Server: Clarifying The NUMA Configuration Information
   > NUMA 설정에 대한 정보 확인하기

3. New SQLOS features in SQL Server 2012 
   > 제목그대로 입니다.

추신.
   > 리블로그를 너무 몰아서 올린 점 양해 부탁드립니다. 7편으로 시리즈는 마치고 이후부터는 1~2주에 한번씩 올릴 예정입니다.
저작자 표시 비영리
신고
Posted by 임현수

1. SQLAuthority News - SafePeak Releases a Major Update: SafePeak version 2.1 for SQL Server Performance Acceleration
   > SQL Server 성능 향상에 도움을 주는 툴 소개글입니다. 기회가 되면 한번 사용해보고 싶네요.

2. Create Views in Another Database
   > 하나의 인스턴스 내에서 존재하는 데이터베이스에 대해서 각각 명령어를 날리고 싶을 때 활용 가능한 팁입니다.

3. What’s Wrong about Page Life Expectancy >= 300?
   > Page Life Expectancy 기준 수치가 10년간 동일한데, 이제 고쳐야 하지 않을까라고 의문을 제기하네요.
   > 여러분의 생각은 어떠신가요?


저작자 표시 비영리
신고
Posted by 임현수
1. How do I open the firewall port for SQL Server on Windows Server 2008?
   > SQL Server의 각 기능별로 사용하는 포트에 대한 설명입니다.

2. Implementing Log Shipping for Many Databases
   > 다수 데이터베이스에 대한 로그전달을 구현 사례입니다. 필요하신 분은 참고하시면 좋을 듯 합니다.

3. A Performance Troubleshooting Methodology for SQL Server
   > 관심 있으신 분은 참고하시면 좋을 듯 합니다.







저작자 표시 비영리
신고
Posted by 임현수
블로그 사이트에 가면 종종 볼 수 있는 기능인 "랜덤블로그 방문"을 DB에서 구현했던 사례를 소개드립니다.
기능에 대해서 설명드리면 "랜던길드" 버튼을 클릭하면 임의로 블로그를 선택해주는 것입니다.
해당 기능 중 여기서 테스트할 내용은 랜덤하게 블로그의 번호를 찾는 부분에 대해서 이야기하려고 합니다.
구현 방식에는 여러가지가 있겠지만 많이 사용하는 2가지 방식에 대한 테스트를 진행해보고 얼마나 성능 차이가
나는지에 대해서 보도록 하겠습니다.

1. 테스트 환경 구성

-- 테이

create table tbl_Blog (

        SeqNo          int            --

,       name           varchar(1000)  --

,       Contents       varchar(6000)  --

)

 

--

create clustered index idx_Article_seqNo on tbl_Blog (seqNo)

 

-- (6400)

insert into tbl_Blog (SeqNo, name, Contents)

select

        seqNo

,       replicate(seqNo, 50) as title

,       replicate(seqNo, 500) as contents

from (

        select

               row_number() over(order by a.name) as [seqNo]

        from sys.objects a

               cross join sys.objects b ) x

order by seqNo

 

-- 

set statistics io on

2. 테스트
2-1. 방법 1 : newid() 함수 사용

select top 1

        SeqNo

,       name

,       Contents

from (

        select

               seqNo

        ,       name

        ,       Contents

        ,       newid() as RandomID

        from tbl_Blog with (readuncommitted) ) x

order by RandomID


[결과]
-- 반복 실행해보시면 블로그번호가 계속 변경되어지는 것을 볼 수 있습니다.


-- 논리적인 읽기 수가 2048페이지로 높은 것을 볼 수 있습니다.


2-2. 방법 2 : rand() 함수 사용

declare @MaxSeqNo int

 

select top 1

        @MaxSeqNo = seqNo

from tbl_Blog with (readuncommitted)

order by SeqNo desc

 

select top 1

        seqNo

,       name

,       Contents

from tbl_Blog with (readuncommitted)

where SeqNo <= rand() *@MaxSeqNo

order by SeqNo desc


[결과]
-- 반복 실행해보시면 블로그번호가 계속 변경되어지는 것을 볼 수 있습니다.


-- 논리적인 읽기 수가 총 6으로 방법1에 비하여 매우 낮음을 볼 수 있습니다.


3. 의견
   > 조금만 응용하면 다양한 서비스에 활용이 가능합니다. (로터리 아이템 구현 등 랜덤이 들어가는 기능들...)
   > 새로운 기능 구현을 고려할 때 반드시 성능 부하가 높지 않을지 확인/검토하시기를 권장드립니다.












저작자 표시 비영리
신고
Posted by 임현수
1. Consider Enabling Trace Flag 1117 on Dynamics AX SQL Server
   > tempdb의 데이터 파일들이 동일하게 자동증감되어질 수 있도록 해주는 설정에 대한 이야기입니다.

2. Denali: Note the small but important things in SSIS
   > SSIS의 변경사항에 대한 소개입니다.

3. A Sysadmin’s Guide to Microsoft SQL Server Memory
   > 메모리 관련 아티클입니다.
저작자 표시 비영리
신고
Posted by 임현수

MSDB에 저장한 SSIS 패키지의 사용자 암호를 잊어버린 경우 쉽게 확인이 가능한 방법이 있어 공유드립니다.
이렇게 쉽게 확인이 가능하다는 것을 보니 살짝 걱정이 되기도 하네요.

그럼 진짜 가능한지 테스트를 진행해보도록 하겠습니다.

1. SSIS를 msdb에 저장하고, Job으로 등록합니다.
  



2.  Job 실행구문을 조회하면 암호를 그대로 볼 수 있습니다. (노랑색으로 표기한 부분이 암호)
SELECT sjs.command
FROM msdb.dbo.sysjobs sj    
     JOIN msdb.dbo.sysjobsteps sjs ON sj.job_id = sjs.job_id   
WHERE sj.name = 'TEST_SSIS'



3. 의견
   > 중요한 SSIS에 대해서 보안을 강화하기 위해서는 암호 방식을 사용하지 말아야 할 것 같네요.
   > SQL Server 2012의 SSIS는 처음 만들어보았는데, 많이 바뀌었네요. (확대기능도 있고, msdb 저장 메뉴도 변경됨)

출처. Tale of an Encrypted SSIS Package in msdb and a Lost Password

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