SQL Server 기능 사용

적용 대상:SQL ServerAzure SQL 데이터베이스

WideWorldImporters는 OLTP 데이터베이스에서 SQL Server 기능을 사용합니다.

WideWorldImporters는 SQL Server 2016에 도입된 최신 기능을 포함하여 SQL Server의 많은 주요 기능을 선보이도록 설계되었습니다. 다음 표에서는 SQL Server 기능을 나열합니다. 또한 각 행은 WideWorldImporters에서 기능을 사용하는 방법에 대한 설명도 제공합니다.
 

SQL Server 기능 WideWorldImporters에서 사용
임시 테이블 모든 조회 스타일 참조 테이블과 StockItems, Customers 및 Suppliers와 같은 기본 엔터티를 포함하여 많은 임시 테이블이 있습니다. 임시 테이블을 사용하면 이러한 엔터티의 기록을 편리하게 추적할 수 있습니다.
JSON에 대한 AJAX 호출 애플리케이션은 AJAX 호출을 자주 사용하여 Persons, Customers, Suppliers 및 StockItems 테이블을 쿼리합니다. 호출은 JSON 형식으로 데이터를 반환합니다. 예를 들어 Website.SearchForCustomers 저장 프로시저를 참조하세요.
JSON 속성/값 모음 여러 테이블에는 테이블의 관계형 데이터를 확장하기 위한 JSON 데이터를 포함하는 열이 있습니다. 예를 들어 Application.SystemParameters에는 애플리케이션 설정에 대한 열이 있고 Application.People 사용자 기본 설정을 기록하는 열이 있습니다. 이러한 테이블은 nvarchar(max) 열을 사용하여 열 값이 유효한 JSON인지 확인하기 위해 기본 제공 ISJSON 함수를 사용하는 CHECK 제약 조건과 함께 JSON 데이터를 기록합니다.
행 수준 보안(RLS) RLS(행 수준 보안)는 역할 멤버 자격에 따라 Customers 테이블에 대한 액세스를 제한하는 데 사용됩니다. 각 영업 영역에는 역할과 사용자가 있습니다. 실행 중인 RLS 액세스 제한을 보려면 샘플 릴리스의 일부인 sample-script.zip 해당 스크립트를 사용합니다.
실시간 운영 분석 (데이터베이스의 전체 버전) 핵심 트랜잭션 테이블 Sales.InvoiceLinesSales.OrderLines 둘 다 운영 워크로드에 미치는 영향을 최소화하면서 트랜잭션 데이터베이스에서 분석 쿼리의 효율적인 실행을 지원하는 비클러스터형 columnstore 인덱스가 있습니다. 동일한 데이터베이스에서 트랜잭션 및 분석을 실행하는 것을 HTAP(하이브리드 트랜잭션/분석 처리)라고도 합니다. 이 동작을 확인하려면 샘플 릴리스의 일부인 sample-script.zip 해당 스크립트를 사용합니다.
PolyBase 이 PolyBase가 작동하는 것을 보려면 Azure Blob Storage 호스트된 공용 데이터 세트가 있는 외부 테이블을 사용하여 샘플 릴리스의 일부인 sample-script.zip의 해당 스크립트를 사용합니다.
메모리 내 OLTP (데이터베이스의 전체 버전) 테이블 형식은 모두 메모리 최적화되므로 TVP(테이블 반환 매개 변수)는 모두 메모리 최적화의 이점을 누릴 수 있습니다.

두 모니터링 테이블 Warehouse.VehicleTemperaturesWarehouse.ColdRoomTemperatures는 메모리 최적화됩니다. 메모리 최적화를 사용하면 ColdRoomTemperatures 테이블을 기존 디스크 기반 테이블보다 더 빠른 속도로 채울 수 있습니다. VehicleTemperatures 테이블은 JSON 페이로드를 보유하고 있으며 IoT 시나리오를 확장할 수 있습니다. VehicleTemperatures 테이블은 EventHubs, Stream Analytics 및 Power BI와 관련된 시나리오에 더 적합합니다.

Website.RecordColdRoomTemperatures 저장 프로시저는 기본적으로 컴파일되어 콜드 룸 온도 기록의 성능을 더욱 향상시킵니다.

실행 중인 In-Memory OLTP의 예를 보려면 샘플 릴리스의 일부인 workload-drivers.zip 차량 위치 워크로드 드라이버를 참조하세요.
클러스터형 columnstore 인덱스 (데이터베이스의 전체 버전) Warehouse.StockItemTransactions 테이블은 클러스터형 columnstore 인덱스를 사용합니다. 이 테이블의 행 수는 크게 증가할 것으로 예상되며 클러스터형 columnstore 인덱스는 테이블의 디스크 내 크기를 크게 줄이고 쿼리 성능을 향상시킵니다. 이 테이블의 수정은 삽입 전용이며 온라인 워크로드에서 이 테이블에 대한 업데이트/삭제가 없으며 클러스터형 columnstore 인덱스는 삽입 워크로드에 대해 잘 수행됩니다.
동적 데이터 마스킹 데이터베이스 스키마에서 데이터 마스킹은 Purchasing.Suppliers 테이블의 Suppliers에 대해 보관된 은행 세부 정보에 적용되었습니다. 관리자가 아닌 직원은 이 정보에 액세스할 수 없습니다.
Always Encrypted Always Encrypted 대한 데모는 샘플 릴리스의 일부인 다운로드 가능한 samples.zip에 포함되어 있습니다. 데모에서는 암호화 키, 중요한 데이터에 암호화를 사용하는 테이블, 테이블에 데이터를 삽입하는 작은 샘플 애플리케이션을 만듭니다.
스트레치 데이터베이스 Warehouse.ColdRoomTemperatures 테이블은 임시 테이블로 구현되었으며 샘플 데이터베이스의 전체 버전에서 메모리 최적화됩니다. 보관 테이블은 디스크 기반이며 Azure로 확장할 수 있습니다.
전체 텍스트 인덱스 전체 텍스트 인덱스는 사람, 고객 및 StockItems에 대한 검색을 개선합니다. 인덱스는 SQL Server 인스턴스에 전체 텍스트 인덱싱이 설치된 경우에만 쿼리에 적용됩니다. 비영구 계산 열은 StockItems 테이블에 인덱싱된 전체 텍스트인 데이터를 만드는 데 사용됩니다.

