본문 바로가기

SQL Server/SQL Server Tip & Tech

(58)
INSERT.. SELECT 문에서 대상 테이블에 직접 INSERT 되지 않은 컬럼을 OUTPUT INTO 문으로 담기 던전스트라이커 OBT가 5일 앞으로 다가왔습니다. 개발 기간의 여유도 있었고 함께 작업하는 동료들이 있어 드래곤네스트 때만큼 힘들지 않네요. ^^ 온라인게임 오픈은 인생에서 두 번 할 짓이 못된다고 생각했는데, 여럿이 하니 그렇지도 않은 것 같습니다. 다만, 오픈 직후 찾아올 여러가지 사고와 장애 처리에 대한 압박은 여전합니다. 좀 더 부지런했다면 예상할 수 있는 여러 상황에 대응할 스크립트 들을 많이 만들어 놨을텐데, 그러질 못했다는게 아쉽군요. (주절 주절 주절~) 요 며칠 SSB의 큐 활성화 SP를 만지작 거렸는데, 그 과정에서 알게된 팁 하나를 공유할까 합니다. (별건 아니지만...) 작업하다 보니 이런 상황이 생겼습니다. - S 테이블에는 (a, b) 컬럼이 있습니다. a b 10 100 20 ..
테이블의 파일 그룹 변경하기 오늘은 테이블의 파일 그룹을 변경하는 얘기를 해볼까 합니다. 드래곤네스트 DB를 설계했을 때, 게임 DB의 파일 그룹은 PRIMARY, FGData, FGIndex 이렇게 3개를 사용했습니다. 각각의 파일 그룹은 아래와 같은 용도였는데요. - 힙과 클러스터드 인덱스는 FGData - 넌클러스터드 인덱스는 FGIndex - 게임 로그 테이블은 PRIMARY 다만.. 서버의 물리적 디스크 숫자가 제한되어 있어서 FGData와 FGIndex는 같은 볼륨에 있어야 했고, 게임 로그를 적재하던 PRIMARY 파일 그룹만 별도의 볼륨에 넣을 수 있었습니다. 그래서 이번 던전스트라이커 DB를 설계할 때는 파일 그룹을 나누지 않았습니다. 퍼블리셔가 제한하는 물리적 디스크 숫자의 한계는 여전할테고, 게임 로그는 서비스 ..
스칼라 사용자 정의 함수를 더 빠르게 동작하도록 하는 방법 어제 아래와 같은 제목의 글을 뉴스레터를 통해 접했습니다. 좋은 글이라 소개합니다. How to Make Scalar UDFs Run Faster http://www.sqlservercentral.com/articles/T-SQL/91724/ 위 링크를 통해 원문의 글을 읽어 보셔도 되고, 제 나름의 생각과 경험으로 각색한 아래 글을 읽어보셔도 되겠습니다. ^^ 여러분은 User Defined Function을 실무에 사용하고 계신가요? UDF가 가지는 가장 큰 이점은 "캡슐화"라고 생각합니다. 작성하는 SQL문에 반복적으로 나타나는 복잡한 구문을 하나의 기능으로 분리해 내는 것은.. 코드가 간결해지고 무결성 유지에도 도움이 되기 때문이죠. 하지만, 성능 문제가 늘 발목을 잡아 DBA 중 UDF의 사용을..
문자열 Split 하기 - 두번째 이야기 서비스 브로커를 조금 더 파야하는데 [던전 스트라이커] 2차 CBT가 코 앞이라 여유가 없군요. 각설하고 바로 오늘의 주제(?)로 넘어가겠습니다. SP에서 배열 형태의 인자를 입력 받을 때 , (comma)와 같은 구분자를 사용한 문자열로 입력 받은 후 SP안에서 테이블로 변환해 사용하는 방법이 종종 사용됩니다. 이 과정에서 UDF를 사용할 수 있는데요. 제가 사용하던 함수는 아래 포스트에서 언급한 바가 있습니다. XML을 사용하여 문자열 Split 하기 (2009/07/10 11:36) - 1 ~ 10,000 까지의 정수가 INSERT되어 있는 Tally를 참조하는 방식의 IF_Split() 함수 - 전달받은 문자열을 REPLACE() 함수를 사용하여 XML 형식으로 변경한 후 XQuery를 사용하는 ..
SSMS 에러 - Cannot show requested dialog. There is no row at position 0. 오늘 SSMS에서 데이터베이스 속성창을 띄웠는데 갑자기 아래와 같은 에러 메세지가 출력되었습니다. 어떤 이유인지 모르겠지만 master DB의 spt_values 테이블이 비워져 있었고, 그것이 원인이었습니다. SQL 서버를 기본 경로로 설치했다면 아래와 같은 경로에 u_tables.sql 파일이 있는데.. 이 스크립트 파일로 테이블을 복구할 수 있습니다. C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Install\u_tables.sql
SSMS에서 Ctrl-F, Ctrl-H 단축키가 동작하지 않을 때 어제 SSMS로 작업 중이었는데, 갑자기 Ctrl-F와 Ctrl-H 단축키가 먹통이 되었습니다. SSMS를 다시 시작해봐도 소용 없고 OS를 리부팅해도 소용 없더군요. 아.. 그 당황스러움이란.. ^^ 구글링을 조금 해보니 원인까지는 잘 모르겠지만 해결 방법은 찾을 수 있었습니다. 혹시 같은 문제를 겪고 계시다면 아래와 같이 해결할 수 있습니다. SSMS의 상단 메뉴 표시줄에서 Window 메뉴 > Reset Window Layout 클릭
Disk Partition Alignment 개요 스토리지의 성능 최적화를 위해 우리가 고려해야할 요소가 많습니다. 아마 디스크 개수, RAID Mode, Stripe Size, File Allocation Unit Size 등을 떠올릴 수 있을 겁니다. 그런데 이런 요소들 중 과소 평가되거나, 혹은 아예 고려하지 않는 것으로 "Disk Partition Alignment" 라는 부분이 있습니다. 우리말로 하면 "디스크 파티션 정렬" 정도가 되겠군요. 참고로 파티션을 정렬한다는 것은 파티션이 시작하는 시작점을 특정 값으로 설정하는 것을 의미합니다. 첫번째 의문 - 파티션은 원래 0번째 byte 지점에서 시작하는게 아닌가? 네, 아닙니다. 디스크에서 기록이 시작되는 맨 앞부분의 63 섹터 (= 31.5 KB)는 MBR - Master Boot Rec..
[SQL Sentry Plan Explorer] 쿼리 플랜을 보기좋게 보여주는 공짜 툴 SSMS에서 기본으로 제공하는 플랜 보여주는 방식도 나쁘진 않습니다만, SQL Sentry Plan Explorer를 조금 사용해보니 좋은 것 같아 소개합니다. 이 툴은 SSMS에서 저장한 플랜 파일 (*.sqlplan)을 여는 방식으로 사용할 수도 있고, 직접 SQL Server에 Query를 전달하는 방식으로도 사용할 수 있습니다. 후자의 경우 예상 계획과 실제 계획 모두를 지원하는데, 당연한 얘기지만 Actual Plan을 보는 경우에는 전달한 Query가 실제로 실행되니 주의하시기 바랍니다. 각설하고.. Query를 SQL Server에 전달하고 Actual Plan을 보는 방법은 아래의 순서와 같습니다. ^^ 1. Command Text 탭에서 Query를 작성합니다. 2. SQL Server ..