SQL Server

이슈 상황 OPENROWSET 을 사용하여 실행계획 XML 타입을 수집하려고 하는 상황에서 오류가 발생하였습니다. 오류내용 [ErrorCode]9514 [ErrorMessage] 분산 쿼리에서 Xml 데이터 형식을 사용할 수 없습니다. 원격 개체 'a'에 xml 열이 있습니다. 쿼리 9번째 라인을 보면 XML 타입인 query_plan 을 OPENROWSET 을 사용하여 조회하려고 하고 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 set @query = 'SELECT @@SERVERNAME AS [ServerName], DB_NAME(t.[dbid]) AS [DBName], qs.plan_handle AS [PlanHandle], CASE WHEN ob..
Lock Waits/sec, Latch Waits/sec 수치가 높은 현상Batch Requests 수치가 증가하면서 Lock Waits 수치가 200 이상으로 증가하였습니다.Lock Waits 수치가 증가하면서 Lock Timeouts 수치도 함께 증가하였고Average Wait Time 수치가 2000ms (2초) 이상으로 증가하였습니다. 지표 의미 Batch Requests/sec DB 에 호출하는 초당 쿼리 수 ( 하나의 프로시저에서 여러개의 쿼리를 호출하더라도 1의 수치만 증가 ) Lock Waits/sec 초당 잠금을 획득하기 위해 대기하는 수 Lock Timeouts/sec 초당 잠금을 획득하기 위해 대기하다가 Timeout 되는 수 Average Wait Time (ms) 쿼리가 완료되기 ..
sp_prepexec 란 매개변수가 있는 트랜잭션을 실행할 수 있게 해줍니다.미리 컴파일 된 실행계획을 재사용할 수 있습니다. 자세한 사용법은 아래 URL 을 참고해주세요.https://docs.microsoft.com/ko-kr/sql/relational-databases/system-stored-procedures/sp-prepexec-transact-sql?view=sql-server-ver15 실행계획 재사용 테스트테스트 SP 생성합니다.@isvar 매개인자값에 따라 결과가 달라집니다. 12345678910111213141516171819CREATE PROCEDURE [dbo].[nxp_test01](@isvar tinyint,@result varchar(10) = null OUTPUT)ASset..
데이터 파일 사용량이 가득찰 때 발생하는 이슈데이터파일의 사용량이 가득차게 되면, SQL Server 는 AutoGrow 옵션에 설정된 크기만큼 데이터파일 크기를 증가시킵니다.이 때 자동증가가 완료될 때까지 다른 세션의 트랜잭션은 대기하게 됩니다. 디스크의 성능이 좋지 않아서 데이터파일의 크기를 증가시키는데 오랜 시간이 걸리게 되면,파일 증가가 시간 내에 완료되지 못하고 파일 증가도 롤백되고, 에러로그에 아래와 같이 기록됩니다. - SQL Server has encountered x occurrences of I/O requests taking longer than 15 seconds to complete on file - Autogrow of file 'FILE_NAME' in database 'DAT..
단순 모드 ( Simple Mode)SQL Server 엔진에서 트랜잭션 로그를 주기적으로 비워줍니다.단순 모드라고 해서 트랜잭션 로그가 기록되지 않는 것은 아닙니다. 트랜잭션 로그가 계속 증가하는 원인 분석 단순모드 DB 의 트랜잭션 로그 사용량이 갑자기 증가하기 시작하였습니다. 처음에는 SQL Server 에서 비워주기 전 로그가 많이 쌓여 사용량이 증가한 것으로 생각하였지만,4시간이 지나도록 정리되지 못하고 사용량이 67% 까지 증가하고 있었습니다. 왜 정리를 못하는지 확인해보니, 2184 세션의 트랜잭션이 84910 초동안 활성화 되어 있었습니다.그래서 해당 트랜잭션 로그 시점 이후의 로그들은 정리되지 못하고 계속 쌓이고 있었습니다. 해당 세션을 KILL 한 후 로그 사용량을 확인해보니 0.7% ..
오랫동안 활성화 되어있는 트랜잭션이 있는 경우 문제점트랜잭션이 오랫동안 수행되고 있는 경우, 이후에 같은 페이지를 접근하는 다른 세션들은 대기해야 합니다.이런 경우 트랜잭션을 수행하는 세션을 정리해야 이후의 세션들이 작업을 진행할 수 있습니다. 또한 트랜잭션이 활성화 되어 있다면, 트랜잭션 로그도 정리할 수 없어 사용량이 계속 늘어나게 됩니다. 다양한 원인(락, 네트워크 등)으로 트랜잭션을 정상종료하지 못하고 남아있는 좀비세션들이 있을 수 있습니다. 오랫동안 수행되는 트랜잭션을 찾는 쿼리오랫동안 수행되는 트랜잭션의 세션ID, 현재 상태, 접속계정, 접속 hostname, 수행된 시간, 쿼리를 확인할 수 있습니다. 12345678910111213141516SELECT p.spid , p.cmd , p.st..
데이터베이스 마지막으로 접속한 시간 확인하는 방법데이터베이스를 마지막으로 접근한 시간은 약간 우회적으로 표현해야 합니다.데이터베이스의 객체를 언제 마지막으로 사용했는지로 확인할 수 있습니다. 즉, 객체의 마지막 접근(사용) 시간을 확인하는 방식으로 할 수 있습니다. 객체의 마지막 접근 시간을 확인하는 쿼리특정 데이터베이스에서 마지막 접근한 시간을 확인합니다.4개의 결과값 중 제일 최근의 값이 사용자가 마지막으로 DB에 접근한 시간입니다. 1234567SELECT MAX(last_user_seek) as Last_User_Seek, MAX(last_user_scan) as Last_User_Scan, MAX(last_user_lookup) as Last_User_Lookup, MAX(last_user_up..
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' 태그의 글 목록 (2 Page)