분류 전체보기 1385

VLF 환경과 성능

VLF 환경과 성능 SQL Server에서 로그파일은 데이터 파일처럼 익스텐트로 구성되지 않고 가상 로그 파일(Virtual Log File 이하 VLF)로 구성되어 있습니다. VLF는 로그 파일의 크기에 따라 가변적으로 변하며 SQL Server에 의해 정해 집니다. VLF의 최소 단위는 256K이며 트랜잭션 로그가 가장 작은 512K일 때 두 개의 VLF가 생성 됩니다. 데이터베이스에 물리적인 로그 파일이 둘 이상 있으면 로그의 끝이 물리적 파일의 가상 로그 파일을 돌아 다시 첫 번째의 물리적인 파일의 첫 번째 가상로그 파일로 데이터를 기록 하게 됩니다. (가상로그 파일의 순서대로 순환 한다고 생각하면 됩니다.) 실습을 위하여 SSMS를 실행하여 다음과 같은 쿼리문을 이용하여 데이터베이스를 생성 합니..

Block 모니터링.

Block 모니터링. 데드락(DeadLock)에 관해서는 지난 아티클에서 알아 보았습니다. 데드락 관련 링크 : http://blog.naver.com/jevida/140164120810 이번에는 블로킹 모니터링을 하도록 하겠습니다. [SP_Lock]이라는 시스템 저장프로시저는 잠금과 관련된 정보를 제공합니다. 하지만 블로킹이 발생 하였을 때 블로킹 하는 프로세스와 블로킹 당하는 프로세스의 관계를 파악하기에는 불편함이 있습니다. Sysprocess 와 inpubuffer를 통하여 블로킹의 관계와 최근 수행된 이벤트 정보를 확인해 보도록 하겠습니다. BEGIN TRY DROP TABLE #TEMP END TRY BEGIN CATCH END CATCH GO BEGIN TRY DROP TABLE #TEMP2 ..

추적파일을 테이블로 로드하기

추적파일을 테이블로 로드하기 SQL Server Profier를 사용하여 저장된 추적파일을 테이블로 로드하는 방법을 알아 보겠습니다. Profiler를 통하여 추적파일을 저장 합니다. 추적파일을 Profier에서 로드하니 검색에 많이 불편합니다. 추적파일을테이블로 로드하여 쿼리문을 이용하여 필요한 정보를 조회 할 수 있습니다. SELECT IDENTITY(INT, 1,1) AS NUM, * INTO TBL_PROFILER FROM ::FN_TRACE_GETTABLE('D:\SSIS_TEST\DEADLOOCK.TRC', DEFAULT) GO SELECT top 10 * FROM TBL_PROFILER GO [구문] FN_TRACE_GETTABLE('FileName', number_files)  Filen..

DeadLock(교착상태) 모니터 하기 최근 들어 서비스에서 DeadLock(교착상태) 이슈가 자주 발생 하여 이번 아티클은 DeadLock을 모니터링 하는 방법에 대해서 알아 보도록 하겠습니다.. DeadLock(교착상태)? 한 태스크에서 잠근 리소스를 다른 태스크에서 잠그려고 하여 둘 이상의 태스크가 서로 영구적으로 차단하는 현상. (서로 맞물린 상태의 차단) 순환 교착(cycle DeadLock) : 서로 다른 개체를 차단할 때 발생 변환 교착(Conversion DeadLock) : 같은 대상에 대해 둘 이상의 세션이 동시에 잠금을 변경하려고 할 때 발생 교착 상태를 일으킬 수 있는 리소스 잠금 : 개체, 페이지, 행, 메타데이터, 응용 프로그램 등의 리소스에 대한 잠금을 획득하려고 대기 하는 경..

Tempdb 경합 (동시성 강화)

