Query시 발생하는 성능 문제 해결

호환성 수준(Compatibility Level)을 변경하는 쿼리다.

호환성 수준은 DB가 어떤 SQL Server 버전의 쿼리 동작 방식과 기능 집합을 따를지를 정하는 설정이다.

 

호환성 수준 값 해당 SQL Server 버전
80 SQL Server 2000
90 SQL Server 2005
100 SQL Server 2008
110 SQL Server 2012
120 SQL Server 2014
130 SQL Server 2016
140 SQL Server 2017
150 SQL Server 2019
160 SQL Server 2022

호환성 수준에 따른 버전은 위와 같다.

 

USE [master];
GO

ALTER DATABASE [AdventureWorks2017] SET QUERY_STORE = ON;
GO

ALTER DATABASE [AdventureWorks2017] SET QUERY_STORE (OPERATION_MODE = READ_WRITE);
GO

ALTER DATABASE [AdventureWorks2017] SET COMPATIBILITY_LEVEL = 100;
GO

사용한 쿼리는 위와 같다.

 

USE [master];
GO

ALTER DATABASE [AdventureWorks2017] SET COMPATIBILITY_LEVEL = 160;
GO

Github의 CreateRandomWorkloadGenerator에 해당하는 SQL 쿼리를 가져온다.

Github의 ExecuteRandomWorkload에 해당하는 SQL 쿼리를 가져온다.

 

두 버전에서 모두 실행을 해보고, 비교를 진행하기 위해 보고서를 찾아 들어온다.

 

설정과 강제 옵션

 

ARM Deploy

Azure Resource Manager(ARM) template

Azure 리소스를 선언적으로 정의하는 JSON 파일.

인프라를 코드로(Infrastructure as Code, IaC) 관리하고, 리소스 배포를 자동화하고, 반복 가능하게 만든다.

 

SKU(Stock Keeping Unit)

Azure에서는 리소스의 가격 등급(Pricing Tier)과 성능, 용량 등을 정의하는 단위를 의미한다.
예를 들어, SQL Database의 SKU는 Basic, Standard, Premium  등으로 나누며, 각기 다른 성능과 비용을 가진다.


Firewall rule(방화벽 규칙)

특정 IP 주소나 IP 주소 범위에서 Azure SQL Server로 들어오는 네트워크 트래픽을 허용하거나 차단하는 보안 규칙.

데이터베이스를 무단 액세스로부터 보호하는 첫 번째 방어선이다.

 

SQL DB 리소스 배포를 위한 ARM 탬플릿 Github 링크에서 json 코드를 가져온다. 

 

Azure 사이트에서 리소스를 배포한다.

 

azuredeploy.json을 가져와서 데이터베이스 SKU를 변경한다.

Basic 등급을 5 DTU(Database Transaction Unit)와 2GB의 저장 공간을 제공하는 가장 기본 서비스 계층이다.

여기서 capacity는 DTU를 의미한다.

 

,
{
    "type": "Microsoft.Sql/servers/firewallRules",
    "apiVersion": "2022-05-01-preview",
    "name": "[format('{0}/{1}', parameters('serverName'), 'AllowAllWindowsAzureIps')]",
    "dependsOn": [
    	"[resourceId('Microsoft.Sql/servers', parameters('serverName'))]"
    ],
    "properties": {
    	"startIpAddress": "0.0.0.0",
        "endIpAddress": "0.0.0.0"
    }
}

서버 방화벽 규칙(Firewall Rule) 추가하는 코드다.

"type": "Microsoft.Sql/servers" 리소스 정의 내부에 추가한다.

 

 

새롭게 추가한 firewall rule에서 preperties에 해당하는 IP는 구체적으로 지정해주면 좋다.

이런 Custom Json 형태로 리소스를 deploy하는 것이 가능하다.

 

+ Recent posts