본문 바로가기

DB

(15)
[책정리] 실행계획 아우트라인, 옵티마이저의 한계 새로 쓴, 대용량 데이터베이스 솔루션 vol.1을 공부하며 여기에 정리해본다. 사실 옵티마이저 관련해서는 이 글 제일 마지막의 문구가 가장 핵심이 아닐까 생각한다. 실행계획의 고정화 - 아우트라인(Outline) ü 실행계획의 요약본 ü 즉 몇 가지 정해진 참조값이 같으면 고정된 실행계획을 이용하여 쿼리를 수행하도록 하는 그 몇 가지 참조값. 동일한 실행계획으로 재현할 수 있도록 도와주는 최소한의 참조 정보, 그러나 힌트와는 다르다. ü 하나 혹은 그 이상의 SQL에 적용 가능, 그룹별(카테고리별) 적용 가능 새로운 옵티마이저의 적용 1. 최대한 오랜 기간 동안 현재 버전으로 아우트라인을 생성한다. 상황에 따라서 아우트라인을 범위(SYSTEM/SESSION...)별 및 카테고리(배치/OLTP...)별로 ..
[책정리] 옵티마이저와 파라미터 새로 쓴, 대용량 데이터베이스 솔루션 vol.1을 공부하며 여기에 정리해본다. 사실 옵티마이저는 다루기 민감한 부분이며, 과연 살면서 옵티마이저 모드를 바꿀 기회를 만날 수 있을는지 알 수 없다. 그래도 이런 것도 있다는 것을 어렴풋이 아는 정도만 되어도 도움이 될 것 같다. 옵티마이저 - 통계 정보 관리가 중요 ü 실제 사용하는 도중에 만들어진 통계 정보를 사용할 수 있도록 설정 ü 야간/주간에 따라 다른 성향으로 DB를 사용하는 경우 이 시간대에 따라 별도로 저장한 통계정보를 제공하여 실행계획을 다르게 적용할 수 있다.(ex 야간 – 배치, 주간 – OLTP) - 옵티마이저 모드 ü FIRST_ROWS : 초기 옵티마이저인 경험적 방법을 비용 기준에 적용할 수 있는 모드, 기존에 사용하던 것을 더욱 ..
[책정리] 함수기반 인덱스 새로 쓴, 대용량 데이터베이스 솔루션 vol.1을 공부하며 여기에 정리해본다. 함수기반 인덱스- 일반 사용자 정의 함수의 결과를 인덱스로 사용하는 것인데 함수 결과가 실제 인덱스 컬럼으로 저장되어 사용된다.- 갱신이 필요한 경우: 갱신을 불허할 지(Disabled), 갱신할 지(Rebuild), 기존 데이터는 그대로 두고 신규 데이터에만 적용할 지 선택할 수 있다.함수기반 인덱스의 활용: 체계적이지 않은, 잘 관리되지 않은 시스템에서 활용도가 높다.- 조인 연결고리 컬럼이 대응하지 않는 경우 : A테이블은 대중소분류 코드 사용, B테이블은 분류가 결합된 코드를 사용하는 경우 상대적으로 작은 테이블의 인덱스를 상대 테이블의 코드 형태로 정의하여 생성- 일자 컬럼이 분할된 경우 이를 연결한 인덱스를 정의하여..
[책정리] B-Tree 인덱스 새로 쓴, 대용량 데이터베이스 솔루션 vol.1을 공부하며 여기에 정리해본다. B-Tree 인덱스 블록의 분할(Split)- 인덱스의 중간값으로 데이터가 삽입되는 경우 인덱스 정렬을 준수해야 하기 때문에 인덱스 블록이 분할되며 삽입이 이루어진다.(단 분할은 PCTFREE가 초과하는 경우 발생)- 그러므로 인덱스가 ‘발생일시+항목’ 따위로 구성된다면 인덱스의 제일 뒤로 Append 되기 때문에 인덱스 블록의 분할은 발생하지 않으므로 효율이 좋아진다.B-Tree 인덱스의 삭제 및 갱신- 삭제가 되는 경우 인덱스에 삭제 플래그만 추가되므로 문제는 없으나 인덱스 저장 공간의 낭비가 발생한다.- 인덱스 컬럼이 갱신되는 경우, 내부적으로 삭제 및 삽입이 발생한다. B-Tree 인덱스를 경유한 검색① 루트 블록을 찾..
[책정리] 인덱스 분리형 테이블과 일체형 테이블 새로 쓴, 대용량 데이터베이스 솔루션 vol.1을 공부하며 여기에 정리해본다. 인덱스 분리형 테이블의 구조- 익히 알다시피 키(인덱스)와 데이터를 분리해서 저장하는 기법- 한 블록 내에서 로우가 이동하게 되는 경우는 ROWID가 변경되지 않아도 되나 블록 외부로 옮겨지면 ROWID가 변경되어야 한다.- 물론 이 경우 ROWID를 유지시킬 수 있는 방법이 있는데, 기존 ROWID위치에 새로 이사간 주소를 남겨놓는 방식이다. 이를 이주(Migration)라고 한다.- row size가 너무 커서 여러 블록에 걸쳐 저장되는 경우가 있는데, 이를 체인(Chain)이라 하면 ‘체인이 발생했다’라고 한다.클러스터링 팩터- 물리적으로 저장된 데이터에 엑세스하는데 들어가는 비용- 인덱스로 지정한 컬럼에 대해서는 빠르지..
[MSSQL 2000] 테이블 사이즈 및 그룹보기 SELECT (SELECT NAME FROM SYSOBJECTS WHERE XTYPE = 'U' AND ID = A.ID) AS 테이블명 ,ROWCNT ,B.GROUPNAME ,CAST(RESERVED*8/1024. AS DECIMAL(15,3)) AS [테이블사이즈(MB)] FROMSYSINDEXES A WITH (NOLOCK) INNER JOIN SYSFILEGROUPS B WITH (NOLOCK) ON A.GROUPID=B.GROUPID WHEREA.ID IN (SELECT ID FROM SYSOBJECTS WHERE XTYPE = 'U') AND A.INDID IN(0,1) ORDER BY GROUPNAME ,TBL_SIZE DESC
[MSSQL 2000] 권한없는 유저에게 저장프로시저의 실행 권한 주기 스키마 관련된 정보를 보여주는 뷰가 있다. 그것은 바로.. master DB에 시스템 뷰로 등록되어 있는 INFORMATION_SCHEMA의 아그들이다. 아래의 쿼리는 대충 사용자 오브젝트들의 목록을 뽑아서 특정 사용자에게 권한을 주는 문장을 생성한다. SELECT'GRANT EXEC ON ' + QUOTENAME(ROUTINE_SCHEMA) + '.' + QUOTENAME(ROUTINE_NAME) + ' TO 사용자계정' FROM INFORMATION_SCHEMA.ROUTINES WHERE OBJECTPROPERTY(OBJECT_ID(ROUTINE_NAME),'ISMSSHIPPED') = 0 ORDER BY 1 따로 수정할 거 없이 이 쿼리를 그대로 실행시키면 된다. 유저 로긴 id는 따옴표로 묶을 필..
[MSSQL 2000]OPENQUERY 사용하기 연결된 서버(LINKED SERVER)로 구성된 원격 DB서버에서 필요한 데이터만 쿼리하여 결과를 가져오는 방법이다. OPENQUERY(LINKEDSERVER,'연결된 서버내에서 실행할 쿼리문') 첫 번째 인자는 LINKED SERVER의 이름이며 작은 따옴표로 묶지 않는다. 두 번째 인자는 실제 쿼리문이며 작은 따옴표로 묶은 문자열이 된다. 그러므로 이 쿼리문 안에서 또 문자열을 써야한다면 아래 예제와 같이 작은 따옴표를 두 번 연달아 써준다. LINKED SERVER를 ㅣ_SERVER라고 할 때, SELECT컬럼CC, 컬럼DD, 컬럼EE, 컬럼FF FROMOPENQUERY(L_SERVER,' SELECTAA.컬럼CC, AA.컬럼DD, AA.컬럼EE, AA.컬럼FF FROM테이블AA AA WITH (N..