CONCAT은 전체 텍스트 인덱싱된 SearchData를 만들기 위해 필드를 연결하는 데 사용됩니다.
샘플에서 전체 텍스트 인덱스를 사용하도록 설정하려면 데이터베이스에서 다음 문을 실행합니다.

EXECUTE [Application].[Configuration_ConfigureFullTextIndexing]

프로시저가 아직 없는 경우 기본 전체 텍스트 카탈로그를 만든 다음 검색 보기를 해당 보기의 전체 텍스트 버전으로 바꿉니다.)

SQL Server 전체 텍스트 인덱스를 사용하려면 설치하는 동안 전체 텍스트 옵션을 선택해야 합니다. Azure SQL Database에는 전체 텍스트 인덱스를 사용하도록 설정하기 위한 특정 구성이 필요하지 않습니다.
인덱싱된 지속형 계산 열 SupplierTransactions 및 CustomerTransactions에 사용되는 인덱싱된 지속형 계산 열입니다.
CHECK 제약 조건 비교적 복잡한 검사 제약 조건은 Sales.SpecialDeals에 있습니다. 이렇게 하면 DiscountAmount, DiscountPercentage 및 UnitPrice 중 하나만 구성됩니다.
UNIQUE 제약 조건 Warehouse.StockItemStockGroups에 대해 많은 수의 생성(및 고유 제약 조건)이 설정됩니다.
테이블 분할 (데이터베이스의 전체 버전) Sales.CustomerTransactionsPurchasing.SupplierTransactions 테이블은 모두 PF_TransactionDate 파티션 함수 및 PS_TransactionDate 파티션 구성표를 사용하여 연도별로 분할됩니다. 분할은 큰 테이블의 관리 효율성 향상에 사용됩니다.
목록 처리 Website.OrderIDList 예제 테이블 형식이 제공됩니다. Website.InvoiceCustomerOrders 예제 프로시저에서 사용됩니다. 이 프로시저에서는 CTE(Common Table Expressions), TRY/CATCH, JSON_MODIFY, XACT_ABORT, NOCOUNT, THROW 및 XACT_STATE를 사용하여 단일 주문이 아닌 주문 목록을 처리하고 애플리케이션에서 데이터베이스 엔진으로의 왕복을 최소화하는 기능을 보여 줍니다.
GZip 압축 Warehouse.VehicleTemperature 보기에서 해당 테이블은 전체 센서 데이터를 보유합니다. 그러나 이 데이터가 몇 달이 넘으면 공간을 절약하도록 압축됩니다. COMPRESS 함수는 GZip 압축을 사용합니다.

Website.VehicleTemperatures 뷰는 이전에 압축된 데이터를 검색할 때 DECOMPRESS 함수를 사용합니다.
쿼리 저장소 데이터베이스에서 쿼리 저장소를 사용하도록 설정합니다. 몇 가지 쿼리를 실행한 후 다음 단계를 수행합니다.

1. Management Studio에서 데이터베이스를 엽니다.
2. 데이터베이스 아래에 있는 노드 쿼리 저장소를 엽니다.
3. 보고서 상위 리소스 소비 쿼리를 엽니다. 쿼리 실행을 확인하고 방금 실행한 쿼리에 대한 계획을 확인합니다.
STRING_SPLIT Sales.Invoices 테이블의 DeliveryInstructions 열에는 STRING_SPLIT 보여주는 데 사용할 수 있는 쉼표로 구분된 값이 있습니다.
감사 SQL Server 데이터베이스에서 다음 문을 실행하여 이 샘플 데이터베이스에 대해 감사를 사용하도록 설정할 수 있습니다.

EXECUTE [Application].[Configuration_ApplyAuditing]

Azure SQL Database에서 감사는 Azure Portal을 통해 구성됩니다.

로그인, 역할 및 권한과 관련된 보안 작업은 감사가 사용하도록 설정된 모든 시스템(표준 버전 시스템 포함)에 기록됩니다. 감사는 모든 시스템에서 사용할 수 있으며 추가 권한이 필요하지 않으므로 애플리케이션 로그로 전달됩니다. 보안 강화를 위해 보안 로그 또는 보안 폴더의 파일로 리디렉션해야 한다는 경고가 표시됩니다. 필요한 추가 구성을 설명하는 링크가 제공됩니다.

평가/개발자/엔터프라이즈 버전 시스템의 경우 모든 재무 트랜잭션 데이터에 대한 액세스가 감사됩니다.