MS-SQL Server 118

SQL Server 2012 (Denali) 신규 기능 Sequence 소개

오라클에만 존재하던 시퀀스 오브젝트가 드디어 SQL Server 2012 버전에 추가되었습니다. 오라클로 DB를 입문했던 저로써는 매우 반가운 소식이였습니다. 그래서 가볍게 테스트 해 본 결과 공유드립니다. 1. 기본 문법 CREATE SEQUENCE [schema_name . ] sequence_name [ [ ,…®|n ] ] [ ; ] ::= { [ AS { built_in_integer_type | user-defined_integer_type } ] | START WITH | INCREMENT BY | { MINVALUE | NO MINVALUE } | { MAXVALUE | NO MAXVALUE } | { CYCLE | NO CYCLE } | { CACHE [ ] | NO CACHE } } N..

MS-SQL Server 2010.12.17

블로그의 "일간 방문자수 보여주기" 구현 사례

이 글을 작성한 목적은 일정 기간동안 컬럼의 값을 증가시키다가 일정기간마다 초기화가 필요한 경우에 활용하면 좋을 듯 하여 블로그 일간 방문자수 보여주기 기능을 사례로 들어서 테스트해 본 것입니다. 원활한 테스트를 위해서 “일간 방문자수 보여주기” 기능에 대한 정의는 아래와 같이 단순화하겠습니다. 1. 임의의 사용자가 블로그에 방문하면 일간 방문자수를 +1 증감시켜준다. 2. 날짜가 변경되면 일간 방문자수를 0으로 초기화되며, 새로 방문자가 올 경우 1로 보여준다. 3. 이전날짜의 방문자수를 따로 보여주지 않는다. 제가 생각해 본 이 방식의 장점은 아래와 같습니다. 1. 매일 0시에 대량의 업데이트를 할 필요가 없다. 2. 접근이 없는 블로그에 대해서는 불필요한 업데이트를 하지 않아도 된다. 3. 웹서비스..

MS-SQL Server 2010.12.15

자율적인 트랜잭션 (AUTONOMOUS TRANSACTION, 독립적인 트랜잭션)

어느날 개발자 분께서 트랜잭션 실패시에도 로그를 남겼으면 좋겠는데 방법이 없는지 문의를 주셨습니다. 저는 늘 답변했듯이 오라클을 사용할 경우 autonomous trasaction 처리가 가능하지만 mssql에서는 제공을 하지 않아서 안된다고 이야기드렸는데, 왠지 그 날따라 찜찜하여 찾아보니 linked server를 사용하는 방법이 있어 공유드립니다. [Autonomous Trasaction이란?] * 블록에서 자신의 작업을 수행하기 위해서 그 블록 고유의 트랜잭션을 생성하는 경우에 해당하며 그 블록의 트랜잭션의 결과가 자신을 포함하거나 호출한 트랜잭션에의 상태에 의해 영향을 받지 않는 속성을 가지는 트랜잭션을 의미한다. * 마스터 트랜잭션과는 lock, resource, commit 에 관련된 의존성..

MS-SQL Server 2010.12.09

트랜잭션 로그 읽기

