msSQL

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년치의 명세서가 저장되어 있는 테이블에서 특정 거래월..
SSISDB - SSIS Server Maintenance Job 배치작업SSISDB 는 SSIS Server Maintenance Job 배치작업을 가지고 있습니다.이 배치작업은 오래된 배치기록을 제거하는 역할을 하며 매일 00:00 분에 수행됩니다. cleanup_server_retention_window SP 의 execution_cursor 오류SSIS Server Maintenance Job 배치작업은 cleanup_server_retention_window SP 를 호출합니다.그런데 간혹 아래와 같은 오류가 발생합니다. execution_cursor 오류 해결 방법SSISDB 를 생성 시 발생하는 문제로,아래와 같은 구조로 인해 WHILE 문이 반복되는 경우 CURSOR 를 찾을 수 없기 때문..
트리거란특정 이벤트가 발생하였을 때 동작합니다.특정 이벤트에 포함되는지 검사하기 위해 쿼리 수행마다 트리거를 확인하는 작업이 필요합니다. 트리거가 미치는 성능 테스트트리거 생성 전 테스트트리거를 생성하지 않고 trg_table 을 생성 한 후 20,000 건을 INSERT 합니다. SET NOCOUNT ON CREATE TABLE trg_table (C1 INT, C2 VARCHAR(500))GO DECLARE @ST DATETIMEDECLARE @ET DATETIMEDECLARE @I INTSET @I = 1SET @ST = GETDATE()WHILE @I
트랜잭션 로그와 VLFSQL Server 는 각 트랜잭션 및 데이터베이스 수정 내용을 기록하는 트랜잭션 로그가 있습니다.트랜잭션 로그 파일은 VLF (Virtual Log File) 로 구성됩니다. 지금은 VLF 개수에 따른 성능 차이를 포스팅하는게 목적이기 때문에 개념에 대해서는 설명하지 않습니다.아래 URL 에서 개념에 대해 파악할 수 있습니다.https://docs.microsoft.com/ko-kr/sql/relational-databases/logs/the-transaction-log-sql-server?view=sql-server-2017https://docs.microsoft.com/ko-kr/sql/relational-databases/sql-server-transaction-log-arc..
꽁담
'msSQL' 태그의 글 목록 (2 Page)