SQL Server on Linux 기능
- 7분
예산 보유자에게 SQL Server 마이그레이션의 타당성을 입증하기 위해서는 시스템에서 경쟁적 이점을 제공할 수 있는 SQL Server의 기능을 파악해야 합니다.
SQL Server on Linux가 무엇인지 조사한 후에는 현재 사용 가능한 기능이 기존 및 향후 데이터 처리를 위한 Wide World Importers의 요구 사항을 충족하는지 확인하려고 합니다.
여기서는 SQL Server on Linux의 주요 기능에 대해 알아봅니다.
성능
SQL Server on Linux는 HTAP(하이브리드 트랜잭션 분석 처리) 솔루션을 제공하여 빠른 트랜잭션 처리량 및 반응형 분석이라는 경쟁적 요구를 지원합니다. HTAP는 SQL Server의 일부 핵심 성능 기술을 사용합니다.
메모리 내 OLTP(온라인 트랜잭션 처리)
메모리 최적화 테이블과 컴파일된 저장 프로시저를 결합한 경우 Wide World Importers는 트랜잭션 테이블에서 상당한 성능 향상을 볼 수 있습니다. 예를 들어 전자 상거래 웹 사이트에 대한 세션 상태를 작성하고 읽습니다.
Columnstore 인덱스
SQL Server는 행 데이터와 압축된 열 형식 데이터를 모두 지원합니다. 트랜잭션 테이블은 분석 쿼리를 작성할 때 행 저장소 인덱스 대신 columnstore 인덱스를 사용할 수도 있습니다. columnstore 인덱스를 사용하면 현재 분석 모음에서 트랜잭션 성능을 유지하면서 운영 데이터에 대한 실시간 보고 쿼리를 실행할 수 있습니다.
쿼리 저장소
DBA 팀은 월별 성능 조정 작업을 완료하여 올바른 쿼리 계획이 사용되도록 합니다. 쿼리 성능을 모니터링하고 실행 계획의 변경 내용이 성능에 영향을 주는 쿼리 계획을 되돌려줍니다. 또한 팀은 가장 오래 실행되는 상위 10개의 쿼리를 개발 책임자에게 보고하고 리소스 잠금이 있는지 확인합니다. 쿼리 저장소는 이러한 모든 작업을 지원하며 Transact-SQL을 통해 사용할 수 있습니다.
ALTER DATABASE <database_name>
SET QUERY_STORE (OPERATION_MODE = READ_WRITE);
자동 튜닝 및 지능형 쿼리 처리
쿼리 저장소를 사용하도록 설정한 후에 자동 계획 선택 수정 기능을 사용하도록 설정할 수 있습니다. 자동 튜닝을 사용하는 경우 SQL Server는 쿼리 성능을 모니터링합니다. 새 쿼리 계획이 이전 버전보다 더 안 좋은 경우 새 계획을 성능이 더 좋은 이전 버전으로 바꿀 수 있습니다. 이 옵션은 다음 ALTER
문을 사용하여 데이터베이스 수준에서 사용할 수 있습니다.
ALTER DATABASE <database_name>
SET AUTOMATIC_TUNING ( FORCE_LAST_GOOD_PLAN = ON );
IQP(지능형 쿼리 처리)는 워크로드 성능을 자동으로 개선하고 최적화하는 SQL Server 2022의 새로운 기능 집합입니다. IQP의 주요 기능은 다음과 같습니다.
적응 조인(일괄 처리 모드): 적응 조인은 실제 입력 행에 따라 런타임 중에 조인 유형을 동적으로 선택합니다.
인터리브드 실행: 고정된 추정치 대신 첫 번째 컴파일에서 발생한 다중 문 테이블 반환 함수의 실제 카디널리티를 사용합니다.
메모리 부여 피드백(일괄 처리 모드): 일괄 처리 모드 쿼리에 디스크로 분산되는 작업이 있는 경우 연속 실행을 위해 더 많은 메모리를 추가합니다. 쿼리가 할당된 메모리의 > 50%를 낭비하는 경우 연속 실행을 위한 메모리 부여 크기를 줄입니다.
대략적 고유 개수: 고성능 및 메모리 사용이 적은 점을 활용하여 빅 데이터 시나리오에서 대략적 고유 개수를 제공합니다.
Rowstore의 일괄 처리 모드: columnstore 인덱스를 요구하지 않고 CPU 바인딩 관계형 DW 워크로드에 대한 일괄 처리 모드를 제공합니다.
메모리 부여 피드백(행 모드): 행 모드 쿼리에 디스크로 분산되는 작업이 있는 경우 연속 실행을 위해 더 많은 메모리를 추가합니다. 쿼리가 할당된 메모리의 > 50%를 낭비하는 경우 연속 실행을 위한 메모리 부여 크기를 줄입니다.
스칼라 UDF 인라인 처리: 스칼라 UDF는 호출 쿼리에 "인라인"되는 동등한 관계형 식으로 변환되어 성능이 크게 향상되는 경우가 많습니다.
테이블 변수 지연 컴파일: 고정된 추측 대신 첫 번째 컴파일에서 발생한 테이블 변수의 실제 카디널리티를 사용합니다.
근사 백분위수: 대략적인 백분위수 집계 함수를 사용하여 큰 데이터 세트에서 허용할 수 있는 순위 기반 오류 범위 내에서 백분위수를 신속하게 계산하여 빠른 의사 결정을 지원합니다.
CE(카디널리티 추정) 피드백: 비효율적인 CE 가정으로 인해 쿼리 성능이 저하되는 워크로드를 최적화하기 위해 반복 쿼리에 대한 카디널리티 예상치를 자동으로 조정합니다. CE 피드백은 지정된 쿼리 및 데이터 배포에 더 잘 맞는 모델 가정을 식별하고 사용하여 쿼리 실행 계획 품질을 향상시킵니다.
DOP(병렬 처리 수준) 피드백: 비효율적인 병렬 처리로 인해 성능 문제가 발생할 수 있는 워크로드에 최적화하도록 반복 쿼리에 대한 병렬 처리 수준을 자동으로 조정합니다. 쿼리 저장소를 사용하도록 설정해야 합니다.
매개 변수 민감도 계획 최적화: 매개 변수 민감도 계획 최적화는 매개 변수가 있는 쿼리에 대해 캐시된 단일 계획이 들어오는 모든 매개 변수 값(예: 비유형 데이터 배포)에 최적이 아닌 시나리오를 해결합니다.
메모리 할당 피드백(백분위수): 과거 쿼리 실행을 통합하여 비침투적인 방식으로 메모리 할당 피드백의 기존 제한 사항을 해결하고 피드백을 세분화합니다.
메모리 부여 피드백 지속성: 메모리 부여 피드백을 유지하는 새로운 기능을 제공합니다. 데이터베이스 및 READ_WRITE 모드에서 쿼리 저장소를 사용하도록 설정해야 합니다.
CE 피드백 지속성: 데이터베이스 및 모드에서
READ_WRITE
쿼리 저장소를 사용하도록 설정해야 합니다.DOP 피드백 지속성: 데이터베이스 및 모드에서
READ_WRITE
쿼리 저장소를 사용하도록 설정해야 합니다.최적화된 계획 강제 적용: 강제 쿼리를 반복하기 위한 컴파일 오버헤드를 줄입니다. 자세한 내용은 쿼리 저장소를 사용하여 최적화된 계획을 강제로 적용하는 방법을 참조하세요.
IQP를 사용하면 최상의 성능을 활용하기 위해 코드를 다시 작성하거나 데이터베이스 스키마를 변경할 필요가 없습니다. 데이터베이스를 호환성 수준 150 이상으로 업그레이드만 하면 됩니다.
ALTER DATABASE <database_name> SET COMPATIBILITY_LEVEL = 160;
보안
SQL Server on Linux는 Always Encrypted, 행 수준 보안 및 동적 데이터 마스킹과 같은 고급 보안 기능을 지원하여 디스크 상, 메모리 내 또는 전송 중인 데이터를 보호합니다. 이러한 기능은 Standard Edition을 비롯한 모든 버전에서 지원됩니다.
TDE(투명한 데이터 암호화) 는 미사용 데이터를 암호화합니다. 즉, 데이터가 데이터베이스 파일에 저장될 때입니다. 데이터는 데이터베이스와 백업 모두에서 악의적인 사용자로부터 보호됩니다.
Always Encrypted 는 데이터를 소유한 사용자만 보고 처리할 수 있도록 합니다. 데이터베이스 관리자처럼 데이터를 관리하는 사용자는 데이터를 볼 수 없습니다. Always Encrypted를 사용하는 경우:
- 암호화된 데이터를 먼저 해독하지 않고 쿼리할 수 있습니다.
- 데이터는 서버 메모리로 이동할 때와 서버에서 신뢰할 수 있는 클라이언트 앱으로 이동할 때 미사용 상태로 보호됩니다.
- 클라이언트 드라이버에서 암호화 및 암호 해독이 진행되어 해당 프로세스가 클라이언트 애플리케이션에 투명하게 공개됩니다.
- 신뢰할 수 있는 애플리케이션 및 데이터의 소유자만 액세스할 수 있습니다. 애플리케이션 개발자 및 데이터베이스 관리자는 CEK(열 암호화 키)에 액세스할 수 없습니다.
감사 추적은 데이터베이스 엔진에서 발생한 이벤트와 해당 이벤트를 수행한 사람을 추적합니다. 감사된 이벤트는 이벤트 로그 또는 감사 파일에 저장될 수 있으며 공격 및 데이터 위반과 같은 문제를 조사하는 데 사용할 수 있습니다.
행 수준 보안 은 쿼리를 실행하는 사람에 따라 테이블 내의 특정 행에 대한 액세스를 제어합니다. 예를 들어, 그룹 멤버 자격 또는 실행 컨텍스트에 따라 데이터에 액세스할 수 있는 사용자를 제어할 수 있습니다.
동적 데이터 마스킹 은 데이터의 일부를 마스킹합니다. 마스터 방법으로는 열에 있는 모든 데이터 마스킹, 메일 주소 마스킹, 숫자 데이터의 난수 마스킹 및 사용자 지정 문자열 마스킹의 네 가지가 있습니다. 예를 들어, 사용자 지정 문자열 마스킹을 사용하여 사회 보장 번호의 마지막 4자리를 제외한 모든 숫자를 마스킹할 수 있습니다.
데이터 검색 및 분류 는 데이터베이스의 중요한 데이터(예: 개인 데이터)를 식별, 레이블 및 보고합니다. 이 도구는 개인 정보 보호법을 보다 쉽게 준수할 수 있도록 하고 가장 가치 있는 데이터가 포함된 데이터베이스를 강화하는 SSMS(SQL Server Management Studio) 내의 도구입니다. 데이터 검색 및 분류는 ADS(Advanced Data Security) 패키지의 일부인 서비스입니다.
취약성 평가 는 데이터베이스의 취약성을 식별합니다. 서버 구성 및 데이터베이스 디자인으로 인해 발생할 수 있는 약점을 알고 나면 일반적인 공격을 완화하여 방지할 수 있습니다. 취약성 평가는 또 다른 ADS 서비스입니다.
SQL Server 에이전트
SQL Server 에이전트는 예약된 작업, 자동화된 작업, 유지 관리 태스크를 실행합니다. SQL Server 에이전트는 다음과 같은 세 가지 워크로드를 지원합니다.
- Transact-SQL 작업
- DB 메일
- 로그 전달
기본적으로 SQL Server 에이전트는 사용하지 않도록 설정되어 있지만 명령줄 mssql-conf
유틸리티를 사용하여 설치하고 사용하도록 설정할 수 있습니다.
sudo /opt/mssql/bin/mssql-conf set sqlagent.enabled true
sudo systemctl restart mssql-server
고가용성
SQL Server에는 허용되는 내결함성 수준을 지정하는 여러 가지 방법이 있습니다. SQL Server on Linux는 Always On 가용성 그룹 및 Always On 장애 조치(failover) 클러스터 인스턴스를 지원합니다. 이러한 두 옵션 모두 각 서버에 설치된 패키지가 필요합니다 mssql-server-ha
. Linux는 호스트 운영 체제에 긴밀하게 통합되지는 않지만 WSCF(Windows Server 장애 조치(failover) 클러스터링)와 동일한 Pacemaker를 통한 클러스터링을 지원합니다.
가동 중지 시간에 허용되는 사항에 더 많은 유연성이 있는 경우, SQL 에이전트를 통한 로그 전달 기능은 준비된 대기 상태(웜 대기)를 제공하여 서버 손실에서 복구하는 데 사용할 수 있습니다.
SQL Server on Linux의 또 다른 솔루션은 Kubernetes와 같은 도구를 사용하여 오케스트레이션된 컨테이너에서 실행할 수 있는 기능입니다. 오케스트레이션 도구는 항상 SQL Server를 실행하는 노드가 있는지 확인합니다. 해당 노드가 실패하면 다른 인스턴스가 자동으로 부트스트랩됩니다. 좀 더 강력한 가용성이 필요한 경우 컨테이너에서 Always On 가용성 그룹을 실행할 수 있습니다.
기타 유용한 기능
PolyBase
많은 조직이 다양한 시스템에 데이터를 보유합니다. 아마도 다른 팀이 시스템을 선택하거나 다른 회사와 합병하거나 다른 역사적 이유로 합병할 때 다른 요구 사항이 있을 수 있습니다. 일반적으로 이러한 시스템 경계를 넘어 데이터를 통합하여 사용자의 질문에 답변하는 것은 어렵습니다.
SQL Server에 제품 카탈로그의 판매를 기록하는 데이터가 있지만 제품을 만드는 데 드는 비용을 기록하는 데이터가 SAP HANA 데이터베이스에 있다고 가정합니다. 이윤을 분석하는 보고서를 만들려면 두 데이터베이스의 정보가 모두 필요합니다. 과거에는 다음과 같이 했을 것입니다.
- ETL(추출, 변환, 로드) 패키지를 사용하여 한 데이터베이스 시스템에서 다른 데이터베이스로 데이터를 마이그레이션합니다.
- 두 데이터베이스를 모두 쿼리한 다음 일부 사용자 지정 코드를 작성하여 결과를 단일 보고서에 조인하고 통합합니다.
이러한 두 방법은 다 복잡하며, 제대로 하려면 상당한 개발 시간이 필요할 수 있습니다.
PolyBase를 사용하면 SQL Server에서 외부 테이블을 만들 수 있습니다. 외부 테이블은 외부 시스템에 대한 연결과 거기에 호스트된 데이터 세트입니다. 만든 후에는 클라이언트에서 내부 테이블과 정확히 같은 방식으로 외부 테이블에 쿼리를 제출할 수 있습니다.
JOIN
쿼리는 외부 테이블의 데이터를 내부 테이블과 통합할 수 있습니다. 여기에서 볼 수 있듯이 PolyBase를 사용하면 여러 시스템이 데이터에 적용하는 경계를 제거하고 위치에 관계없이 필요한 비즈니스 데이터를 더 쉽게 분석할 수 있습니다.
참고
Linux 운영 체제에서 PolyBase는 SQL Server 2019 이상 버전에서 지원됩니다. 이 패키지를 사용하려면 SQL Server 2022뿐만 아니라 mssql-server-polybase
패키지를 설치해야 합니다.
기계 학습 서비스
기계 학습에서 일부 복잡한 시스템의 동작을 모델링하기 위해 대규모 데이터 세트가 사용됩니다. 시스템의 관찰된 동작을 정확하게 예측하는 모델이 개발된 경우 이 모델은 나중에 해당 시스템이 어떻게 동작할지 예측하는 데 사용됩니다. 종종 오픈 소스인 정교한 코드 라이브러리는 R 및 Python 언어로 개발되었습니다. 이러한 라이브러리는 데이터 세트를 준비하고, 기능을 추가하고, 모델을 학습시키고, 학습된 모델의 정확도를 평가하고, 다른 클라이언트가 호출할 수 있도록 해당 모델을 배포할 수 있습니다.
SQL Server Machine Learning Services를 사용하면 SQL Server 데이터베이스의 데이터에 대해 이러한 R 및 Python 스크립트를 실행할 수 있습니다. PyTorch, TensorFlow, SciKit-Learn 등을 비롯한 인기 있는 기계 학습 및 데이터 과학 프레임워크를 추가할 수 있습니다.
참고
Linux 운영 체제에서 SQL Server Machine Learning은 SQL Server 2019 이상 버전에서 지원됩니다. 이를 사용하려면 추가 패키지를 추가해야 합니다. 예를 들어 모든 기계 학습 코드에 Python을 사용하려면 패키지를 설치합니다
mssql-mlservices-mlm-py-9.4.7
. R에 해당하는 방법은 패키지를mssql-mlservices-mlm-r-9.4.7
설치해야 합니다.
그래프 지원
SQL Server는 그래프 기반 데이터를 저장하고 쿼리하는 네이티브 지원을 제공합니다. SQL Server는 데이터를 일련의 엔터티(노드)와 이러한 엔터티 간 관계(에지)로 저장합니다.
전체 텍스트 검색
전체 텍스트 검색을 사용하여 언어 규칙을 준수하는 쿼리를 텍스트 데이터에 대해 실행할 수 있습니다. 예를 들어 단어를 run
검색할 때 전체 텍스트 검색은 단어 run
의 형태(예: ran
및 running
)를 포함하는 결과를 반환합니다.
이 기능은 기본적으로는 설치되지 않습니다. Linux에서는 mssql-server-fts
패키지를 설치하여 이러한 기능을 사용하도록 설정합니다.
ETL 워크로드
SSIS(SQL Server Integration Services) 패키지는 SQL Server on Linux에서 실행할 수 있습니다. SQL Server on Linux에 대해서만 실행하도록 제한되지 않습니다. 이러한 패키지는 Windows 온-프레미스나 클라우드에서 실행되는 Microsoft SQL Server 또는 컨테이너에서 실행되는 SQL Server에 연결할 수도 있습니다.
SQL Server Data Tools를 실행하는 Windows 머신에서 SSIS 패키지를 작성하고 유지 관리해야 합니다.