트랜잭션 로그 읽기 입니다. 추적시 범위를 좁히며 접근할 수 있어 유용(?) 할 것 같네요. CREATE DATABASE [Crack_Me]; GO USE Crack_Me; GO /* 테스트테이블 생성및 데이터를 한개 입력합니다. */ CREATE TABLE [dbo].[Crack_Me_If_You_Can]( [ID] [int] PRIMARY KEY IDENTITY NOT NULL, [Insert_Date] [datetime] NOT NULL, [Some_Data] [varchar](100) NOT NULL, [Optional_Data] [varchar](50)NULL, [Life_the_Universe_and_Everything] [int] NOT NULL, ); GO INSERT INTO [Crack..

MS-SQL Server 2010.12.06

DB 서버 이전 시 체크리스트 (SQL Server 기준)

DB서버를 신규 장비로 교체하거나 2대를 1대로 합치는 작업을 종종하는데요, 자주하는 작업이 아니라서, 조금씩 놓치는 부분이 발생하게 됩니다. 팀에서 DB서버 이전시 챙겨야 하는 작업에 대해서 함께 정리해 보았습니다. 구분 항목 체크 사전 작업 SQLIOSim 테스트를 통하여 신규 장비에 물리적인 결함이 없는지 확인(신규장비로 이전시) 작업 대상서버에서 이전 작업시 수행되는 배치나 백업 작업이 있는지 확인(부하 / 잠금 등) 데이터를 이전 받는 서버의 디스크 공간은 충분한지 확인 필요 (백업본 보관도 고려 필요) 통계 시스템 등 해당서버에서 데이터를 가지고 가는 부분이 있다면 해당 담당자에게 공유 이전 준비 작업 (이전해야 할 내용 확인/이관, 신규 장비일 경우 추가 설정 내용) DTS 또는 SSIS 작..

MS-SQL Server 2010.12.03

Include Client Statistics 안내

EM 툴의 클라이언트 통계 기능 소개 드립니다. DMV나 프로필러로는 서버의 성능 부하를 확인할 수 있습니다. 네트워크 비용이나 클라이언트에서 데이터 요청 후, 결과를 받는데까지 어디서 얼만큼의 비용이 발생하였는지 확인하기 위해서 해당 기능을 활용하면 좋을 듯 합니다. 개별 실행결과를 바로 비교하여 보여주기 때문에 매우 유용하게 활용할 수 있을 것 같습니다. 메뉴는 Query 메뉴 하단에 존재하고, 버튼은 아래의 이미지에 빨강색 동그라미 친 버튼입니다. 다음에는 진짜 SQL Server 2011의 새로 나온 Contained Databases에 대해서 소개하도록 하겠습니다.

MS-SQL Server 2010.11.30

How to calculate IOPS

보통 신규장비에 대한 BMT를 진행할때 디스크IO성능을 측정하게 되는데요. 과연 이 디스크의 최대 IOPS는 얼마일까.. sqlio나 iometer와 같은 BMT Tool을 이용해 측정한 결과는 어떤 수치와 비교해야 하는걸까.. 아래는 디스크에 대한 IOPS 측정 공식입니다. iops = 1000 (ms/s) / (average read seek time (ms) + (maximum rotational latency (ms) / 2)) maximum rotational latency = 60,000 (ms/min) / rotational speed (rpm)Rotational Speed (rpm) Max Rotational Latency (ms) 4200 14.3 5400 11.1 7200 8.3 100..

MS-SQL Server 2010.11.28

교착상태 (DeadLock)

교착상태(DeadLock)은 서로 다른 두개의 작업(트랜잭션)이 리소스 잠금을 교차해서 획득하려 할 때 발생합니다. 가장 보편적인 DeadLock그림입니다. T1작업은 R1(리소스)의 잠금을 획득하고 R2를 액세스 하려 합니다. 동시에 T2 작업은 R2(리소스)의 잠금을 획득하고 R1을 액세스 하려 합니다. 이처럼 둘중 하나가 중지되지 않는 한 빼도박도 못하는 대치 상황이 바로 교착상태입니다. 이 교착상태는 데이터외에 다른 리소스들에서도 발생할수 있는데요. 자주 일어날수 있는 상황은 아니지만 충분히 가능성은 있어 보입니다. 간단히 몇가지만 설명드리자면 - 스레드 할당을 기다리는 대기작업이 어떤 리소스를 소유하고 있습니다. 불행히도 현재 모든 스레드들의 작업들이 대기하고 있는 그 리소스를 사용해야 하는 경..

MS-SQL Server 2010.11.22

Automating Performance Monitor Statistics Collection for SQL Server and Windows

여러서버를 관리하는 환경에서 불특정 몇몇서버 혹은 전체서버에 대해 성능모니터링을 해야하는 상황입니다. 윈도우의 성능모니터링을 전체서버에 배포해야 하는 상황일때,(또한 특정 성능 카운트가 추가되거나 변경돼야 하는 상황이라면..) 윈도우의 logman utility를 이용해 좀 더 수월한 작업을 할 수 있습니다. logman util은 "성능로그 및 경고" 서비스를 관리하여 이벤트추적세션로그및 성능로그를 만들고 관리합니다 성능카운트 항목이 포함된 "SQL2008BaselineCounters.config" 파일을 생성합니다. 파일은 시스템의 I/O 이슈가 적은 디스크에 위치시킵니다. "C:\PerfLogs" 에 위치시키겠습니다. (config 파일의 SQL$MSSQLSERVER2008 는 해당서버의 인스턴스명..

MS-SQL Server 2010.11.22

병렬 처리

SQLServer 옵티마이져는 최적화된 실행계획을 이끌어 내려 많은 노력을 하는데요. 이 노력의 단계중 예상실행 비용(Estimated Subtree Cost)과 cost threshold for parallelism에 설정된 비용(기본 5)과 비교해 직렬계획을 세울지 병렬계획을 세울지 선택하는 단계가 포함돼있습니다.(물론 멀티 프로세서 환경에서..) cost threshold for parallelism 설정값은 직렬로 처리하기보다 여러 스레드(CPU)를 이용해 병렬로 분산처리하는게 더 효율적이라고 판단되는 기준값입니다. 병렬처리에 사용될 스레드수는 실행계획단계가 아닌 실행바로 전에 결정이 되고, 동일한 실행계획을 실행할때마다 스레수는 다를수 있습니다. 병렬계획 임계값 기본값은 5이며 예상비용이 임계값..

MS-SQL Server 2010.11.22