자동 조정Automatic tuning

적용 대상:Applies to: 예SQL Server 2017(14.x)SQL Server 2017 (14.x)yesSQL Server 2017(14.x)SQL Server 2017 (14.x) 이상 예Azure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL Database적용 대상:Applies to: 예SQL Server 2017(14.x)SQL Server 2017 (14.x)yesSQL Server 2017(14.x)SQL Server 2017 (14.x) and later 예Azure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL Database

자동 튜닝은 잠재적 쿼리 성능 문제에 대한 정보를 제공하고, 솔루션을 권장하며, 식별된 문제를 자동으로 해결하는 데이터베이스 기능입니다.Automatic tuning is a database feature that provides insight into potential query performance problems, recommend solutions, and automatically fix identified problems.

에서 도입 된 자동 조정은 SQL Server 2017(14.x)SQL Server 2017 (14.x) 잠재적 성능 문제가 감지 될 때마다 사용자에 게 알리고 정정 작업을 적용 하거나에서 데이터베이스 엔진Database Engine 성능 문제를 자동으로 해결할 수 있도록 합니다.Automatic tuning, introduced in SQL Server 2017(14.x)SQL Server 2017 (14.x), notifies you whenever a potential performance issue is detected and lets you apply corrective actions, or lets the 데이터베이스 엔진Database Engine automatically fix performance problems. 자동 조정을 SQL ServerSQL Server 사용 하면 쿼리 실행 계획 선택 재발으로 인 한 성능 문제를 식별 하 고 해결할 수 있습니다.Automatic tuning SQL ServerSQL Server enables you to identify and fix performance issues caused by query execution plan choice regressions. 또한의 자동 조정은 Azure SQL DatabaseAzure SQL Database 필요한 인덱스를 만들고 사용 하지 않는 인덱스를 삭제 합니다.Automatic tuning in Azure SQL DatabaseAzure SQL Database also creates necessary indexes and drops unused indexes. 쿼리 실행 계획에 대 한 자세한 내용은 실행 계획을 참조 하세요.For more information on query execution plans, see Execution Plans.

SQL Server 데이터베이스 엔진SQL Server Database Engine 데이터베이스에서 실행 되는 쿼리를 모니터링 하 고 자동으로 작업의 성능을 향상 시킵니다.The SQL Server 데이터베이스 엔진SQL Server Database Engine monitors the queries that are executed on the database and automatically improves performance of the workload. 에는 데이터베이스 엔진Database Engine 데이터베이스를 작업에 동적으로 적용 하 여 쿼리 성능을 자동으로 조정 하 고 향상 시킬 수 있는 기본 제공 인텔리전스 메커니즘이 있습니다.The 데이터베이스 엔진Database Engine has a built-in intelligence mechanism that can automatically tune and improve performance of your queries by dynamically adapting the database to your workload. 다음과 같은 두 가지 자동 조정 기능을 사용할 수 있습니다.There are two automatic tuning features that are available:

  • 자동 계획 수정매개 변수 민감도 또는 매개 변수 스니핑 문제와 같은 문제를 일으키는 쿼리 실행 계획을 식별 하 고, 회귀를 발생 하기 전에 마지막으로 알려진 좋은 계획을 적용 하 여 쿼리 실행 계획 관련 성능 문제를 해결 합니다.Automatic plan correction identifies problematic query execution plans, such as a parameter sensitivity or parameter sniffing issues, and fixes query execution plan-related performance problems by forcing the last known good plan before the regression occurred. 적용 대상: SQL ServerSQL Server (SQL Server 2017(14.x)SQL Server 2017 (14.x)부터 시작) 및 Azure SQL DatabaseAzure SQL DatabaseApplies to: SQL ServerSQL Server (Starting with SQL Server 2017(14.x)SQL Server 2017 (14.x)) and Azure SQL DatabaseAzure SQL Database

  • 자동 인덱스 관리 는 데이터베이스에 추가 되어야 하는 인덱스 및 제거 되어야 하는 인덱스를 식별 합니다.Automatic index management identifies indexes that should be added in your database, and indexes that should be removed. 적용 대상: Azure SQL DatabaseAzure SQL DatabaseApplies to: Azure SQL DatabaseAzure SQL Database

자동 조정을 사용하는 이유는 무엇입니까?Why automatic tuning?

