분류 전체보기

dm_db_index_usage_stats DMV 뷰이 DMV 뷰를 통해서 테이블에 마지막으로 접근한 시간을 확인할 수 있습니다. 뷰의 명칭만 보면 인덱스만 확인할 수 있는 것으로 착각할 수 있으나,인덱스가 없는 테이블에도 적용이 가능합니다. 인덱스가 없는 테이블에 접근하는 경우 DMV 뷰의 last_user_scan 컬럼에 마지막 접근 시간이 UPDATE 됩니다. TABLE 에 마지막으로 접근한 시간을 확인하는 쿼리 123456789101112131415161718192021222324select DB_NAME(usage.database_id) AS db_name, schema_name, table_name, max(last_access) as last_access from( select sta.dat..
dm_exec_procedures_stats DMV 뷰이 DMV 뷰를 통해서 마지막으로 실행한 SP 를 확인할 수 있습니다. 그러나 dm_exec_procedures_stats 동적뷰는 캐시된 저장 프로시저에 대한 통계를 반환하기 때문에캐시에서 제거되면 해당 레코드가 동적뷰에서 제거되어 확인이 불가능 합니다. 캐시에서 제거되는 경우다음과 같은 경우 캐시된 저장 프로시저가 캐시에서 제거될 수 있습니다.캐시를 채우면서 전체 절차를 단위 테스트 하는 경우sp_configure 변경 (특정 옵션은 프로시저 캐시를 삭제하는 부작용이 있습니다.)큰 메모리를 필요로 하는 쿼리DBCC FREEPROCCACHE 구문 수행명시적 재컴파일 또는 프로시저 삭제 및 재작성 SP 를 마지막으로 수행한 시간 확인하는 쿼리 1234..
파티션 테이블, 구성표, 함수란파티션 테이블은파티션 별로 파일그룹을 지정한 '파티션 구성표' 와파티션 별로 저장할 데이터 경계값을 지정하는 '파티션 함수' 로 구성됩니다. 경계값은 경계값을 포함할 건지, 포함하지 않을 건지에 대한 옵션을 설정할 수 있습니다. 파티션 테이블, 파일그룹, 경계값을 확인하는 쿼리아래 쿼리는 TEST_T1 의 파티션 테이블의 구성만 확인할 수 있지만,전체 파티션 테이블을 확인하고 싶은 경우 12 라인의 조건을 주석처리 해주시면 됩니다. 1234567891011121314151617181920212223242526SELECT a.name "테이블 이름", f.name "파티션 함수", c.name "파티션 구성표", e.name "파일 그룹", f.type_desc "파티션 타입..
플랜캐시 & 실행계획SQL Server는 한번 실행된 쿼리는 처음 만들어진 실행계획을 플랜캐시에 등록하여 이후에 재사용합니다.특정 조건을 만족하여 쿼리의 실행계획이 재 컴파일 되기 전까지는 말이죠. 실행계획이 재 컴파일 되어 새로운 실행계획이 만들어지는경우 기존의 실행계획은 삭제되어 확인할 수 없습니다. 그럼 현재 플랜캐시에 있는 실행계획을 확인해 보도록 하겠습니다.플랜캐시에서는 아래와 같은 정보를 확인할 수 있습니다.- 쿼리 구문- 수행 횟수- CPU 시간- 수행 시간- 논리적 읽기- 논리적 쓰기- 쿼리 플랜 현재 플랜캐시에 있는 실행계획을 확인하는 쿼리21, 22 라인의 조건을 기호에 맞게 수정하여 특정 데이터베이스에서 특정 시간에 생성된 실행 계획을 확인할 수 있습니다.주석처리를 하여 전체 실행계획..
병렬처리 기법단일 쿼리에서 다수의 CPU 를 사용할 수 있는 병렬처리 기법을 지원하고 있습니다.( Enterprise 버전에서 지원되고 있습니다. ) 병렬처리를 하게 되는 경우 CPU 사용률은 높아지지만 응답속도는 더 빨라질 수 있습니다.그렇다면 어떤 SP 가 병렬처리 되고 있는지 확인해 봅니다. SP 가 병렬처리되는지 확인하는 쿼리라이브에서 운영중인 쿼리는 대부분 SP 를 통해서 수행되고 있으며,어떤 SP 가 CPU 를 몇 개를 사용하는지 알 수 있는 DMV 를 제공하고 있습니다. 아래 쿼리는 플랜캐시를 통해 병렬처리되는 실행계획을 가지고 있는 DB 명, SP 명, CPU 사용 수를 반환합니다.실행계획에서만 확인할 수 있기 때문에 실행계획이 플랜캐시에 없는 경우 병렬처리 되는지 확인할 수 없습니다. 1..
TempDB 를 사용하는 경우1. 임시 테이블, 테이블 변수와 같은 임시 사용자 객체2. 커서3. 스풀이나 정렬을 위한 작업 테이블4. 스냅샷에서 isolation 을 위한 행 버전 관리5. 온라인 인덱스 재 구축 작업6. MARS ( Multiple Active ResultSets, 다수의 활성 결과 집합 )7. 트리거 등 TempDB 와 연관된 DMV 뷰dm_db_file_space_usage : tempdb 의 각 파일에 대한 공간 사용량 정보를 반환합니다.dm_db_session_space_usage : 각 세션에 의해 할당 및 할당 해제 된 페이지 수를 반환합니다.dm_db_task_space_usage : 작업 별 페이지 할당 및 할당 해제를 반환합니다. 이러한 뷰를 dm_exec_sessio..
Order By 없는 쿼리란데이터의 출력이 항상 일관되지 않다는 것을 의미합니다.즉, [ 1, 2, 3 ] 순으로 출력되던 결과가 [ 3, 1, 2 ] 로 출력 될 수도 있습니다. Order By 유무에 따른 쿼리아래와 같은 쿼리가 있습니다.이 쿼리는 데이터의 출력이 항상 일관되다는 것을 보장할 수 있을까요?병렬로 출력하게 된다면 출력버퍼에는 매번 다른값이 출력되고 TOP 20 으로 나온 값은 매번 다르게 될 것입니다.즉, 의도하지 않은 값이 임시테이블에 들어갈 수 있게 됩니다. 12345INSERT @TEMP_TABLESELECT TOP(20) C1FROM dbo.T1 WITH(NOLOCK)WHERE C1 > @C1AND C2 = @C2cs 그럼 이 쿼리를 어떻게 변경해야 할까요?ORDER BY 를 넣..
파티션사전적인 의미로 칸막이, 분할 등을 의미합니다.데이터베이스 관점에서 보면 테이블과 인덱스를 분할하여 저장하는 개념입니다. 테이블이나 인덱스를 정의할 때 컬럼 값 기준으로 분할함으로써 각 파티션이 물리적으로 다른 곳(파일그룹)에 위치하도록 할 수 있습니다. 1. SQL Server 는 현재 (2019) Range 파티션만 제공하며 파티션 키는 단일 컬럼만 가능합니다.2. Range 파티션 정의 시 left (경계값보다 작거나 같은) 와 right (경계값보다 작은) 옵션을 지정할 수 있습니다.3. 파티션을 N 개를 정의하면 N+1 번의 파티션이 자동으로 생성되며, N 파티션에 속하지 않은 모든 데이터가 들어갑니다. 파티션의 필요성월별 1억 건씩 10년치의 명세서가 저장되어 있는 테이블에서 특정 거래월..
· AWS/기타
결제가 된 발단AWS 계정을 생성하면 Free Tier 를 1년간 테스트 용도로 사용할 수 있습니다.몇가지 테스트 용도를 위해 1년전 계정을 생성하고 테스트 완료 후 인스턴스를 중지 시켜 놓았습니다. 이렇게 완전히 방치된 채로 1년이 지났습니다.갑자기 우리카드에서 AWS 로 결제가 되었습니다. 인스턴스 중지는 시켜놓았지만 볼륨은 차지하고 있었기에볼륨에 대한 비용이 청구가 된 것입니다. AWS 에 이에 대해 문의를 했고, 최종적으로는 환불을 받았습니다. AWS 고객센터 환불문의 방법1. AWS 에 로그인을 합니다.https://aws.amazon.com/ko/ 2. 지원 탭에서 지원센터를 누릅니다.3. 'Create Case' 버튼을 클릭합니다. 4. Account and billing support 를 ..
데이터 삭제 시 TabLock 의 이슈가 발생T1 테이블의 인덱스는 아래와 같이 구성되어 있습니다. 인덱스 종류 컬럼 Clustered Index + PK C1, C2, C3, C4 이 때, 라이브 중에 아래와 같은 쿼리를 사용하여 데이터를 삭제하려고 합니다.1DELETE FROM dbo.T1 WHERE C2 = 73985cs 문제는 T1 에 C2 의 인덱스가 없어서,TabLock 이 발생하게 되고 이 시간동안에는 다른 테이블이 접근할 수 없다는 점입니다. 이런 경우 TabLock 없이 어떻게 삭제 작업을 진행할 수 있을까요?시퀀스 (identity column)를 잘 활용해 봅시다.(T1 테이블에 너무 많은 데이터가 있다면 이 작업은 적절치 않을 수 있습니다.) TabLock 없이 삭제 방법1. 작업용..
꽁담
'분류 전체보기' 카테고리의 글 목록 (26 Page)