살아가는 이유_EU
내가 살아가는 이유, 삶
살아가는 이유_EU
전체 방문자
오늘
어제
  • 삶 (159)
    • 이유's EATERY (16)
      • 맛집 (10)
      • 까페 (4)
      • 맛있는 Recipe (1)
    • 이유's LIFE (16)
      • 국내여행 (5)
      • 해외여행 (2)
      • 운동 (1)
      • 취업정보 (0)
      • 끄적끄적 (5)
      • 일기쟝 (3)
      • 세상 이야기 (0)
      • 결혼 준비 (0)
    • 이유's Programming (43)
      • JavaScript (6)
      • Java (7)
      • C++ (0)
      • DBMS (24)
      • Spring (3)
      • til (1)
      • HTTP (2)
    • 이유's REVIEW (13)
      • BOOK (6)
      • PROGRAM or MOVIE (5)
      • PRODUCT 제품리뷰 (2)
    • 이유's STUDY (31)
      • 수업 관련 (2)
      • IT 시사 (2)
      • IT NEWS (2)
      • IVIEW (0)
      • IOS 앱 만들기 (0)
      • 알고리즘 문제풀이 (23)
      • PM data literacy (2)
    • 이유's ENGLISH (13)
      • Writing about something! (12)
      • Feedback (1)
      • TIL (0)
    • 이유's DB 공부 (1)
      • MySQL DB (0)
      • Postgre (1)
    • Computer 공부 (17)
      • Backend question (10)
      • Clean architecture (2)
      • Operating system (2)
      • Network (3)
      • 항해 (0)

블로그 메뉴

  • 홈
  • EATERY's 맛집
  • CAFE 까페
  • Recipe 레시피
  • IT 공부
  • 방명록
  • 태그

공지사항

인기 글

태그

  • memoziation
  • 영어공부
  • 송계옥
  • 용인까페
  • 흑임자 크림
  • 렌더링 수 줄이기
  • 인절미 티라미수
  • React.memo
  • 고메커피
  • 묵리
  • 용인맛집
  • 용인추천
  • 고메동 카페
  • have something to do with뜻
  • 삼돈식탁
  • go hand in hand
  • 피지오필로소피
  • map 하는 법
  • 자바스크립트
  • 맛집
  • Array로 접근
  • 자세요정
  • 아메리카토노
  • key 로 접근
  • 어게인마이라이프
  • 파스타맛집
  • have something to do with
  • 현명하게 리액트
  • 스쿤브레드
  • 스테이크

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
살아가는 이유_EU

내가 살아가는 이유, 삶

이유's Programming/DBMS

metadata - blocking 된 이슈

2025. 1. 18. 21:38
728x90
반응형

메타데이터가 이제 blocking 이 되는 경우 

시스템 데이터베이스

  • master: 데이터베이스의 메타데이터와 시스템 구성 정보를 저장합니다.
    • SQL 서버의 이제 환경정보, 로그인 정보, 관리되는 모든 데이터베이스에 대한 정보들을 관리 
  • msdb: SQL Server 에이전트 관련 작업(예: 스케줄러, 경고, 백업 작업 등)을 관리합니다.
    • 자동화에 대한 관련된 정보를 저장
    • 작업. 스케쥴러 
  • model: 새 데이터베이스를 생성할 때 기본 템플릿 역할을 합니다.
  • tempdb: 임시 데이터와 테이블을 저장하며, SQL Server가 실행될 때마다 초기화됩니다.
  • resource: 읽기 전용 데이터베이스로, 시스템 개체 정의를 저장합니다.

 

SQL Server에서 메타데이터(metadata) 관련 blocking 이슈는 주로 메타데이터 액세스 중 발생하는 잠금(Locking) 문제로 인해 다른 쿼리나 트랜잭션이 지연되거나 대기 상태에 빠지는 경우를 의미합니다. 이는 데이터베이스에서 메타데이터를 관리하거나 수정할 때 자주 발생할 수 있는 문제입니다.

 

1. Metadata Locking의 주요 원인

메타데이터는 테이블, 인덱스, 뷰, 저장 프로시저 등의 정의와 같은 시스템 정보를 저장합니다. 메타데이터가 차단되는 주요 원인은 다음과 같습니다:

(1) DDL(데이터 정의 언어) 작업

  • CREATE, ALTER, DROP과 같은 DDL 작업은 메타데이터를 변경하기 때문에 메타데이터 잠금을 발생시킵니다.
  • 예: 한 사용자가 테이블을 변경(ALTER TABLE) 중이고, 다른 사용자가 해당 테이블에 액세스하려고 하면 blocking이 발생할 수 있습니다.

