Azure SQL Database 内のエラスティック ジョブ
適用対象: Azure SQL データベース
この記事では、Azure SQL Database のエラスティック ジョブの機能と詳細を確認します。
- エラスティック ジョブの構成に関するチュートリアルについては、「エラスティック ジョブのチュートリアル」を参照してください。
- Azure データベース プラットフォームでの自動化の概念について説明します。
エラスティック ジョブの概要
1 つまたは複数の Azure SQL データベースに対して定期的に実行できるエラスティック ジョブを作成し、スケジュールすると、Transact-SQL (T-SQL) クエリを実行してメンテナンス タスクを行うことができます。
ジョブの実行場所となるターゲット データベースまたはデータベースのグループを定義できるほか、ジョブを実行するスケジュールを定義できます。 エラスティック ジョブのすべての日付と時刻には、UTC タイム ゾーンが適用されます。
ターゲット データベースにログインするタスクはジョブによって処理されます。 データベースのグループ全体に対して実行される Transact-SQL スクリプトの定義、保守、維持も行います。
すべてのジョブでは、実行の状態が記録されます。また、エラーが発生した場合に操作が自動で再試行されます。
いつエラスティック ジョブを使用するか
次に、エラスティック ジョブによる自動化が利用できるシナリオをいくつか示します。
- 管理タスクの自動化とスケジュール (平日に毎日、業務時間後に実行するなど)
- スキーマの変更、資格情報の管理をデプロイします。
- パフォーマンス データの収集またはテナント (顧客) 利用統計情報の収集。
- 参照データ (全データベースに共通の情報) を更新します。
- Azure Blob Storage からデータを読み込む。
- データベース コレクションを対象として (ピーク外の時間などに) 定期的に実行するジョブを構成します。
- データベース セットのクエリ結果をリアルタイムで中央のテーブルに収集します。
- クエリを継続的に実行して、その他のタスクの実行をトリガーするように構成できます。
- レポート用データの収集
- データベースのコレクションから 1 つのテーブルにデータを集約します。
- 顧客の製品利用統計情報収集など、大規模なデータセット全体に対して、時間がかかるデータ処理クエリを実行します。 結果は 1 つの対象テーブルに収集され、分析に使用されます。
- データの移動
- カスタム開発されたソリューション、ビジネスの自動化、またはその他のタスク管理を目的とします。
- データベース内のテーブル間でデータを抽出/処理/挿入するための ETL 処理。
次の場合は、エラスティック ジョブを検討してください。
- 1 つ以上のデータベースを対象として、スケジュールに従って定期的に実行する必要があるタスクがある場合。
- 複数のデータベースで 1 回だけ実行する必要があるタスクがある場合。
- データベースの任意の組み合わせに対してジョブを実行する必要がある場合。個々のデータベースだけでなく、サーバー上のデータベースすべて、エラスティック プール内のデータベースすべてを自由に指定してジョブを実行できます。さらに、特定のデータベースを対象としたり、逆に対象から除外したりできる柔軟性も備わっています。 多数のサーバーやプールにまたがるジョブだけでなく、異なるサブスクリプションのデータベースを対象としたジョブの実行も可能です。 実行時にはサーバーとプールが動的に列挙されるので、実行時にターゲット グループに存在するデータベースに漏れなくジョブを実行できます。
- (特に、データベースが動的に追加/削除される SaaS ユーザーのシナリオでは) これが、ターゲット データベースを動的に列挙できない SQL エージェントとの大きな違いです。
エラスティック ジョブのコンポーネント
コンポーネント | 説明 |
---|---|
エラスティック ジョブ エージェント | ジョブの実行と管理を目的として作成する Azure リソースです。 |
ジョブ データベース | ジョブ エージェントがジョブの関連データや定義などを格納するために使用する、Azure SQL Database のデータベースです。 |
ジョブ | ジョブは処理の 1 単位で、1 つ以上のジョブ ステップから成ります。 ジョブ ステップでは、実行する T-SQL スクリプトのほか、スクリプトの実行に必要な詳細情報を指定します。 |
ターゲット グループ | ジョブの実行の対象となるサーバー、プール、データベースをまとめたものを指します。 |
エラスティック ジョブ エージェント
ジョブを作成、実行、および管理するための Azure リソースを、エラスティック ジョブ エージェントといいます。 エラスティック ジョブ エージェントは、ポータルで作成する Azure リソースです (このほか、PowerShell と REST API を使用したエラスティック ジョブの作成および管理もサポートされています)。
エラスティック ジョブ エージェントを作成するには、Azure SQL Database の既存のデータベースが必要です。 エージェントは、この既存の Azure SQL Database を "ジョブ データベース" として構成します。
Azure portal を使用して、ジョブを開始、無効化、またはキャンセルすることができます。 Azure portal では、ジョブ定義と実行履歴を表示することもできます。
エラスティック ジョブ エージェントのコスト
ジョブ データベースについては、Azure SQL Database のデータベースと同じ料金が発生します。 エラスティック ジョブ エージェントのコストは、ジョブ エージェント用に選択されたサービス レベルの固定価格に基づきます。 Azure SQL Database の価格に関するページを参照してください。
エラスティック ジョブ データベース
ジョブ データベースは、ジョブの定義のほか、ジョブの実行状態や実行履歴の追跡に使用するものです。 ジョブはターゲット データベースで実行されます。 同時に、エージェントのメタデータ、ログ、結果、およびジョブ定義の保管場所としての役割も果たします。さらに、ジョブ データベースには、便利なストアド プロシージャや、T-SQL を使ったジョブの作成、実行、管理に役立つデータベース オブジェクトが多数格納されます。
エラスティック ジョブ エージェントを作成する際に Azure SQL Database (S1 以上) が推奨されます。
ジョブ データベースとなるデータベースは、データが入っておらず、サービス目標が Azure SQL Database S1 以上であることが条件となります。
ジョブ データベースで推奨されるサービス目標は S1 以上ですが、最適な選択はジョブのパフォーマンスに関するニーズ (ジョブ ステップの数、ジョブ ターゲットの数、ジョブの実行頻度) によって異なります。
ジョブ データベースに対する操作が予想よりも遅い場合は、Azure portal または sys.dm_db_resource_stats DMV を使用して、パフォーマンスが低下している期間に、データベースのパフォーマンスと、ジョブ データベースのリソース使用率を監視します。 CPU、データ IO、ログ書き込みなどのリソースの使用率が100% に近づいており、パフォーマンス低下の期間と相関している場合は、ジョブ データベースのパフォーマンスが十分に向上するまで、(DTU ベースの購入モデルまたは仮想コア購入モデル) でデータベースをより高いサービス目標に段階的にスケーリングすることを検討してください。
重要
既存のオブジェクトを変更したり、ジョブ データベースに新しいオブジェクトを作成したりしないでください。ただし、レポートや分析のためにテーブルから読み取ることはできます。
エラスティック ジョブとジョブ ステップ
"ジョブ" は処理の 1 単位です。一定のスケジュールに基づいて実行することもあれば、1 回限りのジョブとして実行することもあります。 ジョブは、いくつかの "ジョブ ステップ" で構成されます。
各ジョブ ステップでは、実行する T-SQL スクリプト、そのスクリプトの対象となるターゲット グループ (複数可)、ジョブ エージェントがターゲット データベースに接続する際に必要になる資格情報の 3 つを指定します。 ジョブ ステップにはそれぞれカスタマイズが可能なタイムアウト値と再試行ポリシーが設定されているほか、オプションで出力パラメーターを指定できます。
エラスティック ジョブのターゲット
エラスティック ジョブは、多数のデータベースを対象に T-SQL スクリプトを並列実行できる機能です。一定のスケジュールに従って実行することも、オンデマンドで実行することもできます。 ターゲットには、Azure SQL Database の任意のレベルを指定できます。
スケジュールされたジョブの実行対象とするデータベースの組み合わせは問いません。個々のデータベースだけでなく、サーバー上のデータベースすべて、エラスティック プール内のデータベースすべてを自由に指定してジョブを実行できます。さらに、特定のデータベースを対象としたり、逆に対象から除外したりできる柔軟性も備わっています。 多数のサーバーやプールにまたがるジョブだけでなく、異なるサブスクリプションのデータベースを対象としたジョブの実行も可能です。 実行時にはサーバーとプールが動的に列挙されるので、実行時にターゲット グループに存在するデータベースに漏れなくジョブを実行できます。
次の図は、種類がさまざまに異なるターゲット グループに対してジョブ エージェントがジョブを実行するようすを示したものです。
ターゲット グループ
"ターゲット グループ" は、ジョブ ステップの実行対象となる一連のデータベースを定義したものです。 ターゲット グループに含めることができるものは次のとおりです (数や組み合わせは問いません)。
- 論理 SQL サーバー - サーバーを指定した場合には、ジョブの実行時点でそのサーバーに存在するデータベースがすべて、グループのメンバーとなります。 ジョブの実行前にグループのメンバーを列挙して更新できるように、
master
データベース資格情報を指定する必要があります。 論理サーバーの詳細については、「Azure SQL データベースと Azure Synapse の論理サーバーとは?」を参照してください。 - エラスティック プール - エラスティック プールを指定した場合には、ジョブの実行時点でそのエラスティック プールに存在するデータベースがすべて、グループのメンバーとなります。 サーバーの場合と同じく、ジョブの実行前にグループを更新できるように、
master
データベース資格情報を指定する必要があります。 - 単一のデータベース - データベースを個別に指定してグループのメンバーとすることができます。
ヒント
サーバーまたはプールが含まれるターゲット グループの場合には、ジョブの実行時に "動的列挙" によりグループ内のデータベースが再評価されます。 動的列挙は、ジョブの実行時にサーバーまたはプールに存在するデータベース全部に漏れなくジョブを実行するための処理です。 プールまたはサーバーのメンバーが頻繁に変わるシナリオでは、実行時にデータベースの一覧を再評価することが特に有用です。
プールとデータベースは個別にグループのメンバーとしたり、グループから除外したりできます。 このため、作成するターゲット グループのメンバーとなるデータベースの組み合わせは自由に調節できます。 たとえば、ターゲット グループにサーバーを追加した後で、エラスティック プール内の特定のデータベース (またはプール全体) をグループから除外することができます。
ターゲット グループには、複数のサブスクリプションのデータベースをメンバーに追加できます。また、グループ内のデータベースのリージョンが異なっていても問題ありません。 ジョブの実行が複数のリージョンにまたがる場合には、実行が同一のリージョン内にとどまる場合よりも待機時間が長くなります。
次の例は、ジョブ実行時に異なるターゲット グループ定義を動的に列挙して、ジョブを実行するデータベースを決定する方法を示しています。
- 例 1 は、個々 のデータベースの一覧で構成されるターゲット グループを示しています。 このターゲット グループを使用してジョブ ステップを実行すると、ジョブ ステップのアクションがこれらのデータベースのそれぞれで実行されます。
- 例 2 は、サーバーをターゲットとして含むターゲット グループを示しています。 このターゲット グループを使用してジョブ ステップを実行すると、サーバーが動的に列挙され、現在サーバーに入っているデータベースの一覧が判定されます。 ジョブ ステップのアクションは、これらのデータベースのそれぞれで実行されます。
- 例 3 は "例 2" と似たターゲット グループを示していますが、個々のデータベースが明示的に除外されています。 ジョブ ステップのアクションは、除外されたデータベースでは実行 "されません"。
- 例 4 は、エラスティック プールをターゲットとして含むターゲット グループを示しています。 "例 2" と同様に、プールはジョブ実行時に動的に列挙され、プール内のデータベースの一覧が判定されます。
- 例 5 と例 6 は、包含ルールと除外ルールを使用してサーバー、エラスティック プール、およびデータベースを結合できる高度なシナリオを示しています。
注意
ジョブ データベース自体は、ジョブのターゲットにすることができます。 このシナリオでは、ジョブ データベースは他のターゲット データベースと同様に処理されます。 ジョブ ユーザーを作成して、ジョブ データベースに十分なアクセス許可を付与する必要があります。また、ジョブ ユーザーのデータベース スコープ資格情報は、他のターゲット データベースの場合と同様に、ジョブ データベースにも存在する必要があります。
認証
エラスティック ジョブ エージェントのすべてのターゲットに対して 1 つの方法を選択します。 たとえば、単一のエラスティック ジョブ エージェントの場合、あるターゲット サーバーではデータベース スコープ資格情報を使用し、別のターゲットサーバーでは Microsoft Entra ID 認証を使用するように構成することはできません。
エラスティック ジョブ エージェントは、次の 2 つの認証オプションを介して、ターゲット グループで指定されたサーバー/データベースに接続できます。
- ユーザー割り当てマネージド ID (UMI) を使った Microsoft Entra (旧称 Azure Active Directory) 認証を使用します。
- データベース スコープ資格情報を使用します。
ユーザー割り当てマネージド ID (UMI) を使った認証
ユーザー割り当てマネージド ID (UMI) を使った Microsoft Entra (旧称 Azure Active Directory) 認証は、エラスティック ジョブを Azure SQL Database に接続するための推奨オプションです。 Microsoft Entra ID のサポートにより、ジョブ エージェントは UMI を使ってターゲット データベース (データベース、サーバー、エラスティック プール) と出力データベースに接続できるようになります。
必要に応じて、エラスティック ジョブ データベースを含む論理サーバーで Microsoft Entra ID 認証を有効にし、Microsoft Entra ID 接続を介してそのデータベースへのアクセス/クエリを実行することもできます。 ただし、ジョブ エージェント自体は、証明書ベースの内部認証を使用してジョブ データベースに接続します。
1 つの UMI を作成するか、既存の UMI を使用して、同じ UMI を複数のジョブ エージェントに割り当てることができます。 ジョブ エージェントごとにサポートされる UMI は 1 つだけです。 UMI がジョブ エージェントに割り当てられると、そのジョブ エージェントはターゲット データベースに接続して t-SQL ジョブを実行するためだけにこの ID を使用します。SQL 認証は、そのジョブ エージェントのターゲット サーバー/データベースに対して使用されません。
UMI 名は、文字または数字で始まり、3 文字から 128 文字の長さである必要があります。 UMI 名には -
および _
文字を使用できます。
Azure SQL Database での UMI の詳細については、「Azure SQL のマネージド ID」に関するページをご覧ください。このページには、Azure SQL Database の論理サーバー ID として UMI を使用する場合に必要な手順と利点が記載されています。 詳細については、「Microsoft Entra 認証を使用する」を参照してください。
重要
Microsoft Entra ID 認証を使用する場合は、すべてのターゲット データベースでその Microsoft Entra ID から jobuser
ユーザーを作成します 。 各ターゲット データベースでジョブを実行するために必要なアクセス許可をそのユーザーに付与します。
システム割り当てマネージド ID (SMI) の使用はサポートされていません。
データベース スコープ資格情報を使った認証
Microsoft Entra (旧称 Azure Active Directory) 認証が推奨されるオプションですが、データベース スコープ資格情報を使用して、実行時にターゲット グループで指定されたデータベースに接続するようにジョブを構成できます。 2023 年 10 月より前は、データベース スコープ資格情報が唯一の認証オプションでした。
ターゲット グループにサーバーまたはプールが含まれる場合には、利用できるデータベースを列挙する master
データベースに接続するときに、これらのデータベース スコープ資格情報が使用されます。
- データベース スコープ資格情報はジョブ データベースに作成する必要があります。
- ターゲット データベースにはいずれも、ジョブが正常に完了するうえで十分なアクセス許可を備えたログインを設定しておく必要があります (以下の図の
jobuser
)。 - ターゲット データベースで作成された資格情報 (次の図では、
masteruser
とjobuser
に対するLOGIN
およびPASSWORD
) は、ジョブ データベースで作成された資格情報のIDENTITY
およびSECRET
と一致している必要があります。 - 資格情報は複数のジョブで再利用できます。このため、資格情報のパスワードは暗号化のうえ、ジョブ オブジェクトに対する読み取りアクセス許可が認められたユーザーに知られることがないように保護されます。
次の図は、適切なジョブ資格情報の設定と、エラスティック ジョブ エージェントがデータベース資格情報を認証として使用してターゲット サーバー/データベースのログイン/ユーザーに接続する方法を理解しやすくする目的で作られています。
注意
データベース スコープ資格情報を使用する場合は、必ずすべてのターゲット データベースに jobuser
ユーザーを作成してください。
エラスティック ジョブのプライベート エンドポイント
エラスティック ジョブ エージェントは、エラスティック ジョブのプライベート エンドポイントをサポートしています。 エラスティック ジョブのプライベート エンドポイントを作成すると、エラスティック ジョブとターゲット サーバーの間にプライベート リンクが確立されます。 エラスティック ジョブのプライベート エンドポイント機能は、Azure Private Link とは異なります。
エラスティック ジョブのプライベート エンドポイント機能は、ターゲット/出力サーバーへのプライベート接続をサポートしています。そのため、[パブリック アクセスを拒否する] オプションが有効になっている場合でも、ジョブ エージェントはターゲット/出力サーバーにアクセスできます。 [Azure サービスおよびリソースにそのサーバーへのアクセスを許可する] オプションを無効にする場合は、プライベート エンドポイントを使用することも考えられる解決策の 1 つです。
エラスティック ジョブのプライベート エンドポイントでは、エラスティック ジョブ エージェント認証のすべてのオプションがサポートされます。
エラスティック ジョブのプライベート エンドポイント機能では、サービス マネージド プライベート エンドポイントを選択することで、ジョブ エージェントとそのターゲット/出力サーバー間のセキュリティで保護された接続を確立できます。 サービス マネージド プライベート エンドポイントは、特定の仮想ネットワークおよびサブネット内のプライベート IP アドレスです。 ジョブ エージェントのターゲット/出力サーバーのいずれかでプライベート エンドポイントを使用することを選択すると、サービス マネージド プライベート エンドポイントが Microsoft によって作成されます。 このプライベート エンドポイントは、ジョブを接続して実行したり、そのターゲット/出力データベースにジョブ出力を書き込んだりするために、ジョブ エージェントによって排他的に使用されます。
エラスティック ジョブのプライベート エンドポイントは、Azure portal を使って作成および許可できます。 プライベート リンク経由で接続されているターゲット サーバーは、地域やサブスクリプションが異なっていても Azure 内の任意の場所に配置できます。 この通信を有効にするには、目的のターゲット サーバーとジョブ出力サーバーごとにプライベート エンドポイントを作成する必要があります。
エラスティック ジョブ用に新しいサービス マネージド プライベート エンドポイントを構成するチュートリアルについては、「Azure SQL エラスティック ジョブのプライベート エンドポイントの構成」をご覧ください。
エラスティック ジョブのプライベート エンドポイントの要件
- エラスティック ジョブのプライベート エンドポイントを使用するには、ジョブ エージェントとターゲット サーバー/データベースの両方が、同じ種類のクラウド (パブリック クラウドや政府のクラウドなど) で、Azure (同じリージョンまたは異なるリージョン) でホストされている必要があります。
Microsoft.Network
リソース プロバイダーは、ジョブ エージェントとターゲット/出力サーバーの両方のホスト サブスクリプションに登録する必要があります。- エラスティック ジョブのプライベート エンドポイントは、ターゲット/出力サーバーごとに作成されます。 エラスティック ジョブ エージェントで使用するには、事前に承認する必要があります。 これは、その論理サーバーまたは優先するクライアントの [ネットワーク] ウィンドウで行うことができます。 承認されると、エラスティック ジョブ エージェントは、プライベート接続を使用して、そのサーバーのすべてのデータベースにアクセスできるようになります。
- エラスティック ジョブ エージェントからジョブ データベースへの接続では、プライベート エンドポイントは使用されません。 ジョブ エージェント自体は、証明書ベースの内部認証を使用してジョブ データベースに接続します。 注意点の 1 つとして、ジョブ データベースをターゲット グループ メンバーとして追加した場合が挙げられます。 その場合、必要に応じてプライベート エンドポイントを使用してセットアップする必要がある、通常のターゲットとして動作します。
エラスティック ジョブ データベースのアクセス許可
ジョブ エージェントの作成時には、スキーマとテーブルのほか、jobs_reader と呼ばれるロールがジョブ データベースに作成されます。 このロールには作成時に次のアクセス許可が割り当てられるので、管理者が従来よりも細かくアクセスを制御してジョブを監視できるようになっています。 管理者は、ユーザーをジョブ データベースの jobs_reader ロールに追加することで、ジョブの実行を監視できるようにすることができます。
ロール名 | jobs スキーマのアクセス許可 |
jobs_internal スキーマのアクセス許可 |
---|---|---|
jobs_reader |
SELECT |
なし |
注意事項
jobs.target_group_members など、ジョブ データベース内の内部カタログ ビューは更新しないでください。 これらのカタログ ビューを手動で変更すると、ジョブ データベースが破損し、エラーが発生する可能性があります。 これらのビューは、読み取り専用クエリ専用です。 ジョブ データベースのストアド プロシージャを使用して、ターゲット グループ/メンバー (jobs.sp_add_target_group_member など) を追加または削除できます。
重要
ジョブ データベースへの昇格したアクセス権を付与する際には、セキュリティ面の影響を考慮するようにしてください。 悪意のあるユーザーがジョブを作成または編集できるアクセス権を取得すると、保存されている資格情報を使ってそのユーザーの管理下にあるデータベースに接続するジョブを (新規に、または既存のジョブの編集により) 作成される可能性があります。そのような事態が起これば、悪意のあるユーザーが資格情報のパスワードを自由に設定したり、悪意のあるコマンドを実行したりする状況が発生しかねません。
エラスティック ジョブの監視
エラスティック ジョブ エージェントはジョブ ステータス通知用の Azure Alerts と統合され、ジョブ実行の状態と履歴を監視するためのソリューションが簡素化されます。
Azure portal には、エラスティック ジョブとジョブ監視をサポートするための新機能も追加されています。 次のスクリーンショットのように、エラスティック ジョブ エージェントの [概要] ページに、最新のジョブ実行が表示されます。
Azure portal、Azure CLI、PowerShell、および REST API を使用して、Azure Monitor アラート ルールを作成できます。 失敗したエラスティック ジョブのメトリックは、エラスティック ジョブの実行に関するアラートを監視および受信するための開始点として適しています。 さらに、Azure アラート機能により、SMS や電子メールなどの構成可能なアクションでアラートを受け取ることもできます。 詳細については、「Azure Portal で Azure SQL Database のアラートを作成する」を参照してください。
サンプルについては、「エラスティック ジョブの作成、構成、および管理」を参照してください。
ジョブの出力
それぞれのターゲット データベースに実行したジョブ ステップの結果は詳細が記録されるので、指定したテーブルにスクリプトの出力を取り込むことができます。 ジョブから返されたデータはいずれも、保存先となるデータベースを指定できます。
ジョブ履歴
エラスティック ジョブの実行履歴を表示するには、ジョブ データベースのテーブル jobs.job_executions
にクエリを実行します。 記録から 45 日が経過した実行履歴については、システムのクリーンアップ ジョブにより削除されます。 45 日が経過する前に手動で履歴を削除する場合には、ジョブ データベースで sp_purge_jobhistory
ストアド プロシージャを実行してください。
ジョブの状態
エラスティック ジョブの実行を監視するには、ジョブ データベースのテーブル jobs.job_executions
にクエリを実行します。
ベスト プラクティス
エラスティック データベース ジョブを使用する場合は、次のベスト プラクティスを考慮してください。
セキュリティのベスト プラクティス
- API の使用を信頼できるユーザーに制限します。
- 資格情報には、ジョブ ステップの実行に最小限必要な権限だけを設定します。 詳細については、承認と権限に関するページを参照してください。
- サーバーまたはプールのターゲット グループ メンバーを使う場合は、
master
データベースでデータベースの表示または一覧表示を行うための権限を持つ資格情報を別に作成し、それを使ってジョブの実行前にサーバーやプールのデータベースの一覧を展開することを強くお勧めします。
エラスティック ジョブのパフォーマンス
エラスティック ジョブでは、実行時間の長いジョブの完了を待機する間に消費する計算リソースが最小限に抑えられます。
データベースから成るターゲット グループの大きさと、ジョブについて希望する実行時間 (同時に実行する worker の数) に応じて、エージェントがジョブ データベースに要求する計算量とパフォーマンスが変わります (ターゲットとジョブの数が増えるほど、要求される計算量が増大します)。
同時実行キャパシティ レベル
2023 年 10 月以降、エラスティック ジョブ エージェントには複数のパフォーマンス レベルが用意されるため、容量を増やすことができるようになります。
容量の増分は、ジョブ エージェントが接続してジョブを開始できる同時実行ターゲット データベースの合計数を示します。 ジョブ実行でターゲットへの同時接続数を増やす場合は、ジョブ エージェントのレベルを既定の JA100 レベルからアップグレードします。JA100 レベルでは、ターゲットへの同時接続数の上限が 100 に設定されています。
ほとんどの環境では、同時実行ジョブ数は常時 100 件未満であるため、JA100 が既定値となっています。
エラスティック ジョブ エージェント レベル | 同時実行ジョブの最大数 |
---|---|
JA100 |
100 |
JA200 |
200 |
JA400 |
400 |
JA800 |
800 |
ジョブ ターゲットでジョブ エージェントのコンカレンシー キャパシティ レベルを超えると、一部のターゲット データベース/サーバーでキューの遅延が発生します。 たとえば、JA100 レベルで 110 個のターゲットを持つジョブを開始した場合、10 個のターゲットは他のターゲットが終了するまで開始を待機します。
エラスティック ジョブ エージェントのレベルやサービス目標は、Azure portal、PowerShell、またはジョブ エージェント REST API を使用して変更できます。 例については、「ジョブ エージェントのスケーリング」を参照してください。
エラスティック プールに対するジョブの影響を制限する
Azure SQL Database エラスティック プール内のデータベースにジョブを実行しているときにリソースに対する負荷が大きくなりすぎないようにするために、ジョブを構成して同時にジョブの実行対象とするデータベースの数に制限を設けることができます。
sp_add_jobstep
ストアド プロシージャの @max_parallelism
パラメーターを T-SQL で設定することで、ジョブが実行する同時実行データベースの数を設定します。
べき等スクリプト
エラスティック ジョブの T-SQL スクリプトは べき等にする必要があります。 べき等とは、実行に成功したスクリプトを再度実行した場合に、結果が同じになることを意味します。 一時的なネットワークの問題により、スクリプトが失敗する可能性があります。 その場合、ジョブは事前に設定した回数に達するまで自動的にスクリプトを再試行します。 べき等スクリプトは、2 回 (またはそれより多く) 実行して成功した場合、結果が同じになります。
単純な方法として、作成前に、オブジェクトの存在をテストします。 仮定の例を次に示します。
IF NOT EXISTS (SELECT * FROM sys.objects WHERE [name] = N'some_object')
print 'Object does not exist'
-- Create the object
ELSE
print 'Object exists'
-- If it exists, drop the object before recreating it.
同様に、スクリプトは、それが検出する条件を論理的に試験し、対処することで正常に実行できる必要があります。
制限事項
これらは、エラスティック ジョブ サービスに対する現在の制限です。 これらの制限事項ができるだけなくなるように、積極的に取り組んでいます。
問題 | 説明 |
---|---|
新しい Azure リージョンにフェールオーバーまたは移動した後、新しいリージョンでエラスティック ジョブ エージェントを再作成して始動させる必要があります。 | エラスティック ジョブ サービスでは、すべてのジョブ エージェントとジョブ メタデータがジョブ データベースに格納されます。 Azure リソースを新しい Azure リージョンにフェールオーバーまたは移動すると、ジョブ データベース、ジョブ エージェント、ジョブ メタデータも新しい Azure リージョンに移動されます。 ただし、エラスティック ジョブ エージェントはコンピューティング専用のリソースであり、新しいリージョンでジョブを再度実行する前に、新しいリージョンで明示的に再作成して始動させる必要があります。 始動させると、エラスティック ジョブ エージェントは、以前に定義したジョブ スケジュールに基づいて、新しいリージョンでのジョブの実行を再開します。 |
ジョブ データベースからの過剰な監査ログ | エラスティック ジョブ エージェントは、ジョブ データベースを常にポーリングし、新しいジョブの到着やその他の CRUD 操作を確認します。 ジョブ データベースを格納しているサーバーで監査が有効になっている場合、ジョブ データベースによって大量の監査ログが生成される可能性があります。 これは、述語式を含む Set-AzSqlServerAudit コマンドを使用してこれらの監査ログをフィルター処理することで軽減できます。次に例を示します。 Set-AzSqlServerAudit -ResourceGroupName "ResourceGroup01" -ServerName "Server01" -BlobStorageTargetState Enabled -StorageAccountResourceId "/subscriptions/7fe3301d-31d3-4668-af5e-211a890ba6e3/resourceGroups/resourcegroup01/providers/Microsoft.Storage/storageAccounts/mystorage" -PredicateExpression "database_principal_name <> '##MS_JobAccount##'" このコマンドでは、ジョブ エージェントを選択してジョブ データベース監査ログにのみ出力します。あらゆるターゲット データベース監査ログに出力することはありません。 |
Hyperscale データベースの "ジョブ データベース" としての使用 | Hyperscale データベースを "ジョブ データベース" として使用することはサポートされていません。 ただし、エラスティック ジョブでは、Azure SQL Database の他のデータベースと同じ方法で、Hyperscale データベースを対象にすることができます。 |
サーバーレス データベースとエラスティック ジョブでの自動一時停止。 | 自動一時停止が有効になっているサーバーレス データベースは、"ジョブ データベース" としてサポートされません。 エラスティック ジョブの対象になっているサーバーレス データベースは、自動一時停止をサポートしており、ジョブの接続によって再開されます。 |
ジョブ データベースを BACPAC ファイルにエクスポートする | BACPAC ファイルへのジョブ データベースのエクスポートはサポートされていません。 ジョブ データベースを含む SQL Server をエクスポートする必要がある場合は、サーバーをエクスポートする前に、まずジョブ データベースを削除する必要があります。 |
関連するコンテンツ
- エラスティック ジョブの作成、構成、および管理
- Azure SQL での管理タスクの自動化
- PowerShell を使用したエラスティック ジョブの作成と管理
- T-SQL を使用したエラスティック ジョブの作成と管理