전체 글 132

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

UNPIVOT 관련한 테스트 및 고민꺼리

파라미터로 넘어온 '100,122,1992,23848,5637373,8371712,1,2,3,4,5,6,7,8,9,0,121,1222,12412,42354,6574' 다음과 같은 값을 다른 테이블과 조인하기 위해서 unpivot 해야 하는 부분을 처리하기 위한 Tip 입니다. 관련 게시물은 아래 참고하세요~ (아래 쿼리의 데이터 생성 부분은 아래 링크에서 ^^) http://sqler.pe.kr/web_board/view_list.asp?id=1094&read=21112&pagec=&gotopage=&block=&part=myboard7 MSSQL 2005에서의 cross apply를 이용하는 방법과 기존 MSSQL 2000에서도 사용 가능한 방법에 대한 비교를 통해서 어떤 차이가 있는지 알아 봤습니다...

MS-SQL Server 2009.06.25

MSSQL 2008의 선택 이유와 Enterprise Edition의 사용 이유

아래는 이번에 빌링 통합 서버 장비를 MSSQL 2008의 싱크 방식 미러링으로 구성하면서 DBMS의 선택과 Edtion 선택을 할때 고려했던 내용 입니다. [SQL Server 2008 도입의 이점] 1. 성능 모니터링이 좀더 디테일한 부분까지 가능 - 기존의 2005에서 새롭게 추가된 DMV 자체로도 2000보다 월등히 운영하기 편리해진 부분이 있지만 세부적인 모니터링에는 역시나 한계가 있어서 이슈 발생시에 정확한 원인을 파악 못할 가능성이 있음 이를 해결하기 위한 기능이 2008에 추가되어 특정 쿼리에 대한 확인 및 그 이후의 변화를 추적하여 거의 완벽한 모니터링이 가능 - 성능 데이터에 대한 DW 구축이 가능함. 2. SQL Server에 의한 CPU 및 메모리 등의 서버 리소스를 자동으로 활용 ..

MS-SQL Server 2009.06.25

MSSQL 2008 설치시 오류 상황(MSXML 6.0 Parser)

2008 설치시에 오류가 발생해서 설치 로그파일 확인해 보면 아래와 같은 메세지가 있습니다. Overall summary: Final result: SQL Server를 설치하지 못했습니다. 계속하려면 실패 이유를 조사하고 문제를 해결한 다음 SQL Server를 제거하고 SQL Server 설치 프로그램을 다시 실행하십시오. Exit code (Decimal): -2068643839 Exit facility code: 1203 Exit error code: 1 Exit message: SQL Server를 설치하지 못했습니다. 계속하려면 실패 이유를 조사하고 문제를 해결한 다음 SQL Server를 제거하고 SQL Server 설치 프로그램을 다시 실행하십시오. Start time: 2009-05-19..

MS-SQL Server 2009.06.25

미러링 모니터링 성능 카운터

현재까지 어떻게 하는 것이 제일 좋은지 확인 되지 않았지만 아래 정보 정도는 확인해야 하지 않나 생각 됩니다. Log Bytes Sent/sec => LogBytesSent 초당 보낸 로그 바이트 수입니다. Log Harden Time (ms) => LogHardenTime 마지막 1초 동안 로그 블록이 디스크에 확정될 때까지 기다린 시간(밀리초)입니다. Log Send Queue KB => LogSendQueue 미러 서버로 아직 보내지 않은 로그의 총 KB 수입니다. Log Send Flow Control Time (ms) => LogSendControlTime 마지막 1초 동안 로그 스트림 메시지가 전송 흐름 제어를 기다린 시간(밀리초)입니다. 로그 데이터와 메타데이터를 미러링 파트너로 보내는 것은..

MS-SQL Server 2009.06.25

[DMV] 각 테이블에 할당된 공간과 실제 데이터와 인덱스가 차지하고 있는 공간 확인

파티션을 고려하지 못한 부분과 index_id 비교를 잘못해서 인덱스 크기 잘못 계산된 부분 재공유 합니다. 파티션을 이루는 파티션의 개수와 압축을 이용한 파티션의 개수를 같이 보여 줍니다. SQL Server 2008 Enterprise Edition이 아니면 압축 관련 부분은 주석 처리하시면 됩니다. select object_name(max(object_id)) , max(b.PartitionCnt) as 'PartitionCnt' , max(b.CompressionCnt) as 'CompressionPartitionCnt' , sum(used_page_count) * 8 as 'Total Used(KB)' , sum(reserved_page_count) * 8 as 'Total Reserved(KB..

MS-SQL DMV 2009.06.25

[DMV] 파일 그룹별 전체 크기와 할당 및 사용하고 있는 공간 확인

select a.name , b.size * 8 / 1024 as 'PhysicalSize(MB)', (b.size - sum(total_pages)) * 8 / 1024 as 'UnAllocationSize(MB)' , sum(total_pages) * 8 / 1024 as 'TotalAllocation(MB)', sum(used_pages) * 8 / 1024 as 'UsedAllocation(MB)' , sum(data_pages) * 8 / 1024 as 'DataSize(MB)', sum(total_pages - used_pages) * 8 / 1024 as 'FreeSize(MB)' from sys.filegroups a with(nolock) inner join ( select data_sp..

MS-SQL DMV 2009.06.25

[DMV] 현재 DB의 Object 중에 Buffer Pool 메모리 상에 있는 Object의 사용량

select top 20 db_name(a.database_id) as 'DBName', object_name(b.object_id, a.database_id) as 'OBJName' , b.index_id, isnull(max(c.name), 'Heap') as 'IndexName', a.page_type , left(cast(count(*) * 1.0 / max(b.used_pages) as varchar(100)), 6) as 'Ratio' , count(*) as 'BufferPageCNT', max(b.used_pages) as 'UsedPageCNT', max(b.total_pages) as 'TotalPageCNT' , sum(case when is_modified = 1 then 1 els..

MS-SQL DMV 2009.06.25