(2) 대규모 트랜잭션

  • 장시간 실행되는 트랜잭션이 메타데이터 잠금을 유지한 상태에서 다른 작업을 차단할 수 있습니다.
  • 예: 테이블이나 인덱스의 대규모 업데이트, 삭제, 또는 생성 작업.

(3) 시스템 테이블 액세스

  • SQL Server는 메타데이터를 시스템 테이블에 저장합니다. 많은 사용자 또는 작업이 동시에 시스템 테이블에 접근하면 blocking이 발생할 수 있습니다.
  • 예: sys.objects, sys.indexes와 같은 시스템 뷰나 테이블에 대한 빈번한 액세스.

(4) 스키마 잠금(Schema Lock, Sch-M)

  • DDL 작업이 스키마 잠금을 획득(Sch-M)하면 다른 트랜잭션이 테이블이나 뷰 등의 구조를 액세스하려고 할 때 대기 상태가 됩니다.

2. 메타데이터 Blocking 진단 방법

(1) SQL Server Activity Monitor

  • SSMS에서 Activity Monitor를 실행하여 Processes 또는 Resource Waits를 확인합니다.

(2) 동적 관리 뷰(DMV) 사용

  • 다음 쿼리로 블로킹 트랜잭션을 확인할 수 있습니다:
sql
복사편집
-- 블로킹 세션 확인
SELECT session_id AS BlockingSession, blocking_session_id AS BlockedBySession, wait_type, wait_time, resource_description FROM sys.dm_exec_requests WHERE blocking_session_id <> 0; -- 세션 상세 정보 SELECT session_id, status, login_name, wait_type, wait_time, blocking_session_id, last_request_start_time, last_request_end_time FROM sys.dm_exec_sessions WHERE is_user_process = 1;

(3) Extended Events 또는 SQL Profiler

  • 메타데이터 관련 잠금 이벤트를 추적합니다.
    • 이벤트 필터: lock_acquired, lock_released, block_process_report 등.

3. 해결 방안

(1) DDL 작업 시간 최적화

  • DDL 작업(테이블 변경, 인덱스 생성 등)을 트래픽이 적은 시간대에 실행합니다.
  • 가능하면 DDL 작업을 짧고 빠르게 완료하도록 최적화합니다.

(2) 읽기 전용 트랜잭션 격리 수준 설정

  • 데이터 읽기 작업에 대해 잠금을 줄이기 위해 격리 수준을 조정합니다:
sql
복사편집
SET TRANSACTION ISOLATION LEVEL READ COMMITTED; -- 또는 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; -- 잠금 없음
  • 주의: READ UNCOMMITTED는 더러운 읽기가 발생할 수 있으므로 중요 데이터에는 신중히 사용해야 합니다.

(3) 스키마 변경 시 영향 최소화

  • WITH (ONLINE=ON) 옵션을 사용하여 DDL 작업의 잠금을 줄입니다(Enterprise Edition 이상 지원).
    sql
    복사편집
    CREATE INDEX IX_Test ON TestTable (Column1) WITH (ONLINE=ON);

(4) 잠금 시간 초과 제한

  • 잠금 대기 시간을 제한하여 블로킹 상황을 방지합니다.
sql
복사편집
SET LOCK_TIMEOUT 5000; -- 5초

(5) Deadlock 모니터링 및 예방

  • 시스템에서 교착 상태를 예방하거나 자동 해결하는 Deadlock Monitor를 사용합니다.
  • 교착 상태가 발생한 경우 관련 정보를 확인:
sql
복사편집
SELECT * FROM sys.dm_exec_requests WHERE blocking_session_id = 0;

4. 장기적인 최적화 전략

  • 인덱스 최적화: 올바른 인덱스를 설계하여 검색 성능을 높이고 잠금을 줄입니다.
  • 쿼리 리팩토링: DML/DDL 작업을 병렬로 처리하거나 효율적으로 분리합니다.
  • 시스템 테이블에 직접 액세스 방지: sys 스키마 뷰 대신 캐싱 메커니즘 사용 고려.
  • Extended Events 활용: 메타데이터 잠금 원인을 지속적으로 모니터링합니다.

 

728x90
반응형
저작자표시 비영리 변경금지

'이유's Programming > DBMS' 카테고리의 다른 글

transaction log 파일  (0) 2025.01.18
SQL server profiler  (0) 2025.01.18
library cache - latch: cache buffers chains  (0) 2025.01.17
index 잘 타지 못하는 경우  (0) 2025.01.15
database paraellel 관리  (0) 2025.01.15
    '이유's Programming/DBMS' 카테고리의 다른 글
    • transaction log 파일
    • SQL server profiler
    • library cache - latch: cache buffers chains
    • index 잘 타지 못하는 경우
    살아가는 이유_EU
    살아가는 이유_EU
    안녕하세요. 초보개발자의 일상을 담은 블로그입니다.

    티스토리툴바