SP 생성시간과 수정시간 확인하는 방법 all_objects 의 객체를 활용하여 SP 생성시간과 수정시간을 확인할 수 있습니다. is_ms_shipped 는 시스템객체는 제외되며, type P 는 프로시저만 조회하겠다를 의미합니다. 이렇게 출력된 결과는 현재 위치한 데이터베이스 내의 객체로 종속됩니다. 1 2 3 SELECT name, create_date, modify_date FROM sys.all_objects WHERE is_ms_shipped = 0 and type = 'P' cs
SQL Server
데이터베이스 테이블들을 저장할 수 있는 집합체를 의미합니다. 데이터베이스 생성 방법 "파일그룹 / 논리적 파일명 / 물리적 파일명 / 파일사이즈 / 최대파일사이즈 / 파일사이즈만큼 데이터가 늘었을 때 파일사이즈의 증가량"으로 구성됩니다. 하나의 파일그룹은 여러개의 논리적파일을 가질 수 있습니다. DEFAULT 가 붙은 파일그룹은 테이블이 생성될 때 기본으로 지정되는 파일그룹을 의미합니다. 1 2 3 4 5 6 7 8 9 10 CREATE DATABASE [Sample] ON PRIMARY ( NAME = N'Sample', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\Sample.mdf' , SIZE =..
인덱스란 테이블에 있는 데이터를 빠르게 검색하기 위해 생성되는 객체입니다. 예를 들어 1억건이 들어있는 테이블에서 A 라는 key 를 찾기 위해서는 1억건을 모두 조회해야 합니다. 그러나 인덱스가 있는 경우에는 b-tree 기법을 사용하여 A key 를 더 빠르게 찾을 수 있습니다. 인덱스를 생성하는 방법 인덱스는 테이블을 생성할 때 묶어서도 생성할 수 있지만 여기에서는 인덱스만을 생성하는 방법을 다룹니다. 인덱스는 여러 종류가 있습니다. Primary, Unique, Normal 방식이 있으며 Clustered 와 Non-Clustered 로 나뉩니다. 이 포스팅에서는 위의 개념들을 다루지는 않겠습니다. 인덱스는 테이블을 기반으로 생성하기 때문에, 아래와 같은 테이블이 있는 상태에서 진행합니다. 1 C..
SQL Server 의 압축백업 방법 SQL Server 2008 버전부터 압축백업이 지원됩니다. 압축된 백업은 압축되지 않은 백업보다 작기 때문에, I/O 에 대한 비용이 절약되며 백업속도가 크게 향상됩니다. 다만 압축을 하기위해 CPU 오버헤드가 발생합니다. 반면 압축을 하지 않는다면 CPU 오버헤드는 발생하지 않지만 I/O 가 훨씬 많이 발생하게 될 것입니다. 그렇지만 I/O 와 CPU 의 부하 비교했을 때, CPU 의 오버헤드가 발생하는 부분이 훨씬 효율적입니다. 압축백업의 이점 압축된 백업에 대한 최종 백업 파일의 크기는 데이터를 어느정도나 압축할 수 있는지에 따라 달라집니다. 테스트했을 때 대략적으로는 원본백업파일의 80% 크기 정도를 생각하면 좋습니다. 참고로 이 80% 도 데이터 유형에 따..
인메모리 테이블 테이블의 데이터를 메모리로 올려, 모든 데이터 조작을 메모리상에서만 하도록 하는 방식입니다. 디스크를 거치지 않기 때문에 매우 빠른 속도로 진행되지만, 모든 데이터가 메모리상에 있어야 하기 때문에 메모리 사용률이 증가합니다. 메모리의 데이터는 서버가 재부팅되는 경우 소실됩니다. 이렇게 메모리에만 데이터가 있어 유실되는 부분을 방지하기 위해 File Stream 이라는 기능을 통해 디스크에 데이터를 영구보관 합니다. ( 단, 이렇게 데이터를 영구보관하기 위해서는 테이블에 Primary Key 가 무조건 있어야 합니다. ) 인메모리 테이블 생성을 위한 선행조건 데이터베이스에 메모리 파일그룹 영역 생성 메모리에 최적화된 파일그룹을 생성해 줍니다. 이 파일그룹에 SCHEMA_AND_DATA 옵션..
Profiler 에 수집된 데이터가 있습니다. 이 Profiler 를 추적 테이블로 저장합니다. 적재할 서버에 연결을 해주고 적재할 DB 와 테이블이름을 정합니다. Profiler 하단에 적재가 진행되다가 완료되었다는 메시지로 변경되었습니다. 적재한 서버의 테이블을 조회하면 데이터가 적재된 것을 확인할 수 있습니다.
현상 다음 파일의 줄 끝에 일관성이 없습니다. 줄 끝을 정규화시키시겠습니까? 이런 대화창은 왜 나오는걸까? 원인 데이터에 줄바꿈(Enter)이 있고, 데이터를 넣고 추출하는 OS 가 다른경우에 발생하게 됩니다. 타 OS 에서 데이터를 넣고 추출하는 경우에 왜 이런 오류가 나올까요? 먼저 OS 마다 Enter 값을 저장하는 내부 값은 다릅니다. 운영체제 값 헥사 Windows CR LF (rn) 0x0D 0x0A Mac CR (r) 0x0D Unix LF (n) 0x0A 하나의 예를 보겠습니다. 리눅스 환경에서 Enter 값이 들어간 데이터를 한건 적재했습니다. 그렇게 되면 SQL Server 내부에는 0x0A 라는 값 하나만 저장되게 됩니다. 이 값을 Windows 환경에서 추출해서 확인하려고 하면, 0..
상황 API 에서 SP 를 호출하면 Timeout 이 발생합니다. SSMS 에서 매개변수를 똑같이 해서 제가 직접 SP 를 호출하면 0초만에 수행이 완료됩니다. 참고로 Timeout 의 기준은 3초입니다. 많은 사이트에서는 'recompile' 이나 '매개변스 스니핑'을 하라고 가이드 하고 있습니다. 실제로 recompile 을 하면 해결될 수 있습니다. 그러나 이 방법은 근본적인 방법은 아닙니다. 임시 해결 방안 SP recompile 타 사이트에서 말하는 것처럼 해결하기 위한 결론부터 말씀드리면 SP recompile 을 하면 해결됩니다. 다만 SP recompile 은 현재상황을 해결하기 위한 임시방편이고 다시 똑같은 상황이 발생할 수 있습니다. 1 exec sp_recompile 'sp_name'..
SET ROWCOUNT 는 한번 세션이 설정해 놓은 값에서 결과값을 계속 저장한다. 예를들면 SET ROWCOUNT 10 SELECT TOP 20 * FROM dbo.test 몇건이 출력될까? 10 건이다. docs.microsoft.com/en-us/sql/t-sql/queries/top-transact-sql?redirectedfrom=MSDN&view=sql-server-ver15
개요 데이터 건수가 많아질수록 인덱스 생성시간은 오래 소요됩니다. 벌크 데이터 적재나 갱신같은 경우 단위처리방식으로 끊어서 진행할 수 있어서 진행률을 확인 가능하지만 인덱스의 경우에는 단위처리 방식이 불가능합니다. 즉, 한번 실행하면 완료될때까지 쿼리가 계속 실행되어야 합니다. 오래수행되는 인덱스는 생성이 잘 진행이 되고 있는지, 어디에서 멈춰있는 것은 아닌지 알기가 힘듭니다. 이런 경우 인덱스 생성 진행률을 확인하여 완료시간또한 추정할 수 있습니다. (SQL Server 2014 이상) 단, 이 진행률을 알기 위해서는 선행조건이 필요합니다. 선행조건 profile on 혹은 '실제 실행 계획' 활성화가 필요합니다. 아래 방법 둘 중 하나를 적용해 줍니다. SSMS 창에서 빨간 네모박스를 활성화 합니다...