클래식 데이터베이스 관리의 세 가지 주요 태스크는 워크 로드를 모니터링 하 고, 중요 한 Transact-SQLTransact-SQL 쿼리를 식별 하 고, 성능 향상을 위해 추가 해야 하는 인덱스를 식별 하는 것입니다. 또는 거의 사용 되지 않으며 성능을 향상 시키기 위해 제거할 수 있는 인덱스를 식별 합니다.Three of the main tasks in classic database administration are monitoring the workload, identifying critical Transact-SQLTransact-SQL queries, and identifying indexes that should be added to improve performance, or indexes that are rarely used and could be removed to improve performance. SQL Server 데이터베이스 엔진SQL Server Database Engine 모니터링 해야 하는 쿼리 및 인덱스에 대 한 자세한 정보를 제공 합니다.The SQL Server 데이터베이스 엔진SQL Server Database Engine provides detailed insight into the queries and indexes that you need to monitor. 그러나 데이터베이스를 지속적으로 모니터링 하는 작업은 특히 많은 데이터베이스를 처리할 때 어렵고 지루한 작업입니다.However, constantly monitoring a database is a hard and tedious task, especially when dealing with many databases. 매우 많은 수의 데이터베이스를 관리 하는 것은 효율적이 지 않을 수 있습니다.Managing a huge number of databases might be impossible to do efficiently. 수동으로 데이터베이스를 모니터링 하 고 튜닝 하는 대신 자동 조정 기능을 사용 하 여 일부 모니터링 및 튜닝 작업을 위임 하는 것을 고려할 수 있습니다 데이터베이스 엔진Database Engine .Instead of monitoring and tuning your database manually, you might consider delegating some of the monitoring and tuning actions to the 데이터베이스 엔진Database Engine using automatic tuning feature.

자동 조정의 작동 방식은 무엇입니까?How does automatic tuning work?

자동 조정은 워크 로드의 특성을 지속적으로 학습 하 고 잠재적인 문제 및 향상 된 기능을 식별 하는 연속 모니터링 및 분석 프로세스입니다.Automatic tuning is a continuous monitoring and analysis process that constantly learns about the characteristics of your workload and identifies potential issues and improvements.

자동 조정 프로세스

이 프로세스를 통해 워크 로드의 성능을 향상 시킬 수 있는 인덱스 및 계획과 워크 로드에 영향을 주는 인덱스를 검색 하 여 데이터베이스를 작업에 동적으로 적용할 수 있습니다.This process enables the database to dynamically adapt to your workload by finding what indexes and plans might improve the performance of your workloads and what indexes affect your workloads. 이러한 결과를 바탕으로 자동 조정은 워크 로드의 성능을 향상 시키는 튜닝 작업을 적용 합니다.Based on these findings, automatic tuning applies tuning actions that improve the performance of your workload. 또한 자동 조정은 변경 사항을 구현한 후 데이터베이스의 성능을 지속적으로 모니터링 하 여 워크 로드의 성능을 향상 시킵니다.In addition, automatic tuning continuously monitors the performance of the database after implementing any changes to ensure that it improves performance of your workload. 성능을 향상 시 키 지 않는 작업은 자동으로 되돌려집니다.Any action that didn't improve performance is automatically reverted. 이 확인 프로세스는 자동 조정에서 변경한 내용이 작업의 전체 성능을 저하 시 키 지 않도록 하는 주요 기능입니다.This verification process is a key feature that ensures any change made by automatic tuning does not decrease the overall performance of your workload.

자동 플랜 수정Automatic plan correction

자동 계획 수정은 실행 계획 선택 회귀 를 식별 하 고 마지막으로 성공한 계획을 적용 하 여 문제를 자동으로 해결 하는 자동 조정 기능입니다.Automatic plan correction is an automatic tuning feature that identifies execution plan choice regression and automatically fixes the issue by forcing the last known good plan. 쿼리 실행 계획 및 쿼리 최적화 프로그램에 대 한 자세한 내용은 쿼리 처리 아키텍처 가이드를 참조 하세요.For more information about query execution plans and the Query Optimizer, see the Query Processing Architecture Guide.

중요

자동 계획 수정은 데이터베이스에서 작업을 추적 하는 쿼리 저장소에 따라 달라 집니다.Automatic plan correction depends on Query Store being enabled in the database for workload tracking.

실행 계획 선택 회귀 란 무엇 인가요?What is execution plan choice regression?

SQL Server 데이터베이스 엔진SQL Server Database Engine 다른 실행 계획을 사용 하 여 쿼리를 실행할 수 있습니다 Transact-SQLTransact-SQL .The SQL Server 데이터베이스 엔진SQL Server Database Engine may use different execution plans to execute the Transact-SQLTransact-SQL queries. 쿼리 계획은 통계, 인덱스 및 기타 요인에 따라 달라 집니다.Query plans depend on the statistics, indexes, and other factors. 쿼리를 실행 하는 데 사용 해야 하는 최적의 계획은 Transact-SQLTransact-SQL 이러한 요인의 변경 내용에 따라 시간이 지남에 따라 변경 될 수 있습니다.The optimal plan that should be used to execute a Transact-SQLTransact-SQL query might change over time depending on changes in these factors. 경우에 따라 새 계획이 이전 계획 보다 더 좋을 수도 있고, 새 계획으로 인해 매개 변수 민감도 또는 매개 변수 스니핑 관련 문제 등의 성능 재발이 발생할 수도 있습니다.In some cases, the new plan might not be better than the previous one, and the new plan might cause a performance regression, such as a parameter sensitivity or parameter sniffing related issue.

