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 임현수


티스토리 툴바