Computer >> 컴퓨터 >  >> 프로그래밍 >> 데이터베이스

SQL Server 2017의 새로운 기능 총정리: DBA와 개발자가 알아야 할 핵심 변화

더 현대적인 버전의 SQL Server로 업그레이드를 고민하고 계신가요? SQL Server 2016과 2017 사이에서 선택에 어려움을 겪고 있다면, 이 글에서 설명하는 이유를 바탕으로 SQL Server 2017로 업그레이드할 것을 권장합니다.

SQL Server vNext(일반적으로 SQL Server 2017이라 불림)의 CTP(Community Technology Preview) 2.0 출시 역시 예외는 아니었습니다. 기존 기능과 서비스 전반에 걸쳐 수많은 업데이트가 반영되었으며, 이 글에서는 데이터베이스 관리자(DBA) 관점에서 SQL Server 2017 데이터베이스 엔진의 새로운 기능들을 살펴보겠습니다.

소개

Microsoft® SQL Server 2017은 더 빠른 처리 속도, 더 유연한 사용성, 그리고 그에 따른 비용 절감을 제공하는 다양한 신기능과 함께 등장했습니다. SQL Server 2016이 Microsoft가 말하는 '큰 도약'이었다면, SQL Server 2017은 모든 수준의 기업 고객이 필요로 하는 것들을 한층 더 충족시켜 줍니다. 적응형 쿼리 처리(adaptive query processing)로 데이터베이스 성능은 새로운 정점에 도달했고, 크로스 플랫폼 지원으로 새로운 유연성이 확보되었으며, 통계 및 데이터 과학 분석을 위한 새로운 통합 기능이 추가되었습니다. 나아가 Linux®, Ubuntu® 운영체제 또는 Docker® 환경에서도 SQL Server를 구동할 수 있게 되어, 비용 절감과 함께 견고한 기술력을 갖추게 되었습니다.

이 글에서 다룰 SQL Server 2017의 주요 변경 사항은 다음과 같습니다.

  • Linux용 SQL Server
  • 재개 가능한 온라인 인덱스 다시 작성(Resumable Online Index Rebuild)
  • SQL Server 머신 러닝 서비스(Machine Learning Services)
  • 쿼리 처리 개선 사항
  • 자동 데이터베이스 튜닝(Automatic Database Tuning)
  • TempDB 파일 크기 개선
  • 스마트 차등 백업(Smart Differential Backup)
  • 스마트 트랜잭션 로그 백업(Smart Transaction Log Backup)
  • 향상된 SELECT INTO
  • 분산 트랜잭션 지원
  • 새로운 가용성 그룹(Availability Groups) 기능
  • 새로운 동적 관리 뷰(DMV)
  • 인메모리(In-Memory) 기능 강화
  • 보안 강화
  • 고가용성 및 재해 복구(HA/DR)
  • 성능 개선

Linux용 SQL Server

SQL Server는 더 이상 Windows 기반 관계형 데이터베이스 관리 시스템(RDBMS)에 국한되지 않습니다. 다양한 종류의 Linux 운영체제에서 실행할 수 있으며, Linux, Windows, Ubuntu 또는 Docker 환경에서 애플리케이션을 개발하고 해당 플랫폼에 바로 배포할 수도 있습니다.

재개 가능한 온라인 인덱스 다시 작성

이 기능은 데이터베이스 장애 조치(failover), 디스크 공간 부족, 일시 중지 등의 이벤트 발생 후 온라인 인덱스 다시 작성(rebuild) 작업을 중단된 지점부터 이어서 진행할 수 있게 해줍니다.

다음 이미지는 이 작업의 예시를 보여줍니다.

SQL Server 2017의 새로운 기능 총정리: DBA와 개발자가 알아야 할 핵심 변화 SQL Server 2017의 새로운 기능 총정리: DBA와 개발자가 알아야 할 핵심 변화

인덱싱 관련 지침