쿼리 실행 계획 선택 회귀Query execution plan choice regression

계획 선택 재발이 발생 한 것을 확인할 때마다 이전 좋은 계획을 찾아 현재 계획 대신 사용 하도록 강제 해야 합니다.Whenever you notice a plan choice regression has occurred, you should find a previous good plan and force it to be used instead of the current one. 프로시저를 사용 하 여이 작업을 수행할 수 있습니다 sp_query_store_force_plan .This can be done by using the sp_query_store_force_plan procedure. 의에서는 재발 된 데이터베이스 엔진Database Engine SQL Server 2017(14.x)SQL Server 2017 (14.x) 계획 및 권장 되는 정정 작업에 대 한 정보를 제공 합니다.The 데이터베이스 엔진Database Engine in SQL Server 2017(14.x)SQL Server 2017 (14.x) provides information about regressed plans and recommended corrective actions. 또한를 데이터베이스 엔진Database Engine 사용 하 여이 프로세스를 완전히 자동화 하 고 데이터베이스 엔진Database Engine 계획 변경과 관련 된 모든 문제를 해결할 수 있습니다.Additionally, 데이터베이스 엔진Database Engine enables you to fully automate this process and let 데이터베이스 엔진Database Engine fix any problem found related to the plan change.

중요

자동 계획 수정은 데이터베이스 호환성 수준 업그레이드의 범위에서 사용 되어야 합니다 .이는 기준이 캡처된 후 작업 업그레이드 위험을 자동으로 완화 하기 위한 것입니다.Automatic plan correction should be used in the scope of a database compatibility level upgrade, after a baseline has been captured, to automatically mitigate workload upgrade risks. 이 사용 사례에 대 한 자세한 내용은 최신 SQL Server으로 업그레이드 하는 동안 성능 안정성 유지를 참조 하세요.For more information about this use case, see Keep performance stability during the upgrade to newer SQL Server.

자동 계획 선택 수정Automatic plan choice correction

데이터베이스 엔진Database Engine계획 선택 재발이 검색 될 때마다는 마지막으로 알려진 좋은 계획으로 자동으로 전환할 수 있습니다.The 데이터베이스 엔진Database Engine can automatically switch to the last known good plan whenever a plan choice regression is detected.

쿼리 실행 계획 선택 수정Query execution plan choice correction

데이터베이스 엔진Database Engine 잘못 된 계획 대신 사용 해야 하는 계획을 포함 하 여 잠재적인 계획 선택 회귀를 자동으로 검색 합니다.The 데이터베이스 엔진Database Engine automatically detects any potential plan choice regression, including the plan that should be used instead of the wrong plan. 회귀를 데이터베이스 엔진Database Engine 발생 하기 전에 마지막으로 알려진 좋은 계획을 적용 하는 경우 강제 계획의 성능을 자동으로 모니터링 합니다.When the 데이터베이스 엔진Database Engine applies the last known good plan before the regression occurred, it automatically monitors the performance of the forced plan. 강제 계획이 재발 된 계획 보다 더 적합 하지 않은 경우 새 계획이 강제로 적용 되지 않으며에서 데이터베이스 엔진Database Engine 새 계획을 컴파일합니다.If the forced plan is not better than the regressed plan, the new plan will be unforced and the 데이터베이스 엔진Database Engine will compile a new plan. 에서 데이터베이스 엔진Database Engine 강제 계획이 회귀 된 계획 보다 더 좋은지 확인 하는 경우 강제 계획이 보존 됩니다.If the 데이터베이스 엔진Database Engine verifies that the forced plan is better than the regressed plan, the forced plan will be retained. 재컴파일이 발생할 때까지 유지 됩니다 (예: 다음 통계 업데이트 또는 스키마 변경).It will be retained until a recompile occurs (for example, on the next statistics update or schema change). 계획 강제 적용 및 강제 적용할 수 있는 계획 유형에 대 한 자세한 내용은 강제 제한 계획을 참조 하세요.For more information about plan forcing and types of plans that can be forced, see Plan forcing limitations.

참고

SQL ServerSQL Server계획 강제 적용 작업이 확인 되기 전에 인스턴스를 다시 시작 하는 경우에는 해당 계획이 자동으로 강제 적용 되지 않습니다.If the SQL ServerSQL Server instance is restarted before a plan forcing action is verified, that plan will be automatically unforced. 그렇지 않으면 다시 시작할 때 계획 강제 적용이 지속 됩니다 SQL ServerSQL Server .Otherwise, plan forcing is persisted on SQL ServerSQL Server restarts.

