본문 바로가기
MSSQL SHRINKFILE와 클라우드에서 용량이 줄지 않는 이유 USB로 DB를 옮겨야 했던 날, SHRINKFILE로 본 리소스 관리업무 중에 DB를 클라우드가 아닌 USB를 이용해 물리적으로 이동시켜야 할 일이 생겼다. 개발 서버에 데이터베이스를 백업한 뒤, DB 용량 줄이기에 들어갔다. 1. SHRINKFILE 후 8GB 이상의 차이용량을 줄이기 위해 전달될 필요가 없는 로그가 담긴 테이블이나 테스트용 테이블들을 모두 삭제하고 SHRINKFILE 명령어를 이용해 용량을 줄였는데, 이 과정에서 이상한 현상을 겪었다. 삭제하는 테이블은 거의 동일했고, 같은 DBCC SHRINKFILE(TRUNCATEONLY) 옵션을 사용했지만 어떻게 삭제하냐에 따라 SHRINKFILE 결과가 8GB 이상 차이 났던 것이다. 2. 삭제 방식에 따라 결과가 달랐다1) SSMS GU.. 2025. 7. 27.
[SQL]Stored Procedure는 언제 써야 할까? SP와 쿼리, 그리고 비즈니스 로직 SP와 쿼리, 그리고 비즈니스 로직1. 들어가며: 이건 성능의 문제가 아니라 설계의 문제다Stored Procedure(이하 SP)를 언제 써야 할까? “SP가 쿼리보다 빠르다”거나 “SP는 구식이다” 같은 말은 흔하지만, 중요한 건 단순한 우열이 아니다. 어떤 로직을 어디에 두는 것이, 이 시스템에서 더 자연스럽고 유지보수에 적합한가?이 글에서는 SP와 쿼리, 애플리케이션 로직이 맡아야 할 역할을 실무 관점에서 정리하고, 특히 ‘비즈니스 로직’이 어디에 있어야 유지보수성과 성능 모두에 유리한지를 살펴보고자 한다. 2. SP의 이점 – 빠르다는 말은 어디까지 믿어도 되는 걸까Stored Procedure(SP)가 데이터 처리에는 빠를 수 있다. SP는 구조적으로 다음과 같은 성능에 유리한 지점들이 있다.. 2025. 6. 24.
[MSSQL][SQL SERVER] SQL 성능 최적화: 캐싱과 동적 평가(Dynamic Evaluation)의 함정 연말연초라 그런지 프로그램 사용량이 늘어 성능 이슈가 늘었다. 업무상 성능 개선이 시급히 필요한 시점에서 SQL 튜닝을 하면서 새로 배운 점을 정리하고자 한다. (쿼리나 함수명, 변숫값은 예제로 새로 작성하였다.)문제의 쿼리: 병목WHERE a.Status LIKE '%' + @InputStatus + '%' -- 문제 부분실행계획을 분석해보니 위의 LIKE 연산자 조건 비교 부분에서 프로시저 전체의 56%에 달하는 비용이 발생하고 있었다. LIKE 연산자로 검색하려는 문자열의 앞에 '%'가 올 경우 인덱스를 활용하지 못한다. LIKE 조건에 일치하는 패턴을 찾아야 하는데 찾고자 하는 값이 문자열의 어느 부분에서 시작하는지 알 수 없으므로 전체를 스캔해야 하기 때문이다.@InputStatus는 'Orde.. 2025. 1. 5.
[SQL]SQL: SQL 정의, 특성, 기능, 예시, ACID SQLD를 딴 지 벌써 2년이 다 되어가서 보수교육을 들으라는 안내 메시지가 왔다. 약 4시간에 달하는 분량의 동영상인데 이렇게 보게 된 김에 보면서 SQL에 대한 기본적인 내용을 정리하고 보충하기로 했다.SQL: 구조화된 질의 언어SQL(Structured Query Language)은 관계형 데이터베이스에서 데이터를 저장, 관리, 조회, 수정, 삭제하기 위해 사용되는 표준화된 프로그래밍 언어다.  SQL은 1970년대에 개발되어 이후 ANSI(미국 국가표준협회)와 ISO(국제표준화기구)에서 국제 표준으로 지정되었다. SQL의 주요 특징1. 모든 관계형 DBMS에서 사용 가능SQL은 ANSI/ISO 표준을 기반으로 설계되어, 대부분의 관계형 데이터베이스 관리 시스템(RDBMS)에서 동일한 방식으로 사용.. 2024. 11. 24.
[MSSQL] MSSQL에서 서버 및 데이터베이스 수준 DML 권한 확인하기: 동적 쿼리 예시 서버 및 데이터베이스 수준 DML 권한 확인하기이번에 처음으로 IT감사에 대응하면서 DBMS에서 직접 DML권한을 가지는 계정 목록을 제출해 달라는 요구를 받았다. 해당 요구사항에 맞게 쿼리를 작성하며 서버 수준의 게정과 데이터베이스 수준의 계정, 그리고 각각의 매핑 관계에 대해 자세히 알아보는 계기가 되었다. 자료조사를 하면서 DML 권한이 있는 유저를 조회하고 결과를 PIVOT 테이블 형태로 변환하는 쿼리를 작성하여 자료로 제출했으나 다시 보니 간과한 점이 다소 보인다. 권한 조회 쿼리를 작성하면서 접한 개념과 해당 쿼리를 작성할 때 고려한 것과 개선점을 정리하고자 한다. **SQL SERVER 19 버전을 기준으로 작성되었다. 사용자 권한의 계층구조처음 요청자료를 접했을 때는 database_pri.. 2024. 11. 17.