Microsoftは最近、驚くべき新機能であるAzureSQLDatabaseの自動チューニングを発表しました。正直なところ、MicrosoftのエンジニアはSQL Azureのパフォーマンスチューニングで人工知能を高度に使用しているため、この機能には完全に感銘を受けています。目的は、Azure SQLデータベースを監視し、これらの監視結果を組み込みのインテリジェンスサービスに送信して、いくつかの推奨事項を生成することです。それらはオフピーク時に適用できます。この機能により、データベース管理者の作業も簡素化されました。今ではSQLAzureデータベースのパフォーマンスについて心配する必要はありません。
MSDNドキュメントのSQLAzure自動チューニングには重要なポイントがあります。「自動チューニングは人工知能を介してAzure上のすべてのデータベースから水平方向に学習し、チューニングアクションを動的に改善します」。これは、人工知能アルゴリズムがさまざまなSQLAzureデータベースから膨大な経験を学習することを意味します。このため、これらの推奨事項は信頼できます。自動調整機能は、推奨事項をロールバックして修正することもできます。
この機能に関するもう1つの興味深いオプションは、通知です。 Microsoftは、この機能が一部の企業に実装されていると言って、この機能の信頼性を高めています。たぶん、このアプローチは少しユートピックになる可能性がありますが、将来的には人工知能がデータベース管理者の多くの責任を負うようになるでしょう。したがって、データベース管理者のタスク数が削減されます。
この機能をテストするために、Azure SQLで2つのテーブルを作成し、それらにデータを入力しました。このテストデータを生成した後、同じ非クラスター化インデックスを必要とする多くのクエリを実行しました。推定されたクエリ実行プランを調べたところ、非クラスター化インデックスが提案されていることがわかりました。約30時間後、AzureSQLの自動調整によりインデックスを作成するための推奨事項が生成されました。この待機時間について、Microsoftは、「Azure SQL Databaseは、いくつかの推奨事項を特定するために、少なくとも1日はアクティビティを監視する必要がある」と述べています。このチューニング推奨インデックスは、欠落しているインデックスと同じです。自動チューニングでスクリプトを実行しようとすると、ディスク容量が限られているためエラーが発生しました。
/* Missing Index Details from SQLQuery1.sql - xxxx.database.windows.net.Adventureworks (esat.erkec) The Query Processor estimates that implementing the following index could improve the query cost by 99.6269%. */ /* USE [Adventureworks] GO CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>] ON [dbo].[Salesd] ([SalesOrderID]) GO */
自動チューニングオプションは次のとおりです:
- インデックスの作成 パフォーマンスに影響を与える可能性のある自動インデックス作成を識別します。
- ドロップインデックス 未使用または冗長なインデックスを識別します。
- 最後の計画を強制的に有効にする これは、以前のプランよりも悪いSQLクエリプランを定義します。この機能は、SQLServer2017での自動プラン修正を指します。
AzureSQL自動チューニングを有効にする方法
Azure PortalまたはT-SQLクエリを使用すると、自動調整オプションを有効にできます。この機能により、サーバーレベルまたはデータベースレベルで同時に自動チューニングを有効にできます。データベースレベルでは、これらのオプションをサーバーレベルから継承できます。
次に、Azure Portalに接続して、SQLServerを見つけます。
次に、自動チューニングオプションを見つけます。
このスクリーンショットでは、サーバーレベルとデフォルト設定で自動チューニングオプションを変更して適用できます。すべてのデータベースはサーバーレベルから継承されます。ただし、このオプションはデータベースレベルで変更することもできます。
[現在の状態]オプションは、自動調整オプションの現在のステータスを定義します。 Microsoftは、その設定をすべてのデータベースに適用できるため、この機能をサーバーレベルで管理することを提案しています。
次に、データベースレベルでの自動調整オプションについて説明します。これらのオプションはSQLデータベースにあります。
ご覧のとおり、個々のデータベースの自動調整オプションを設定し、継承オプションを変更できます。
上のスクリーンショットは、次のオプションを示しています。
- Force Planの状態は「ON」であり、状態が「ON」のサーバーレベルから継承されます。
- Create Indexの状態は「OFF」であり、サーバーレベルから継承されます。その状態は「オフ」です。
- ドロップインデックスの状態は「オン」であり、このオプションはこのデータベースに対してのみ設定されます。この設定では、サーバーレベルは重要ではありません。
T-SQLを介して自動チューニングを有効にできます:
ALTER DATABASE current SET AUTOMATIC_TUNING (FORCE_LAST_GOOD_PLAN = ON, CREATE_INDEX = DEFAULT, DROP_INDEX)
このステップでは、SQLServerメニューの下にある自動チューニングの推奨事項を確認します。
さらに、自動チューニングの推奨事項はデータベースメニューの下にあります。
チューニングの推奨事項にはさまざまなステータスがあります:
- 保留中: 推奨の適用コマンドが受信され、実行がスケジュールされています。
- 実行中: 推奨事項が適用されています。
- 確認: 推奨事項は正常に適用され、サービスはメリットを測定しています。
- 成功: 推奨事項が正常に適用され、メリットが測定されました。
- エラー: 推奨事項の適用中にエラーが発生しました。これは一時的な問題であるか、テーブルのスキーマが変更され、スクリプトが無効になっている可能性があります。
- 元に戻す: 推奨事項が適用されましたが、パフォーマンスが低いと見なされ、自動的に元に戻されています。
- 元に戻しました: 推奨事項は元に戻されました。
自動調整により、[推奨]タブの下にある推奨が作成されると、ステータスは保留になります。チューニング推奨ステータスが実行中、進行中、成功、またはエラーの場合、[チューニング履歴]タブに表示されます。同時に、sys.dm_db_tuning_recommendationsは、自動チューニングの推奨に関する情報を返すことができます。
SELECT name, JSON_VALUE(state, '$.currentValue') as script, JSON_VALUE(details, '$.implementationDetails.script') as script, details.* FROM sys.dm_db_tuning_recommendations CROSS APPLY OPENJSON(details, '$.createIndexDetails') WITH ( indexName VARCHAR(100) '$.indexName', indexType VARCHAR(100) '$.indexType', table_name VARCHAR(100) '$.table') as details
[推奨]をクリックすると、推奨のチューニングに関する詳細が表示されます。
チューニングの推奨事項に関する多くの有用な情報を入手し、この機能のスクリプトを生成できます。
スクリプトが返す詳細は次のとおりです。
- 影響 チューニング推奨の優先度を定義します。
- 必要なディスク容量 ストレージの消費を定義します。
- インデックスタイプ 作成するインデックスのタイプを定義します。
結論
私の意見では、Microsoftが推奨のチューニングに人工知能アルゴリズムを使用し始めているため、SQLAzureの自動チューニングは新世代の機能です。同時に、この機能は次の質問につながる可能性があります:
- このチューニングの推奨事項はいつありますか?
- このチューニングの推奨事項は役に立ちますか?役に立たない場合は、このチューニングの推奨事項をいつロールバックする必要がありますか?
その結果、SQLAzure自動チューニングは未来的なアプローチを提供します。
参考資料
AzureSQLデータベースでの自動チューニング
AzureSQLデータベースでのパフォーマンスの調整
人工知能がAzureSQLデータベースを調整する