자동 계획 선택 수정 사용Enabling automatic plan choice correction

데이터베이스당 자동 조정 기능을 사용 하도록 설정 하 고 일부 계획 변경 회귀를 검색할 때마다 마지막 좋은 계획을 강제 적용 하도록 지정할 수 있습니다.You can enable automatic tuning per database and specify that the last good plan should be forced whenever some plan change regression is detected. 다음 명령을 사용하여 자동 튜닝이 활성화됩니다.Automatic tuning is enabled using the following command:

ALTER DATABASE <yourDatabase>
SET AUTOMATIC_TUNING ( FORCE_LAST_GOOD_PLAN = ON ); 

이 옵션을 사용 하도록 설정 하면에서 데이터베이스 엔진Database Engine 예상 CPU 이득을 10 초 이상으로 설정 하거나 새 계획의 오류 개수가 권장 계획의 오류 수보다 많은 권장 사항을 자동으로 적용 하 여 강제 계획이 현재 계획 보다 더 좋은지 확인 합니다.Once you enable this option, the 데이터베이스 엔진Database Engine will automatically force any recommendation where the estimated CPU gain is higher than 10 seconds, or the number of errors in the new plan is higher than the number of errors in the recommended plan, and verify that the forced plan is better than the current one.

대안 - 수동 계획 선택 수정Alternative - manual plan choice correction

자동 튜닝을 사용 하지 않으면 사용자가 주기적으로 시스템을 모니터링 하 고 회귀 된 쿼리를 찾아야 합니다.Without automatic tuning, users must periodically monitor the system and look for the queries that have regressed. 계획을 회귀 해제 한 경우 사용자는 이전의 좋은 계획을 찾아 프로시저를 사용 하 여 현재 계획을 대신 적용 해야 합니다 sp_query_store_force_plan .If any plan has regressed, the user should find a previous good plan and force it instead of the current one by using sp_query_store_force_plan procedure. 통계 또는 인덱스 변경으로 인해 이전 계획이 유효 하지 않을 수 있기 때문에 마지막으로 알려진 좋은 계획을 적용 하는 것이 가장 좋습니다.The best practice would be to force the last known good plan because older plans might be invalid due to statistic or index changes. 마지막으로 성공한 계획을 강제 적용 하는 사용자는 강제 계획을 사용 하 여 실행 되는 쿼리의 성능을 모니터링 하 고 강제 계획이 예상 대로 작동 하는지 확인 합니다.The user who forces the last known good plan should monitor performance of the query that is executed using the forced plan and verify that forced plan works as expected. 모니터링 및 분석의 결과에 따라 계획을 강제 적용 하거나 사용자가 쿼리를 다시 작성 하는 등의 방법으로 쿼리를 최적화 하는 다른 방법을 찾아야 합니다.Depending on the results of monitoring and analysis, the plan should be forced or the user should find another way to optimize the query, such as rewriting it. 에서 최적의 계획을 적용할 수 있기 때문에 수동으로 강제 계획을 강제 적용할 수 없습니다 데이터베이스 엔진Database Engine .Manually forced plans should not be forced forever, because the 데이터베이스 엔진Database Engine should be able to apply optimal plans. 사용자 또는 DBA는 프로시저를 사용 하 여 계획을 강제로 해제 sp_query_store_unforce_plan 하 고 데이터베이스 엔진Database Engine 최적의 계획을 찾도록 합니다.The user or DBA should eventually unforce the plan using sp_query_store_unforce_plan procedure, and let the 데이터베이스 엔진Database Engine find the optimal plan.

또는 강제 계획이 포함 된 쿼리 쿼리 저장소 보기를 사용 하 여 계획을 찾고 해제 합니다.Alternatively, use the Queries With Forced Plans Query Store view to locate and unforce plans.

SQL ServerSQL Server 쿼리 저장소에서 성능을 모니터링 하 고 문제를 해결 하는 데 필요한 모든 보기 및 절차를 제공 합니다.provides all necessary views and procedures required to monitor performance and fix problems in Query Store.

