Category Archives: Sejiwon

세지원 블로그 공지사항

MSSQL Distribution CleanUp 에러나는 이유

MSSQL에서 Distribution CleanUp Job이 에러가 나는 이유는 여러 가지가 있을 수 있습니다. 이 작업은 Transactional Replication에서 오래된 트랜잭션을 정리(clean up)하는 중요한 역할을 합니다. 에러가 발생하는 주요 원인을 아래에 정리해 드릴게요. ✅ 주요 에러 원인 1. 에이전트 권한 부족 🛠️ 해결 방법: 2. 대량의 미처리된 트랜잭션 🛠️ 해결 방법: 3. 테이블 락 또는 블로킹 🛠️ 해결… Read More »

mssql Agent history clean up fail나는 이유

MSSQL에서 SQL Server Agent history cleanup 작업이 실패하는 이유는 여러 가지가 있을 수 있습니다. 대표적인 원인과 해결 방법을 아래에 정리했습니다. ✅ 1. 권한 문제 ✅ 2. MSDB 데이터베이스 손상 또는 비정상 상태 ✅ 3. 오래된 레코드가 너무 많음 ✅ 4. SQL Server Agent 구성 오류 EXEC msdb.dbo.sp_purge_jobhistory @oldest_date = ‘yyyy-mm-dd’ ✅ 5. 외래 키 제약… Read More »

Mssql 데드락 발생시 락발생시킨 쿼리 찾는 방법

MSSQL에서 데드락(deadlock) 이 발생했을 때, 어떤 쿼리나 프로세스가 데드락을 유발했는지 찾는 방법은 다음과 같습니다. 🔍 1. SQL Server 데드락 확인 방법 요약 ✅ 방법 1: SQL Server 에이전트 로그 또는 시스템 헬스 세션(XE) SQL Server 2008 이상에서는 시스템 헬스 세션 (system_health extended event) 이 기본적으로 데드락 정보를 기록합니다. 💡 데드락 XML 조회 (가장 흔한 방법) — 최근 데드락 이벤트 추출… Read More »

lock_deadlock 이벤트로 sql_text 찾기

lock_deadlock 이벤트에서 sql_text를 찾기 위해서는 SQL Server에서 확장 이벤트(Extended Events)를 활용하는 방법이 가장 정확하고 실용적입니다. 여기서는 SQL Server에서 Deadlock 발생 시 관련 SQL 텍스트(sql_text)를 추적하고 조회하는 방법을 설명합니다. 🔍 Deadlock 발생 시 SQL 텍스트 찾는 방법 방법 1: Extended Events 세션 사용 CREATE EVENT SESSION [Deadlock_Capture] ON SERVER ADD EVENT sqlserver.xml_deadlock_report ADD TARGET package0.ring_buffer WITH (MAX_MEMORY=4096KB, EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS, MAX_DISPATCH_LATENCY=5… Read More »

sys.dm_xe_session_targets 세부

sys.dm_xe_session_targets 뷰는 SQL Server의 Extended Events (확장 이벤트) 기능에서 사용 중인 타겟(target) 에 대한 정보를 제공합니다. 이 DMV는 실행 중인 XE 세션의 타겟 구성과 상태를 실시간으로 모니터링할 때 유용합니다. 📌 개념 요약 📋 주요 컬럼 설명 컬럼명 설명 event_session_address 세션의 메모리 주소 (XE 세션과 조인 시 사용) target_address 타겟의 메모리 주소 target_name 타겟의 이름 (예: ring_buffer, event_file, event_counter) execution_count 타겟이 실행된 횟수 last_execution_time 마지막으로… Read More »

Mssql deadlock원인파악

1. SQL Server Error Log 또는 Deadlock Graph 확인 SQL Server는 Deadlock 발생 시 해당 정보를 SQL Server Error Log나 Extended Events, Trace, System Health Session등에 기록합니다. ✅ 방법 A: 시스템 헬스 세션(System Health Session)에서 확인 SELECT XEvent.value(‘(event/data[@name=”resource”]/value)[1]’, ‘VARCHAR(MAX)’) AS Resource, XEvent.value(‘(event/data[@name=”objectname”]/value)[1]’, ‘VARCHAR(MAX)’) AS ObjectName, XEvent.value(‘(event/data[@name=”database_name”]/value)[1]’, ‘VARCHAR(MAX)’) AS DatabaseName, XEvent.value(‘(event/action[@name=”sql_text”]/value)[1]’, ‘VARCHAR(MAX)’) AS SQLText, XEvent.value(‘(event/data[@name=”transactionname”]/value)[1]’, ‘VARCHAR(MAX)’) AS TransactionName, DeadlockGraph FROM (… Read More »

ROW vs PAGE 압축 비교 리포트 생성 스크립트

MSSQL에서 테이블 또는 인덱스에 대해 ROW 압축 vs PAGE 압축 효과를 비교하는 리포트 생성 스크립트는 공식 저장 프로시저인 sp_estimate_data_compression_savings 을 기반으로 작성할 수 있습니다. ✅ 📊 ROW vs PAGE 압축 비교 리포트 스크립트 아래는 테이블 내 모든 인덱스 및 파티션에 대해 압축 전후 공간 절약량을 계산하고, ROW / PAGE 압축 효과를 비교하는 T-SQL 스크립트입니다. 🔧… Read More »

파워쉘이나 SSIS와 연동한 자동화

MSSQL의 파티션별 압축을 자동화하려면, 다음 두 가지 접근 방식이 자주 사용됩니다: 🛠️ 1. PowerShell을 이용한 압축 자동화 PowerShell은 SQL Server Agent 작업과도 쉽게 연동되며, Windows 환경에서 손쉽게 예약 실행이 가능합니다. ✅ PowerShell 스크립트 예제 (동적 압축) # 변수 설정 $serverName = “localhost” $databaseName = “YourDatabase” $tableName = “YourTableName” # SQL 압축 명령 동적 생성 $query… Read More »

MSSQL 압축 스크립트와 예제 및 파티션별 압축 자동화 방법

✅ 1. 파티션별 압축 기본 스크립트 예제 🎯 목표: 특정 파티션만 PAGE 압축하기 ALTER TABLE dbo.YourTableName REBUILD PARTITION = 5 — 5번 파티션 WITH (DATA_COMPRESSION = PAGE); 📌 파티션 번호는 파티션 함수의 정의에 따라 다름. 아래에서 확인하는 방법 설명합니다. ✅ 2. 파티션 정보 조회 ▶ 파티션 번호와 범위 확인 스크립트: SELECT ps.partition_number, prv.value AS RangeValue,… Read More »

파티셔닝이 되어있는 테이블에 주로 insert만 발생하는 테이블을 처음부터 압축하는 경우와 보관전에 압축하는 경우 어떤 경우가 더 유리한가?

✅ 요점 먼저: 구분 초기부터 압축 보관 전 압축 ✅ 저장공간 절약 빠름 (즉시) 느림 (나중에) ✅ CPU 사용량 증가 증가 (한 번에) ✅ INSERT 성능 느려짐 (특히 Page 압축) 빠름 ✅ 관리 복잡도 단순 약간 복잡 ✅ 실무 적합도 (쓰기 위주 테이블) ❌ 적합하지 않음 ✅ 더 유리함 🧠 상세 분석: 📌 1. 처음부터… Read More »