DB/MS-SQL 32

OR 연산자 대신 IF을 사용하기

저장 프로시저내에 다음과 같은 쿼리가 있었습니다. 하지만, 특이하게도 특정한 경우에 부하가 많이 걸려서 성능이 제대로 나오지 않는 경우가 있었습니다. DECLARE @ISN INT, @parent_ISN INT SET @ISN = 123142 SELECT @parent_ISN=ISN FROM TEST_DB.dbo.test WITH (NOLOCK) WHERE 1 = 1 AND (linked_isn1 = @ISN OR linked_isn2 = @ISN) linked_isn1과 linked_isn2 각각의 컬럼에 독립적으로 인덱스가 잡혀 있었는데, 어느 때는 읽기 수가 1000이상이 나오면서 갑작스럽게 느려졌었습니다. 그래서 결국은 아래와 같이 IF문 형태로 코드를 변경하였습니다. 그랬더니, 이전과 같은 문제..

DB/MS-SQL 2009.06.06

분산 트랜잭션 설정

다음과 같이 분산 트랜잭션을 응용하여 저장 프로시저의 결과를 임시 테이블 변수에 집어 넣는 예제입니다. CREATE TABLE dbo.EMPLOYEE_SALES ( data_source VARCHAR(20) NOT NULL, employee_id VARCHAR(11) NOT NULL, last_name VARCHAR(40) NOT NULL, sales_dollars MONEY NOT NULL ); INSERT EMPLOYEE_SALES EXECUTE SOURCE.PUBS.dbo.usp_get_employee_sales DTC가 제대로 설정되어 있지 않으면, 다음과 같은 오류가 발생합니다. 연결된 서버 "SOURCE"의 OLE DB 공급자 "SQLNCLI"이(가) 메시지 "활성 중인 트랜잭션이 없습니다."..

DB/MS-SQL 2009.04.04

AWE(Address Windowing Extension)의 사용(MS-SQL 2005)

32비트 윈도우즈 운영체제는 기본적으로 32비트 주소체계를 사용하므로 4GB까지의 메모리를 사용할 수 있으나, 2GB는 운영체제를 위하여 예약되어 있고, 실제 응용 프로그램에서는 2GB까지 사용할 수 있습니다. AWE(Address Windowing Extensions)는 MS-SQL에서 4GB의 한계를 넘어서는 물리 공간을 직접 사용할 수 있도록 하는 기능으로 요즘과 같이 메모리 가격이 싸고 대용량의 메모리로의 확장이 쉬운 환경에서는 자주 접하게 되는 기능입니다. 그러나 AWE는 MS-SQL Server 2005의 Enterprise 버전과 Developer 버전에서만 지원합니다. AWE의 사용은 운영체제와도 관련이 깊은데, 윈도우즈 2003의 버전에 따라 지원하는 메모리의 크기가 달라집니다. Wind..

DB/MS-SQL 2009.03.17

Lock Pages in Memory(메모리 페이지 잠그기) 옵션 설정(MS-SQL 2005)

SQL 서버에 AWE를 사용하려면 꼭 거쳐야할 과정중의 하나입니다. MS-SQL 2005에서 메모리 페이지 잠그기(Lock Pages in Memory) 옵션은 기본적으로 OFF로 설정되어 있습니다. 이 옵션을 사용할 때의 주의할 점은, 실제 메모리 페이지를 고정시키기 때문에 과도하게 메모리를 할당하여 페이지를 잠가버리면 실체 OS에서 사용할 공간이 부족하여 OS가 심각하게 느려질 수 있다는 점입니다. 시작 메뉴에서 실행을 클릭합니다. 열기 입력란에 gpedit.msc를 입력합니다. 그룹 정책 대화 상자가 열립니다. 그룹 정책 콘솔에서 컴퓨터 구성을 확장한 다음 Windows 설정을 확장합니다. 보안 설정을 확장한 다음 로컬 정책을 확장합니다. 사용자 권한 할당 폴더를 선택합니다. 세부 정보 창에 정책이..

DB/MS-SQL 2009.03.17

분할 테이블 및 분할 인덱스

분할된 테이블이나 인덱스를 생성하기 위해서는 먼저 파티션 함수와 파티션 구성표를 만들어야 합니다. 파티션 함수는 분할 열이라고 하는 특정 열의 값을 기반으로 파티션 집합에 테이블이나 인덱스의 행을 매핑하는 방식을 정의하고, 파티션 구성표는 파티션 함수로 지정된 각 파티션을 파일 그룹에 매핑합니다. 파티션 함수를 작성할 때, 분할 기준열과 분할을 위한 기준열에 대한 분할할 값의 범위를 고려해야 합니다. 기준열에 대한 분할 범위를 조정함에 따라 파티션의 개수가 달라집니다. 한개의 테이블에는 1,000개의 파티션 생성이 가능합니다. 참고자료 SQL Server 2005의 분할된 테이블 및 인덱스 MSDN Library

DB/MS-SQL 2009.02.22

테이블 및 컬럼의 설명 속성(description property) 활용하기

오늘 문득 SQL SSMS를 보다가 컬럼의 설명 속성(description property)에 눈길이 갔습니다. 여기에 값을 기록하면 분명 시스템 테이블 어딘가에 저장이 될텐데... 그럼 그 값을 활용하여 테이블 명세 관리하는 방법이 있지 않을까 하는데 생각이 미쳤습니다. 그럼, 그 설명 속성 값을 얻으려면 어떻게 해야하는가를 검색하여 보았더니 자료가 좀 되더군요. 아래 참고자료 중에 "MSSQL2000, 2005 테이블 명세서 출력쿼리"를 보면 원 저작자가 누구인지는 모르겠지만, 엄청난 노가다(?)를 한 유용한 쿼리더군요. 간단하게 한 DB에서 실행해 봤는데... 명세서도 깔끔하게 잘 나오더군요. 앞으로 테이블 관리할 적에 별도의 문서에 각 테이블, 컬럼별 주석을 정리해 두면 문서 관리 상에도 문제가 ..

DB/MS-SQL 2009.02.10

조건문과 함께 임시 테이블의 사용시 주의할 점.

#TEMP 등과 같은 임시 테이블을 사용할 때 특이한 경우가 있음. IF 조건문을 이용하여 동일한 임시테이블을 생성하지만 서로 다른 조건으로 쿼리한 결과를 담을 필요가 있어서 다음과 같이 쿼리를 작성하였더니 실행시 이미 있는 임시파일이라고 계속 오류가 발생함 IF @condition = 1 SELECT data1 INTO #TEST FROM TEST WHERE 1 = 1 AND regdate = '2009-01-01' #TEMP 임시 테이블이 이미 있는 것이라고 계속 오류가 발생합니다. SELECT ... INTO 로 임시 테이블을 생성할 경우 INTO로 같은 임시..

DB/MS-SQL 2009.01.01

연결된 서버의 저장 프로시저를 호출하기.

연결된 서버 개체를 생성할 때, 서버 옵션에서 PRC , RPC 내보내기 옵션을 TRUE로 만들어 주어야만 합니다. 그래서 연결된 서버를 통한 저장 프로시저 호출이 가능합니다. EXEC REMOTE_SERVER.TEST.dbo.usp_test_proc 주의할 점은 원격 서버의 호출할 저장 프로시저에서 PRINT 등으로 처리할 내용 외에 내용을 출력하게 되면 호출하는 서버에서 오류가 발생합니다. 개발시에 넣었던 PRINT 등을 모두 제거하여 원격 서버에서 호출할 때, 오류가 발생하지 않도록 해야 합니다.

DB/MS-SQL 2008.12.31
728x90