MS-SQL Server 118

MSSQL2008 개체 종속성 식별

비지니스에 대한 요구사항을 수용할 준비는 언제든 돼있어야 하고, 그에 대한 영향도분석에 있어서 첫번째 절차는 아마도 이런게 아닐까 생각됩니다. 요구사항 혹은 구조적인 문제로 스키마가 변경돼야 할때, 변경해야할 스키마의 종속개체들을 확인하고 종속개체들까지 같이 수정해야 합니다. 이를 위해 SQL2008에서 종속개체 확인을 위한 DMF(Dynamic Management Functions) 를 지원합니다. sys.dm_sql_referenced_entities 확인가능한 참조유형 - 스키마 바운드 또는 비스키마 바운드 엔터티 - 데이터베이스 수준 DDL 트리거 - 서버 수준 DDL 트리거 sys.dm_sql_referencing_entities 확인가능한 참조유형 - 스키마 바운드 또는 비스키마 바운드 엔터티..

MS-SQL Server 2010.11.22

Index Uniquifier 포함여부

인덱스 환경에 따라 인덱스페이지의 Uniquifier 포함여부에 대해 확인하는 테스트를 해보겠습니다. (예전 지인의 아티클을 보고 테스트했던 내용입니다.) DROP DATABASE Internal GO CREATE DATABASE Internal GO USE Internal GO /* 추적 설정 */ DBCC TRACEON (3604) -- DBCC TRACEON (2520) -- sql server 2000 DBCC TRACEON (2588) -- sql server 2008 DBCC HELP('?') DBCC HELP('page') DBCC HELP('ind') Syntax: dbcc page ( {'dbname' | dbid}, filenum, pagenum [, printopt={0|1|2|3} ..

MS-SQL Server 2010.11.22

datetime 형태 잘 사용해보기 (trimming techniques)

datetime 타입을 가지고 group by 할때 날짜만 가지고 한다거나 할 경우 일반적으로 아래와 같이 많이들 사용하셨죠... (저도 역시나... ^^) select convert(varchar(10), getdate(), 120) 블로그를 보다가 매우 간단하나 날짜별 집계를 할때 성능향상을 시켜주는 내용을 찾아서 공유드립니다. 백마디 말 보다는 바로 테스트를 진행해보도록 하겠습니다. 1. 로그 테이블를 테스트 기준으로 잡았습니다. 건수는 약 200만건입니다. select count(*) from dbo.LogTable WITH (nolock) Result> 1995925 2-1. 일반적인 방식으로 각 날짜별 플레이횟수를 수집 : CPU 시간 = 3857ms set statistics io on se..

MS-SQL Server 2010.11.19

SQL Server 2012 (Denali) Order by 절의 새로운 기능 추가

SQL Server 2005부터 row_number 함수가 제공됨으로써 오라클처럼 서브쿼리를 활용하여 게시판의 페이징 쿼리를 만들 수 있게 되었습니다. row_number를 사용할 경우, 서브쿼리를 써야하기 때문에 복잡하게 보인다는 점인데요... 이번에 SQL Server 2011부터 order by 절에 새로운 기능이 추가되어짐으로써 좀 더 간단한 쿼리로 페이징 구현이 가능하게 되어 소개드립니다. 과거 row_number를 사용한 것과 성능차이는 없는지 테스트를 통해서 슬쩍 살펴보도록 하겠습니다. --@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ --@@ 페이징 테스트할 임시 테이블 생성 create table tab01 ( col01 ..

MS-SQL Server 2010.11.15

SQL 사용자 권한 맵

SQL Server 2008에서 권한 부분을 보다가 이렇게 정리하면 좀더 이해가 편할 듯 하여 정리해 봤습니다. 한번에 정리하고 검토 없이 올린 내용이니 잘못된 내용 있으면 피드백 주시면 수정 하도록 하겠습니다. DATABASE에만 줄 수 있는 권한을 모든 DB에 주기 위해 아래의 쿼리로 만들어서 실행하면 된다. select case when b.copy = 1 then 'use ' + name + ';' else 'grant showplan to [계정명];' end from sys.sysdatabases a with(nolock) cross join (select 1 as copy union all select 2) b order by a.name, b.copy

MS-SQL Server 2009.11.25

JOB 로그의 처리 시간대별 확인하기

SQL 2005 이상에서 JOB 로그를 바탕으로 언제 시작해서 언제 끝났는지 확인하기 위한 쿼리를 만들어 봤습니다. 비는 시간 잘 찾아서 새로운 JOB을 배치할 때 사용하면 좋을 것으로 예상 합니다. ^^ -- 하루치데이터입력 declare @StartDate datetime, @EndDate datetime, @TmpDate datetime select @StartDate = '2009-11-18', @EndDate = '2009-11-19' select @TmpDate = @StartDate set nocount on if not exists(select * from tempdb.dbo.sysobjects where name like '#BaseTime%') begin create table #Bas..

MS-SQL Server 2009.11.19

SSD IO 성능 테스트 - IODrive

얼마 전 IODrive를 지엔오테크롤로지의 협찬을 받아서 일주일 동안 IO관련 테스트를 진행하였습니다. 서버용 제품으로, 벤더에서 제공하는 스펙만 본다면 기존에 테스트 했던 버텍스 또는 엠트론 보다 월등히 뛰어난 IOPS 수치를 보여주고 있습니다. 또한 특이한 것은 다른 SSD와 다르게 SATA 인터페이스가 아닌 PCI-E 인터페이스를 채택 하였습니다. 역시 서버용 제품이라, 가격은 생각보다 비쌌지만 서버에서 사용하는 엔터프라이즈 SAS디스크의 가격도 수십 만원에서 수백 만원 정도하기에, 적은 공간에 아주 많은 IOPS를 요구하는 비즈니스라면 일반 DISK를 사용하는 것 보다 적은 비용으로 구현 할 수 있을 것 입니다. 이번에 테스트한 제품은 IODrive 80GB 입니다. 스펙 상으로는 읽기, 쓰기에 ..

MS-SQL Server 2009.07.10

ROW 사이즈에 따른 업데이트 성능에 대한 고민

ROW 사이즈에 따른 업데이트 성능에 대한 고민 [하나의 Row 사이즈가 50Byte일 경우] -- 테이블생성 drop table tbl_A; create table tbl_A ( col_A int identity(1, 1) , col_B char (38) , col_C datetime ); insert into tbl_A(col_B, col_C) select '', getdate() from master.dbo.sysobjects; insert into tbl_A(col_B, col_C) select '', getdate() from tbl_A; insert into tbl_A(col_B, col_C) select '', getdate() from tbl_A; insert into tbl_A(col_B..

MS-SQL Server 2009.06.26

SQL Server 2008의 최소 로깅(Minimal Logging) 관련 고민꺼리

http://blog.ithero.co.kr/blog_post_176.aspx 위의 김정선님 블로그에 올라온 글을 보고 테스트해 봤는데… 결과가 조금 특이해서 나름 정리해 봤습니다. 복구모드 : Full, 입력은 Table Lock 사용할 경우에 기존 2005까지는 Table Lock을 걸던 걸지 않던 간에 Log 기록되는 방식이 한 건의 Row 당 하나씩의 기록이 이루어 졌습니다. 그런데 2008 부터는 Log에 기록되는 방식이 Page 단위로 데이터를 기록하고 PFS에 관련 데이터를 수정하는 방식으로 진행이 됩니다. 이렇게 진행 함으로서의 장점이라고 한다면 당연히 전체 적인 Row에 쌓이는 건수는 줄게 되고 데이터 사이즈도 약간 줄게 되는 현상은 발생 합니다. 무엇보다도 가장 큰 장점은 데이터 rol..

MS-SQL Server 2009.06.25

Peer To Peer 복제 및 운영중 알고 있으면 좋은 내용

Peer To Peer 복제에 대한 내용을 확인하다가 오류 발생에 대한 처리를 어떻게 하고 어떤 식으로 동작하는지에 대한 의문이 들어서 나름대로 테스트를 해보고 이전의 쿼리를 조금 바꾸어 좀더 쉽게 찾을 수 있도록 수정 하였습니다. select ( select cast(count(*) as varchar(100)) + ':' + sys.fn_sqlvarbasetostr(min(xact_seqno)) from MSrepl_commands with(nolock) where publisher_database_id = c.publisher_database_id and xact_seqno > a.MaxTranNo ) as '남은명령어수:처리해야할명령어' , case b.runstatus when 1 then '시..

MS-SQL Server 2009.06.25