온라인 인덱스 작업을 수행할 때는 다음 지침이 적용됩니다.

  • 기본 테이블에 image, ntext, text와 같은 LOB(Large Object) 데이터 형식이 포함된 경우 클러스터형 인덱스는 오프라인 상태에서만 생성, 다시 작성 또는 삭제해야 합니다.
  • 테이블에 LOB 데이터 형식이 포함되어 있더라도 해당 열이 인덱스 정의의 키 열이나 포괄(non-key) 열로 사용되지 않는다면 비고유(non-unique) 비클러스터형 인덱스는 온라인으로 생성할 수 있습니다.
  • 로컬 임시 테이블의 인덱스는 온라인으로 생성, 다시 작성 또는 삭제할 수 없습니다. 단, 이 제한은 전역 임시 테이블에는 적용되지 않습니다.
  • 동일한 테이블이나 뷰에 대해 여러 개의 새 비클러스터형 인덱스를 생성하거나 비클러스터형 인덱스를 재구성하는 경우에만 동시 온라인 인덱스 DDL 작업을 수행할 수 있습니다. 그 외의 모든 동시 온라인 인덱스 작업은 실패합니다. 예를 들어, 같은 테이블에서 기존 인덱스를 온라인으로 다시 작성하는 동안에는 새 인덱스를 온라인으로 생성할 수 없습니다.

SQL Server 머신 러닝 서비스

SQL Server 2016은 R 프로그래밍 언어를 통합하여 데이터베이스 서버 내에서 실행하고 Transact-SQL(T-SQL) 스크립트에 삽입할 수 있게 했습니다. SQL Server 2017에서는 여기에 더해 Python 스크립트도 데이터베이스 서버 자체에서 실행할 수 있습니다. R과 Python은 모두 방대한 데이터 분석 지원과 자연어 처리 능력을 갖춘 인기 있는 프로그래밍 언어입니다.

쿼리 처리 개선 사항

SQL Server 2017은 애플리케이션 워크로드의 런타임 조건에 맞춰 최적화 전략을 조정합니다. 적응형 쿼리 처리 기능을 활용하면 SQL Server와 SQL Database에서 쿼리 성능을 개선할 수 있습니다.

다음 세 가지 새로운 쿼리 개선 기능이 제공됩니다.

SQL Server 2017의 새로운 기능 총정리: DBA와 개발자가 알아야 할 핵심 변화
  • 배치 모드 메모리 피드백(Batch Mode Memory Grant Feedback): 실행 계획에 필요한 메모리를 재계산하여 캐시에서 메모리를 할당하는 피드백 기법입니다.
  • 배치 모드 적응형 조인(Batch Mode Adaptive Joins): 실행 계획을 더 빠르게 수행하기 위해 해시 조인(hash join) 또는 중첩 루프 조인(nested loop join)을 사용할 수 있습니다. 실행 계획의 첫 번째 입력을 스캔한 후 가장 빠른 속도로 결과를 산출할 조인 방식을 결정합니다.
  • 인터리브 실행(Interleaved Execution): 다중 문 테이블 반환 함수(multi-statement table-valued function)를 만나면 실행 계획 최적화를 일시 중지하고, 정확한 카디널리티(cardinality)를 계산한 뒤 최적화를 재개합니다.

자동 데이터베이스 튜닝

이 기능은 잠재적인 성능 문제를 감지하면 이를 알려주고 수정 조치를 적용할 수 있게 하거나, SQL 계획 선택 회귀(plan choice regression)로 인한 성능 문제를 데이터베이스 엔진이 자동으로 수정하도록 설정할 수 있습니다. 따라서 데이터베이스는 어떤 인덱스와 계획이 워크로드 성능을 개선할 수 있는지, 어떤 인덱스가 워크로드에 악영향을 주는지 파악하며 워크로드에 동적으로 적응합니다. 이러한 분석 결과를 바탕으로 자동 튜닝 프로세스는 워크로드 성능을 향상시키는 조치를 적용합니다. 또한 자동 튜닝이 변경한 사항이 실제로 성능을 개선하는지 데이터베이스가 지속적으로 모니터링하며, 성능 개선에 도움이 되지 않는 조치는 자동으로 되돌려집니다.