에서 SQL Server 2016(13.x)SQL Server 2016 (13.x) 쿼리 저장소 시스템 뷰를 사용 하 여 계획 선택 회귀를 찾을 수 있습니다.In SQL Server 2016(13.x)SQL Server 2016 (13.x), you can find plan choice regressions using Query Store system views. 부터 SQL Server 2017(14.x)SQL Server 2017 (14.x)데이터베이스 엔진Database Engine 잠재적 계획 선택 재발 및 sys.dm_db_tuning_recommendations (transact-sql) DMV에 적용 해야 하는 권장 작업을 검색 하 고 표시 합니다.Starting with SQL Server 2017(14.x)SQL Server 2017 (14.x), the 데이터베이스 엔진Database Engine detects and shows potential plan choice regressions and the recommended actions that should be applied in the sys.dm_db_tuning_recommendations (Transact-SQL) DMV. DMV에는 문제에 대 한 정보, 문제의 중요성, 식별 된 쿼리, 회귀 된 계획의 ID, 비교할 기준으로 사용 된 계획의 ID, Transact-SQLTransact-SQL 문제를 해결 하기 위해 실행할 수 있는 문이 표시 됩니다.The DMV shows information about the problem, the importance of the issue, and details such as the identified query, the ID of the regressed plan, the ID of the plan that was used as baseline for comparison, and the Transact-SQLTransact-SQL statement that can be executed to fix the problem.

typetype descriptiondescription Datetimedatetime scorescore 자세히details ......
FORCE_LAST_GOOD_PLAN CPU 시간이 4 밀리초에서 14 밀리초로 변경 되었습니다.CPU time changed from 4 ms to 14 ms 3/17/20173/17/2017 8383 queryId recommendedPlanId regressedPlanId T-SQLqueryId recommendedPlanId regressedPlanId T-SQL
FORCE_LAST_GOOD_PLAN CPU 시간이 37 밀리초에서 84 밀리초로 변경 되었습니다.CPU time changed from 37 ms to 84 ms 3/16/20173/16/2017 2626 queryId recommendedPlanId regressedPlanId T-SQLqueryId recommendedPlanId regressedPlanId T-SQL

이 보기의 일부 열은 다음 목록에 설명 되어 있습니다.Some columns from this view are described in the following list:

  • 권장 작업의 유형입니다 FORCE_LAST_GOOD_PLAN .Type of the recommended action FORCE_LAST_GOOD_PLAN.
  • 이 계획의 변경으로 인해 데이터베이스 엔진Database Engine 잠재적인 성능 저하가 발생 하는 것으로 간주 되는 정보를 포함 하는 설명입니다.Description that contains information why the 데이터베이스 엔진Database Engine thinks that this plan change is a potential performance regression.
  • 잠재적 회귀가 검색 된 날짜/시간입니다.Datetime when the potential regression is detected.
  • 이 권장 사항의 점수입니다.Score of this recommendation.
  • 검색 된 계획의 ID, 재발 된 계획의 ID, 문제를 해결 하기 위해 강제로 적용 해야 하는 계획의 ID, Transact-SQLTransact-SQL 문제를 해결 하기 위해 적용 될 수 있는 스크립트 등의 문제에 대 한 세부 정보입니다. 세부 정보는 JSON 형식으로 저장 됩니다.Details about the issues such as ID of the detected plan, ID of the regressed plan, ID of the plan that should be forced to fix the issue, Transact-SQLTransact-SQL script that might be applied to fix the issue, etc. Details are stored in JSON format.

다음 쿼리를 사용 하 여 문제를 해결 하는 스크립트와 예상 된 이득에 대 한 추가 정보를 얻을 수 있습니다.Use the following query to obtain a script that fixes the issue and additional information about the estimated gain:

SELECT reason, score,
      script = JSON_VALUE(details, '$.implementationDetails.script'),
      planForceDetails.*,
      estimated_gain = (regressedPlanExecutionCount + recommendedPlanExecutionCount)
                  * (regressedPlanCpuTimeAverage - recommendedPlanCpuTimeAverage)/1000000,
      error_prone = IIF(regressedPlanErrorCount > recommendedPlanErrorCount, 'YES','NO')
FROM sys.dm_db_tuning_recommendations
CROSS APPLY OPENJSON (Details, '$.planForceDetails')
    WITH (  [query_id] int '$.queryId',
            regressedPlanId int '$.regressedPlanId',
            recommendedPlanId int '$.recommendedPlanId',
            regressedPlanErrorCount int,
            recommendedPlanErrorCount int,
            regressedPlanExecutionCount int,
            regressedPlanCpuTimeAverage float,
            recommendedPlanExecutionCount int,
            recommendedPlanCpuTimeAverage float
          ) AS planForceDetails;

결과 집합은 다음과 같습니다.Here is the result set.

reasonreason scorescore 스크립트script 쿼리 _ idquery_id 현재 계획 _ idcurrent plan_id 권장 계획 _ idrecommended plan_id 예상 _ 이득estimated_gain 오류가 발생 하기 _ 쉽습니다.error_prone
CPU 시간이 3 밀리초에서 46 밀리초로 변경 되었습니다.CPU time changed from 3 ms to 46 ms 3636 EXEC sp _ 쿼리 _ 저장소 _ 강제 _ 요금제 12, 17;EXEC sp_query_store_force_plan 12, 17; 1212 2828 1717 11.5911.59 00