Tempdb 경합 (동시성 강화) Tempdb 데이터베이스를 많이 사용하면 SQL Server에서 페이지를 할당 하려고 할때 경합이 발생 할 수 있다.  --tempdb를 많이 사용하는 예 임시 테이블(로컬 또는 전역)을 반복해서 만들고 삭제 테이블 변수 CURSORS와 관련된 작업 테이블 ORDER BY GROUP BY HASH PLANS   -- 경합 확인 방법 SELECT * FROM SYS.SYSPROCESSES 시스템 테이블 출력에서 waitresource가 2:1:1(PFS 페이지)또는 2:1:3(SGAM 페이지)로 표시되며 경합 정도에 따라 SQL Server가 응답하지 않는것 처럼 나타날 수 있다. --원인 혼합 익스텐트에서 페이지 할당의 일환으로 SQL Server는 PFS(..

LOGON 트리거

LOGON 트리거 여러명이 DB에 작업을 할 경우 로그인에 대한 이력이 필요한 상황이 있습니다. 예를 들면..누가 언제 로그인을 했는지...감사목적으로 많이 이용합니다. 이때 LOGON트리거를 사용하여 특정 계정이 로그온 할때 이력을 기록하여 살펴 볼수 있습니다. http://msdn.microsoft.com/ko-kr/library/bb326598.aspx SA로 트리거를 해보았습니다. --트리거 생성 CREATE TRIGGER connection_limit_trigger ON ALL SERVER WITH EXECUTE AS 'sa' FOR LOGON AS BEGIN IF ORIGINAL_LOGIN()= 'sa' AND (SELECT COUNT(*) FROM sys.dm_exec_sessions WHE..

스토리지 장애로 인한 DB복구 이야기

스토리지 장애로 인한 DB복구 이야기 안녕하세요. 스토리지 박스의 장애로 인하여 데이터 크래쉬 발생..데이터를 복구하기 까지의 과정을 정리하였습니다. 결론은...복구 실패!! 증상 : 서버에서 모든 SQLServer 호출 실패. 커넥션은 살아 있으나 데이터 처리가 불가능. SP_READERRRORLOG 결과823오류 발생 확인. (여기 까지만 해도 단순 디스크 불량인줄 알았음) 윈도우 이벤트 확인 결과 디스크 드라이브가 통째로 사라짐. 스토리지 박스의 장애로 인하여 드라이브 자체가 사라짐과 동시에 레이드 구성 초기화 되었음. 복구 전문업체에 의뢰하여 디스크 복구 진행. MDF와 LDF를 복구하여전달 받음. CHECKPRIMARYFILE 를 사용하여 데이터, 로그 이름 및 파일 위치 확인. SP_ATTAC..

저장 프로시저 실행 수, CPU 소모량, IO, Duration

저장 프로시저 실행 수, CPU 소모량, IO, Duration -- 1.저장프로시져별실행수뽑기 select db_name(st.dbid) DBName ,object_schema_name(st.objectid,dbid) SchemaName ,object_name(st.objectid,dbid) StoredProcedure ,sum(qs.execution_count) Execution_count from sys.dm_exec_cached_planscp join sys.dm_exec_query_stats qs on cp.plan_handle=qs.plan_handle cross apply sys.dm_exec_sql_text(cp.plan_handle)st where DB_Name(st.dbid) is no..

Online restore

Online restore 온라인 복원? 데이터 베이스가 온라인 상태에서 복원을 하는 것을 뜻한다. SQL Server 2005 Enterprise 이상 버전에서 지원한다. 대용량 데이터베이스에서는 파일 그룹을 나누어 사용하는 경우가 많다. 백업 단위 또한 매우 클 것이다. 만약 데이터베이스 장애가 발생하여 복원 할 일이 생겼다. 이 때 모든 데이터가 PRIMARY 그룹에만 있다면 어떻게 될까? 데이터베이스는 PRIMARY그룹을 복원하느라 많은 시간이 걸릴 것이다. 하지만 파일 그룹이 나누어져 있다면 PRIMARY 먼저 복원하고 부분적으로 필요에 따라 우선순위를 정하여 파일 그룹을 복원하여 사용하자. 데이터베이스 복원 시 PRIMARY 그룹만 복원되어도 온라인 상태가 되는 것을 확인 할 수 있다. --K..