SQL 계획 선택 회귀(SQL Plan Choice Regression)

SQL Server 데이터베이스 엔진은 T-SQL 쿼리를 실행할 때 서로 다른 SQL 계획을 사용할 수 있습니다. 쿼리 계획은 통계, 인덱스 및 기타 요소에 따라 달라집니다. 어떤 경우에는 새 계획이 이전 계획보다 나은 성능을 내지 못해 성능 회귀(regression)가 발생할 수 있습니다. 잘못된 계획 선택으로 인한 회귀를 발견하면 sp_query_store_force_plan 프로시저를 사용해 이전에 사용하던 좋은 계획을 찾아 현재 계획 대신 강제로 사용하도록 해야 합니다. SQL Server 2017(v.14.x)의 데이터베이스 엔진은 회귀 계획에 대한 정보와 권장 수정 조치를 제공합니다. 나아가 이 과정을 완전히 자동화하여 계획 변경과 관련된 문제를 데이터베이스 엔진이 직접 해결하도록 구성할 수도 있습니다.

자동 계획 수정(Automatic Plan Correction)

자동 계획 수정의 흐름은 다음 다이어그램과 같습니다.

SQL Server 2017의 새로운 기능 총정리: DBA와 개발자가 알아야 할 핵심 변화

다음과 같은 자동 튜닝 기능을 사용할 수 있습니다.

  • 자동 계획 수정(SQL Server 2017 v14.x 및 Azure SQL Database에서 사용 가능): 문제가 있는 쿼리 실행 계획을 식별하고 SQL 계획 성능 문제를 해결합니다. 자동 튜닝은 다음 명령으로 활성화할 수 있습니다.
SQL Server 2017의 새로운 기능 총정리: DBA와 개발자가 알아야 할 핵심 변화 SQL Server 2017의 새로운 기능 총정리: DBA와 개발자가 알아야 할 핵심 변화
  • 자동 인덱스 관리(Azure SQL Database에서만 사용 가능): 데이터베이스에 추가해야 할 인덱스와 제거해야 할 인덱스를 식별합니다.

TempDB 파일 크기 개선

SQL Server 2017 설치 프로그램에서는 파일당 최대 256GB(262,144MB)까지 TempDB 초기 파일 크기를 지정할 수 있습니다. 단, 즉시 파일 초기화(Instant File Initialization, IFI)가 활성화되지 않은 상태에서 파일 크기를 1GB 이상으로 설정하면 경고가 표시됩니다. 지정한 TempDB 데이터 파일의 초기 크기에 따라 IFI를 활성화하지 않으면 설치 시간이 기하급수적으로 증가할 수 있다는 점을 이해하는 것이 중요합니다.

스마트 차등 백업

sys.dm_db_file_space_usage에 새로운 열 modified_extent_page_count가 도입되어 데이터베이스 내 각 데이터베이스 파일의 차등 변경 사항을 추적할 수 있습니다. 이 새로운 열을 통해 DBA, SQL 커뮤니티, 백업 독립 소프트웨어 공급업체(ISV)는 데이터베이스 내 변경된 페이지 비율이 임계값(약 70~80%) 미만일 때 차등 백업을 수행하고, 그렇지 않으면 전체 데이터베이스 백업을 수행하는 스마트 백업 솔루션을 구축할 수 있습니다. 데이터베이스 변경량이 많을 경우 차등 백업을 완료하는 데 드는 비용과 시간이 전체 백업과 유사해져 차등 백업의 실질적인 이점이 없습니다. 오히려 데이터베이스 복원 시간만 늘어날 수 있습니다. 하지만 백업 솔루션에 이러한 지능을 더하면 차등 백업을 활용해 복원 및 복구 시간을 절약할 수 있습니다.

스마트 트랜잭션 로그 백업

