본문 바로가기
반응형

DATABASE/MsSQL41

[MSSQL] Partition Table 생성 방법 PARTITION TABLE일반적인 DBMS에서는 데이터를 저장 할 때 특정 값을 기준으로 데이터를 나누어 저장 하는 기능인 파티션을 제공한다. 각 DBMS별로 각각의 구현방법과 성능이 차이가 있으나, 기본적으로 파티션 테이블은 특정 값 기준으로 분산하여 저장하기에 데이터 관리측면과 I/O측면에 긍정적인 효과를 가져온다. 보통의 데이터 중에 로그성 데이터를 일자별로 저장하여, 관리적인 측면에 도움을 주는 경우가 많지만 작성자의 회사에서는 MSSQL의 20억이 넘는 데이터의 I/O분산을 위해 20개의 파티션으로 분산하여 사용 중에 있다. (물론 다른 용도의 파티션도 많음) ORACLE과 달리 MSSQL에서는 파티션 테이블을 생성하는 방법이 조금 불편하기에 정리 겸 한번 파티션 테이블을 생성하는 방법에 대해.. 2025. 6. 10.
[MsSQL][장애 조치] 크랙 DATABASE 복구 1 - 주의대상 데이터베이스 복구 시도 장애 조치사내 데이터 배치용으로 사용 중이던 MsSQL의 Database 중 하나의 Database의 장애가 발생하여 주의대상 상태가 되는 일이 발생하였다. 주의대상이 된 데이터베이스에는 접근도 할 수 없고 어떠한 작업도 불가능한 상태가 되었으며, 주의대상에서 자동으로 복구 중 무언가 문제가 발생하여, DB STARTUP 상태로 아무런 변경이 없었다.select command, percent_complete, start_time from SYS.DM_EXEC_REQUESTS where command in ('db startup', 'restore database', 'recovery');위의 Query를 통해 DB STARTUP 트랜잭션이 어느정도 진행되었는지 확인 할 수 있다 하여 확인하였으나, 몇 .. 2025. 2. 12.
[MsSQL] 쿼리튜닝 - Join Hint와 Leading Table 쿼리 튜닝쿼리를 튜닝하다보면 여러 상황을 만나게 되는데, 그 중에 MsSQL쿼리의 Join에 대한 힌트들에 대해서 간단하게 소개해보도록하겠다. 사실 Oracle 쿼리튜닝 책만 읽어서 MsSQL에 대해서 자세하게 모르고 있었는데, 최근 사내에서 운영중인 MsSQL의 쿼리에 문제들이 있어 튜닝을 해야했었다. 팀장님이 잠시 자리를 비운사이 문제의 쿼리를 확인하고 조치하려했으나, 확인까지만하고 어떻게 조치해야하나 고민을 하며 자신있게 해결하지 못하였다. 팀장님이 돌아오신 후 Inner Loop Join으로 바꿔서 튜닝을 하라 라고 말씀하셨는데, 정확히 힌트에 대해 알지 못하다보니 자신있게 한다고 말을 못 했던게 많은 아쉬움으로 남는다. 조금 다른이야기였지만, 아무튼 Join에 대한 힌트들에 대해서 소개해보도록 .. 2024. 12. 28.
[MsSQL] SET STATISTICS 옵션을 활용 - 실제 실행 계획 상세보기 실제 실행계획 상세보기MsSQL 에서는 실행계획을 볼 수 있는 방법이 여러가지 있지만.대부분 그래프 이미지로 밖에 볼 수 없다. 기존의 실행계획 표시인 텍스트와 I/O 관련정보 등을 손쉽게 볼 수 있는 옵션에 대해서 소개하도록 하겠다. SET STATISTICSSET STATISTICS 는 MsSQL에서 쿼리의 성능분석/최적화 등에 도움을 주는 옵션이다.해당 옵션은 세션별로 적용을 하여 해당 세션의 쿼리를 분석할 수 있게 도와준다. 주로 실제 쿼리의 실행계획에 대해 아래의 옵션 3개를 활성화하여 확인한다.SET STATISTICS PROFILE ONSET STATISTICS IO ONSET STATISTICS TIME ON 해당 옵션을 활성화 하고 원하는 쿼리를 실행하여 쿼리가 실행 완료되면 실행계획과 .. 2024. 11. 20.
[MsSQL] 프로시저 내용 찾기 - 특정 테이블이 사용되는 프로시저 찾기 Procedure 내용 찾기오라클의 프로시저의 특정 내용을 찾는 쿼리를 알아보았었다.[Oracle] 프로시저 내용 찾기 - 특정 테이블이 사용되는 프로시저 찾기MsSQL도 이와 같은 쿼리를 만들 수 있는데, 해당 쿼리는 트리거나 함수 등에서 사용은 못하고 프로시저의 내용만 찾는 쿼리이다. Queryuse [데이터베이스 명]select name, object_definition(object_id) as txt from sys.PROCEDURES where object_definition(object_id) like '%[프로시저에서 찾고 싶은 내용]%' 위 쿼리를 사용하면 해당 데이터베이스 내의 프로시저 중 내가 찾고싶은 내용을 포함한 프로시저를 찾을 수 있다.데이터베이스 별로 검색해야하기에 .. 2024. 11. 16.
[MsSQL] 백업 파일 관리 - 최근 전체 백업과 하위 로그 백업 확인하기 Backup File 조회하기MsSQL은 전체 복구 모델일 경우 Full Backup 을 받은 후 하위에 Log Backup을 하며 하나의 세트를 만들어간다.자세한 설명을 아래의 글로 남겨두도록 하겠다. [MsSQL] Database 복구 모델 - Simple, Full (단순 모델, 전체 모델)[MsSQL] Database Backup이란? - Full / Differential / Log Backup 보통 실무에서 예를들자면,1일 단위로 Full Backup을 받고 4시간 단위 Log Backup을 받는식으로의 백업 정책을 가지고 있는데,어떠한 Full Backup 파일 하위에 어떤 순서로 어떤 Log Backup 파일을 가지고 있는지 한눈에 알아보는 쿼리를 작성해 보았다. Query쿼리 자체는 간단.. 2024. 11. 14.
[MsSQL] 마지막 페이지 Latch 경합 (Insert 지연 튜닝) - 2. 테스트 및 적용 Insert 지연 튜닝 - 테스트 및 적용 지난번에 원인을 파악했떤 마지막 페이지 경합에 대한, 업무 반영을 하기위해 테스트를 진행하고 결과에 맞게 반영하게 되었다. [MsSQL] 마지막 페이지 Latch 경합 (Insert 지연 튜닝) - 1. 원인 찾기Insert 지연 튜닝회사 중요 데이터 중 많게는 하루에 수억건의 CUD가 발생하는 테이블이 있다.이상하게 CUD 중 Delete가 발생 할 때에만 지연이 발생하게 되어, 튜닝을 위해 이것저것 확인 중  해당da-new.tistory.com 잘못된 테스트와 정확한 테스트 그리고 새롭게 알아낸 내용 등에 대해서 한번 소개해보도록 하겠다. 테스트어떻게하면 내가 생각한 이슈에 의해 마지막 페이지경합이 발생하며, 해결 방법을 통해 경합이 줄어들었음을 알 수 있.. 2024. 11. 13.
[MsSQL] 현재 세션에 대한 정보들 조회하기 시스템 동적 관리뷰를 활용한 세션 정보 조회MsSQL에 현재 붙어있는 세션들에 대한 정보를 조회하는 방법으로 시스템 동적 관리 뷰를 사용한다. 이런 뷰를 여러가지를 조합하여 원하는 정보를 알 수 있는데, 기본적으로 자주 사용되고 필요한 정보들을 조회하는 쿼리를 소개하도록 하겠다. 세션 조회 바로 쿼리를 설명하자면 아래와 같다.select r.session_id, r.blocking_session_id, r.status, r.command, r.wait_type, r.wait_time, s.host_name, s.program_name, s.login_name, c.client_net_address, .. 2024. 11. 10.
[MsSQL] 마지막 페이지 Latch 경합 (Insert 지연 튜닝) - 1. 원인 찾기 Insert 지연 튜닝회사 중요 데이터 중 많게는 하루에 수억건의 CUD가 발생하는 테이블이 있다.이상하게 CUD 중 Delete가 발생 할 때에만 지연이 발생하게 되어, 튜닝을 위해 이것저것 확인 중  해당 테이블에서 Delete가 발생 시 삭제 된 데이터의 히스토리를 남기고자 트리거로 히스토리 테이블에 Insert를 하는데,트리거를 통한 히스토리 테이블에 Insert가 지연되어 원본 테이블의 Delete 함께 지연된다는 사실을 알게되었다. Insert가 지연되었던 이유가 무엇이며, 어떻게 튜닝했는지 초보 DBA의 의식의 흐름대로 어떻게 진행되었는지 남겨보도록하겠다. 트리거가 설정되어있는 기존의 테이블을 Table_O(수억건의 CUD발생) / 히스토리를 남기기 위한 테이블을 Table_H(Insert만.. 2024. 11. 8.
[MsSQL] 실행 했던 쿼리 실행 계획 찾기 실행 했던 쿼리 실행계획지금 당장 실행할 쿼리의 실행계획을 알아보는거야 뭐 너무나 쉽지만 이미 실행되었던 쿼리들에 대해서 실행계획을 찾으려면 캐시된 쿼리들에 한하여 실행계획을 찾아 볼 수 있다. SYS.DM_EXEC_QUERY_STATS 라는 시스템 뷰에 남아있는 sql_handle / plan_handle을 통해 찾아보는 쿼리에 대해 알아보자. Queryselect s.creation_time,        s.last_execution_time,       s.execution_count,       substring(t.text,                  (s.statement_start_offset/2) + 1,                  ((case s.statement_end_offs.. 2024. 11. 7.
반응형