열은 estimated_gain 현재 계획 대신 쿼리 실행에 권장 계획을 사용할 경우 저장 되는 예상 시간 (초)을 나타냅니다.The column estimated_gain represents the estimated number of seconds that would be saved if the recommended plan would be used for query execution instead of the current plan. 이득을 10 초 보다 큰 경우에는 현재 계획 대신 권장 계획을 강제로 적용 해야 합니다.The recommended plan should be forced instead of the current plan if the gain is greater than 10 seconds. 현재 계획에 권장 계획 보다 더 많은 오류 (예: 시간 초과 또는 중단 된 실행)가 있는 경우이 열은 error_prone 값으로 설정 됩니다 YES .If there are more errors (for example, time-outs or aborted executions) in the current plan than in the recommended plan, the column error_prone would be set to the value YES. 오류가 발생 하기 쉬운 계획은 현재 권장 계획 대신 강제 적용 해야 하는 또 다른 이유입니다.An error prone plan is another reason why the recommended plan should be forced instead of the current one.

데이터베이스 엔진Database Engine 계획 선택 재발을 식별 하는 데 필요한 모든 정보를 제공 하지만 지속적으로 모니터링 하 고 성능 문제를 해결 하는 것은 지루한 프로세스가 될 수 있습니다.Although the 데이터베이스 엔진Database Engine provides all the information required to identify plan choice regressions, continuous monitoring and fixing performance issues might become a tedious process. 자동 조정 기능을 사용 하면이 프로세스를 훨씬 더 쉽게 수행할 수 있습니다.Automatic tuning makes this process much easier.

참고

DMV의 데이터 sys.dm_db_tuning_recommendations 는 인스턴스를 다시 시작할 때마다 지속 되지 않습니다 SQL ServerSQL Server .Data in the sys.dm_db_tuning_recommendations DMV is not persisted between restarts of the SQL ServerSQL Server instance.

자동 인덱스 관리Automatic index management

에서 Azure SQL DatabaseAzure SQL Database 인덱스 관리는 Azure SQL DatabaseAzure SQL Database 워크 로드에 대해 학습 하 고 데이터가 항상 최적으로 인덱스 되도록 하기 때문에 간단 합니다.In Azure SQL DatabaseAzure SQL Database, index management is easy because Azure SQL DatabaseAzure SQL Database learns about your workload and ensures that your data is always optimally indexed. 적절한 인덱스 디자인은 작업의 최적의 성능을 위해 중요하고 자동 인덱스 관리는 인덱스를 최적화하는 데 도움이 될 수 있습니다.Proper index design is crucial for optimal performance of your workload, and automatic index management can help you optimize your indexes. 자동 인덱스 관리는 올바르지 않게 인덱싱된 데이터베이스의 성능 문제를 해결하거나 기존 데이터베이스 스키마에 대한 인덱스를 유지 관리하고 향상시킬 수 있습니다.Automatic index management can either fix performance issues in incorrectly indexed databases, or maintain and improve indexes on the existing database schema. 에서 자동 조정 Azure SQL DatabaseAzure SQL Database 작업은 다음 작업을 수행 합니다.Automatic tuning in Azure SQL DatabaseAzure SQL Database performs the following actions:

  • 테이블에서 데이터를 읽는 쿼리 성능을 향상 시킬 수 있는 인덱스를 식별 Transact-SQLTransact-SQL 합니다.Identifies indexes that could improve the performance of your Transact-SQLTransact-SQL queries that read data from the tables.
  • 더 긴 기간 동안 제거 될 수 있었던 중복 인덱스 또는 인덱스를 식별 합니다.Identifies redundant indexes or indexes that were not used in longer period of time that could be removed. 불필요 한 인덱스를 제거 하면 테이블의 데이터를 업데이트 하는 쿼리 성능이 향상 됩니다.Removing unnecessary indexes improves the performance of queries that update data in tables.

인덱스 관리가 필요한 이유는 무엇입니까?Why do you need index management?

인덱스는 테이블에서 데이터를 읽는 쿼리 중 일부를 가속화 하지만 데이터를 업데이트 하는 쿼리의 속도를 낮출 수 있습니다.Indexes speed up some of your queries that read data from the tables, however they can slow down the queries that update data. 인덱스를 만들 시기와 인덱스에 포함해야 하는 열을 신중하게 분석해야 합니다.You need to carefully analyze when to create an index and what columns you need to include in the index. 일부 인덱스는 일정 시간이 지난 후 필요하지 않을 수 있습니다.Some indexes might not be needed after some time. 따라서 혜택을 받지 않는 이러한 인덱스를 정기적으로 식별 하 고 삭제 해야 합니다.Therefore, you would need to periodically identify and drop these indexes that do not bring any benefits. 사용 하지 않는 인덱스를 무시 하는 경우 데이터를 읽는 쿼리를 활용 하지 않고 데이터를 업데이트 하는 쿼리의 성능이 저하 됩니다.If you ignore the unused indexes, performance of the queries that update data would be decreased without any benefit to the queries that read data. 추가 업데이트에는 불필요한 로깅이 필요하기 때문에 사용되지 않는 인덱스도 시스템의 전반적인 성능에 영향을 줍니다.Unused indexes also affect overall performance of the system because additional updates require unnecessary logging.