새로운 동적 관리 함수(DMF)인 sys.dm_db_log_stats(database_id)가 출시되었습니다. 이 함수는 log_since_last_log_backup_mb라는 새로운 열을 노출하여, DBA, SQL 커뮤니티, 백업 ISV가 데이터베이스의 트랜잭션 활동에 기반한 백업을 수행하는 지능형 T-log 백업 솔루션을 구축할 수 있게 해줍니다. 이러한 T-log 백업 솔루션의 지능은 짧은 시간에 트랜잭션 활동이 급증하더라도 T-log 백업 빈도가 너무 낮으면 트랜잭션 로그 크기가 무분별하게 커지지 않도록 보장합니다. 또한 서버에 트랜잭션 활동이 없는데도 예약된 트랜잭션 로그 백업이 불필요하게 많은 T-log 백업 파일을 생성하는 상황을 방지하는 데도 도움이 됩니다. 그런 상황이 발생하면 저장 공간, 파일 관리, 복원 오버헤드가 불필요하게 늘어나기 때문입니다.

향상된 SELECT INTO 문

SQL Server 2017에서는 SELECT INTO 문에 ON 키워드를 사용하여 새 테이블을 생성할 파일그룹(filegroup) 이름을 지정할 수 있습니다. 기본적으로 테이블은 사용자의 기본 파일그룹에 생성됩니다. 이 기능은 이전 버전에서는 사용할 수 없었습니다.

분산 트랜잭션 지원

SQL Server 2017은 가용성 그룹에 속한 데이터베이스에 대한 분산 트랜잭션을 지원합니다. 이 지원에는 동일한 SQL Server 인스턴스의 데이터베이스와 서로 다른 SQL Server 인스턴스의 데이터베이스가 모두 포함됩니다. 단, 데이터베이스 미러링(database mirroring)으로 구성된 데이터베이스에는 분산 트랜잭션이 지원되지 않습니다.

새로운 가용성 그룹 기능

이 기능에는 클러스터리스(clusterless) 지원, Minimum Replica Commit 가용성 그룹 설정, Windows-Linux 크로스 OS 마이그레이션 및 테스트가 포함됩니다.

이 기능의 세부 사항은 다음과 같습니다.

  • 이제 가용성 그룹을 기본 클러스터(Windows Server 장애 조치 클러스터, WSFC) 없이 구성할 수 있으며, 혼합 환경(Windows와 Linux 또는 Docker의 인스턴스) 간에도 설정할 수 있습니다.
  • 새로운 Minimum Replica Commit 설정을 통해 특정 수의 보조 복제본(secondary replica)에서 트랜잭션을 커밋한 후에야 주 복제본(primary)에서 커밋하도록 지정할 수 있습니다.

새로운 동적 관리 뷰(DMV)

동적 관리 뷰(DMV)에는 다음과 같은 요소들이 포함됩니다.

  • sys.dm_db_log_stats: 트랜잭션 로그 파일에 대한 요약 수준의 특성과 정보를 노출하며, 트랜잭션 로그 상태 모니터링에 유용합니다.
  • sys.dm_tran_version_store_space_usage: 데이터베이스별로 그룹화된 버전 저장소(version store) 사용량에 미치는 영향을 확인할 수 있습니다. 이를 통해 테스트 환경에서 변경 전후의 워크로드를 프로파일링하고, 다른 데이터베이스가 버전 저장소를 함께 사용하더라도 시간에 따른 영향을 모니터링할 수 있습니다.
  • sys.dm_db_log_info: VLF(Virtual Log File) 정보를 노출하여 잠재적인 트랜잭션 로그 문제를 모니터링, 경고 및 예방할 수 있습니다.
  • sys.dm_d_stats_histogram: 통계를 검사하기 위한 새로운 동적 관리 뷰로, 아래 이미지와 같습니다.
SQL Server 2017의 새로운 기능 총정리: DBA와 개발자가 알아야 할 핵심 변화
  • sys.dm_os_host_info: 플랫폼, 배포판, 서비스 팩 수준, 언어 등의 정보를 노출합니다.
  • sys.dm_os_sys_info: 확장되어 소켓 수, 코어 수, 소켓당 코어 수와 같은 CPU 정보를 제공합니다.

인메모리(In-Memory) 기능 강화

SQL Server 2017의 인메모리 관련 변경 사항은 다음과 같습니다.

  • 이제 계산 열(computed column)과 해당 열에 대한 인덱스가 지원됩니다.
  • CASE 식, CROSS APPLY, TOP (N) WITH TIES가 네이티브 컴파일 모듈에서 지원됩니다.
  • JSON 명령이 CHECK 제약 조건과 네이티브 컴파일 모듈 모두에서 완전히 지원됩니다.
  • 시스템 프로시저 sp_spaceused가 메모리 최적화 테이블의 공간 정보를 올바르게 보고합니다.
  • 시스템 프로시저 sp_rename이 메모리 최적화 테이블과 네이티브 컴파일 모듈에서 작동합니다.
  • 메모리 최적화 테이블에 인덱스를 8개까지만 만들 수 있던 제한이 제거되었습니다.
  • 메모리 최적화 파일그룹 파일을 Azure Storage에 저장할 수 있습니다.

보안 강화

이제 CONTROL, ALTER, REFERENCES, TAKE OWNERSHIP, VIEW DEFINITION과 같은 데이터베이스 범위 자격 증명(database-scoped credential)에 대한 권한을 부여(GRANT), 거부(DENY), 철회(REVOKE)할 수 있습니다. 또한 ADMINISTER DATABASE BULK OPERATIONS 권한이 sys.fn_builtin_permissions에 표시됩니다.

고가용성 및 재해 복구

SQL Server 2017의 향상된 Always On 기능을 통해 미션 크리티컬한 가동 시간, 빠른 장애 조치, 손쉬운 설정, 읽기 가능한 보조 복제본의 부하 분산을 확보할 수 있습니다. 이는 Linux와 Windows를 아우르는 고가용성 및 재해 복구를 위한 통합 솔루션입니다. 또한 Azure 가상 머신에 비동기 복제본을 배치하여 하이브리드 고가용성을 구성할 수도 있습니다.

성능 개선

SQL Server 2017은 쿼리와 통계를 수집하고 표시하는 방식에 다음과 같은 변경 사항을 도입했습니다.

  • 새로운 DMV인 sys.dm_exec_query_statistics_xml을 사용하면 쿼리 프로파일링이 활성화되어 있는 한 세션과 계획을 연관 지을 수 있습니다. 아래 이미지는 이를 보여줍니다.
SQL Server 2017의 새로운 기능 총정리: DBA와 개발자가 알아야 할 핵심 변화
  • Showplan XML에는 이제 계획에 사용된 통계에 대한 정보가 포함되며, 실제 계획(actual plan)의 경우 런타임 메트릭과 해당 계획에서 경험한 상위 10개 대기 통계(wait statistics)도 포함됩니다. 이러한 대기 통계는 이제 쿼리 저장소(Query Store)에서도 추적됩니다.
  • 새로운 동적 관리 함수 sys.dm_db_stats_histogram을 사용하면 DBCC(Database Console Commands) 없이 프로그래밍 방식으로 히스토그램 정보에 접근할 수 있습니다.

결론

SQL Server 2017에는 구현에 도움이 될 수 있는 많은 변화가 있으며, 이를 활용하는 데 참고할 수 있는 방대한 자료도 널리 제공되고 있습니다. SQL Server 2017을 '단순한 Linux 포팅'이라고 생각할 수도 있지만, 핵심 데이터베이스 엔진에는 모든 플랫폼에 혜택을 주는 실질적인 개선 사항들이 담겨 있습니다. Microsoft는 SQL Server 2017 누적 업데이트(CU)를 통해 제품에 추가 기능을 계속해서 더하고 있으며, SQL Server 2017은 SQL Server 2016보다 더 오랜 기간 Microsoft의 완전한 지원을 받게 됩니다.

데이터베이스에 대해 더 자세히 알아보세요.

의견이나 질문이 있다면 피드백 탭을 이용해 주세요. 언제든지 대화를 시작할 수 있습니다.