테이블에서 데이터를 읽는 쿼리의 성능을 개선하고 업데이트에 최소의 영향을 주는 인덱스의 최적 집합을 찾는 데 지속적이고 복잡한 분석이 필요할 수 있습니다.Finding the optimal set of indexes that improve performance of the queries that read data from your tables and have minimal impact on updates might require continuous and complex analysis.

Azure SQL DatabaseAzure SQL Database 는 쿼리를 분석 하 고, 현재 작업에 가장 적합 한 인덱스를 식별 하 고, 제거 해야 할 수 있는 인덱스를 식별 하는 기본 제공 인텔리전스 및 고급 규칙을 사용 합니다.uses built-in intelligence and advanced rules that analyze your queries, identify indexes that would be optimal for your current workloads, and identify the indexes that might need to be removed. Azure SQL Database는 다른 쿼리에 대 한 영향을 최소화 하면서 데이터를 읽는 쿼리를 최적화 하는 최소한의 필수 인덱스 집합이 있는지 확인 합니다.Azure SQL Database ensures that you have a minimal necessary set of indexes that optimize the queries that read data, with minimized impact on the other queries.

자동 인덱스 관리Automatic index management

검색 외에도에서 Azure SQL DatabaseAzure SQL Database 식별 된 권장 사항을 자동으로 적용할 수 있습니다.In addition to detection, Azure SQL DatabaseAzure SQL Database can automatically apply identified recommendations. 기본 제공 규칙을 사용 하 여 데이터베이스의 성능을 향상 시킬 수 있는 경우 Azure SQL DatabaseAzure SQL Database 인덱스를 자동으로 관리할 수 있습니다.If you find that the built-in rules improve the performance of your database, you might let Azure SQL DatabaseAzure SQL Database automatically manage your indexes.

에서 자동 조정을 사용 하도록 설정 하 고 자동 조정 기능을 사용 하 여 작업을 완벽 하 게 Azure SQL DatabaseAzure SQL Database 관리 하려면 Azure Portal를 사용 하 여 Azure SQL Database에서 자동 조정 사용을 참조 하세요.To enable automatic tuning in Azure SQL DatabaseAzure SQL Database and allow the automatic tuning feature to fully manage your workload, see Enable automatic tuning in Azure SQL Database using Azure portal.

에서 Azure SQL DatabaseAzure SQL Database CREATE index 또는 DROP INDEX 권장 사항을 적용 하는 경우 인덱스의 영향을 받는 쿼리의 성능을 자동으로 모니터링 합니다.When the Azure SQL DatabaseAzure SQL Database applies a CREATE INDEX or DROP INDEX recommendation, it automatically monitors the performance of the queries that are affected by the index. 영향을 받는 쿼리의 성능이 향상 되는 경우에만 새 인덱스가 유지 됩니다.New index will be retained only if performances of the affected queries are improved. 삭제 된 인덱스는 인덱스가 없기 때문에 느리게 실행 되는 일부 쿼리가 자동으로 다시 생성 됩니다.Dropped index will be automatically re-created if there are some queries that run slower due to the absence of the index.

자동 인덱스 관리 고려 사항Automatic index management considerations

에서 필요한 인덱스를 만드는 데 필요한 동작은 Azure SQL DatabaseAzure SQL Database 리소스를 소비 하 고 일시적으로는 워크 로드 성능에 영향을 줄 수 있습니다.Actions required to create necessary indexes in Azure SQL DatabaseAzure SQL Database might consume resources and temporally affect workload performance. 인덱스 생성이 워크 로드 성능에 미치는 영향을 최소화 하기 위해는 Azure SQL DatabaseAzure SQL Database 인덱스 관리 작업을 위한 적절 한 시간 창을 찾습니다.To minimize the impact of index creation on workload performance, Azure SQL DatabaseAzure SQL Database finds an appropriate time window for any index management operation. 데이터베이스에 워크 로드를 실행 하는 데 필요한 리소스가 필요 하 고 데이터베이스에 유지 관리 작업에 사용할 수 있는 리소스가 충분 하지 않은 경우 다시 시작 되는 경우 튜닝 작업이 연기 됩니다.Tuning action is postponed if the database needs resources to execute your workload, and is restarted when the database has enough unused resources that can be used for the maintenance task. 자동 인덱스 관리에서 중요한 기능 중 하나는 작업의 확인입니다.One important feature in automatic index management is a verification of the actions. Azure SQL DatabaseAzure SQL Database에서 인덱스를 만들거나 삭제 하는 경우 모니터링 프로세스는 작업의 성능을 분석 하 여 작업의 전반적인 성능이 향상 되었는지 확인 합니다.When Azure SQL DatabaseAzure SQL Database creates or drops an index, a monitoring process analyzes the performance of your workload to verify that the action improved the overall performance. 크게 향상 되지 않은 경우에는 작업이 즉시 되돌려집니다.If it did not bring significant improvement - the action is immediately reverted. 이렇게 하면 Azure SQL DatabaseAzure SQL Database 자동 조정 작업이 작업 성능에 부정적인 영향을 주지 않습니다.This way, Azure SQL DatabaseAzure SQL Database ensures that automatic tuning actions do not negatively impact the performance of your workload. 자동 조정으로 만든 인덱스는 기본 스키마에서 유지 관리 작업에 대해 투명합니다.Indexes created by automatic tuning are transparent for the maintenance operation on the underlying schema. 열 삭제 또는 이름 바꾸기와 같은 스키마 변경 내용은 자동으로 만들어진 인덱스에 의해 차단되지 않습니다.Schema changes such as dropping or renaming columns are not blocked by the presence of automatically created indexes. 에서 자동으로 만드는 인덱스는 Azure SQL DatabaseAzure SQL Database 관련 테이블이 삭제 될 때 즉시 삭제 됩니다.Indexes that are automatically created by Azure SQL DatabaseAzure SQL Database are immediately dropped when the related table or columns are dropped.

대체-수동 인덱스 관리Alternative - manual index management

자동 인덱스 관리를 사용 하지 않는 경우 사용자 또는 DBA는 sys.dm_db_missing_index_details (transact-sql) 보거나에서 성능 대시보드 보고서를 사용 하 여 Management StudioManagement Studio 성능을 향상 시킬 수 있는 인덱스를 찾고,이 뷰에 제공 된 세부 정보를 사용 하 여 인덱스를 만들고, 쿼리 성능을 수동으로 모니터링 해야 합니다.Without automatic index management, a user or DBA would need to manually query the sys.dm_db_missing_index_details (Transact-SQL) view or use the Performance Dashboard report in Management StudioManagement Studio to find indexes that might improve performance, create indexes using the details provided in this view, and manually monitor the performance of the query. 삭제할 인덱스를 찾기 위해 사용자는 인덱스에 대 한 운영 사용 통계를 모니터링 하 여 자주 사용 하지 않는 인덱스를 찾아야 합니다.In order to find the indexes that should be dropped, users should monitor operational usage statistics of the indexes to find rarely used indexes.

Azure SQL DatabaseAzure SQL Database 이 프로세스를 간소화 합니다.simplifies this process. Azure SQL DatabaseAzure SQL Database 작업을 분석 하 고, 새 인덱스를 사용 하 여 더 빠르게 실행 될 수 있는 쿼리를 식별 하 고, 사용 하지 않거나 중복 된 인덱스를 식별 합니다.analyzes your workload, identifies the queries that could be executed faster with a new index, and identifies unused or duplicated indexes. Azure Portal에서 인덱스 찾기 권장 사항에서 변경되어야 하는 인덱스의 ID에 대한 자세한 정보를 찾아보세요.Find more information about identification of indexes that should be changed at Find index recommendations in Azure portal.

참고 항목See Also

ALTER DATABASE SET AUTOMATIC_TUNING (Transact-sql) ALTER DATABASE SET AUTOMATIC_TUNING (Transact-SQL)
Transact-sql)sys.database_automatic_tuning_options (sys.database_automatic_tuning_options (Transact-SQL)
Transact-sql)sys.dm_db_tuning_recommendations ( sys.dm_db_tuning_recommendations (Transact-SQL)
Transact-sql)sys.dm_db_missing_index_details ( sys.dm_db_missing_index_details (Transact-SQL)
Transact-sql)sp_query_store_force_plan ( sp_query_store_force_plan (Transact-SQL)
Transact-sql)sp_query_store_unforce_plan ( sp_query_store_unforce_plan (Transact-SQL)
Transact-sql)sys.database_query_store_options ( sys.database_query_store_options (Transact-SQL)
JSON 함수 JSON functions
실행 계획 Execution Plans
성능 모니터링 및 튜닝 Monitor and Tune for Performance
성능 모니터링 및 튜닝 도구 Performance Monitoring and Tuning Tools
쿼리 저장소를 사용하여 성능 모니터링Monitoring Performance By Using the Query Store
쿼리 튜닝 길잡이Query Tuning Assistant