SQL Server 2005での複数のSQLタスクの生成
-
03-07-2019 - |
質問
サーバー上ですべて同時に実行したいストアドプロシージャがいくつかあります。理想的には、外部クライアントへの接続に依存せずにすべてサーバー上で実行します。
これらすべてを起動して同時に実行するためのオプションは何ですか(追加の作業を行うためにすべてのプロセスが完了するまで待つ必要さえありません)?
考えたことがあります:
- からの複数の接続の起動 クライアント、それぞれが開始する 適切なSP。
- のジョブのセットアップ 各SPおよびジョブの開始 SQL Server接続またはSP。
- 使用 追加の実行を開始するxp_cmdshell osqlまたはwheteverと同等
- SSIS-パッケージを動的に記述して、より多くのSPを処理できるかどうかを確認する必要があります。これは、クライアントが本番環境にアクセスするアクセス量がわからないためです
ジョブとcmdshellのケースでは、おそらくDBAからアクセス許可レベルの問題が発生します...
SSISは良い選択肢かもしれません-SPリストをテーブルドライブできるなら。
これはデータウェアハウスの状況であり、作業はほとんど独立しており、NOLOCKは星に普遍的に使用されています。このシステムは8ウェイ32GBマシンですので、問題があればロードダウンしてスケールダウンします。
基本的に3つのレイヤーがあり、レイヤー1には少数のプロセスがあり、基本的にはすでにロードされているすべての事実/次元に依存します(事実、星はレイヤー0です-はい、残念ながらすべてロードする必要があります)、レイヤー2にはレイヤー1の一部またはすべてに依存する多数のプロセスがあり、レイヤー3にはレイヤー2の一部またはすべてに依存する多数のプロセスがあります。既にテーブルに依存関係があり、最初のみレイヤー内で直交しているため、特定のレイヤーのすべてのプロシージャを同時に起動します。
解決 4
最後に、プロセスを実行できるように非同期を起動し、接続を追跡するC#管理コンソールプログラムを作成しました。
他のヒント
SSISはあなたにとって選択肢ですか?並列SQL実行タスクを含む単純なパッケージを作成して、ストアドプロシージャを同時に実行できます。ただし、ストアドプロシージャが何をするかに応じて、これを並行して開始することでメリットが得られる場合と得られない場合があります(たとえば、すべてが同じテーブルレコードにアクセスする場合、ロックが解放されるまで待機する必要がある場合など)
ある時点で、 Acumen Advantage にはこれを行う倉庫管理者がいます。
このための基本的な戦略は、sprocsとその依存関係のリストを持つコントロールDBを持つことです。依存関係に基づいて、トポロジカルソートを実行して、実行順序を指定できます。これを行うには、依存関係を管理する必要があります-ストアドプロシージャの先行タスクはすべて、実行する前に完了する必要があります。複数のスレッドで順番にsprocを開始するだけでは、これだけでは実現できません。
これを実装するということは、SSIS機能の多くを頭でノックし、別のスケジューラーを実装することを意味しました。これは製品には問題ありませんが、おそらくオーダーメイドのシステムには過剰です。したがって、より簡単な解決策は次のとおりです。
単一のSSISパッケージと一連のsprocsがデータを取得するディメンション( Subject Oriented ETL とも呼ばれる)ごとに垂直方向にETLを整理することにより、より粗いレベルで依存関係を管理できます。抽出からディメンションまたはファクトテーブルの作成まで。通常、ディメンションはほとんどサイロ化されるため、相互依存性は最小限になります。相互依存関係がある場合は、1つのディメンション(またはファクトテーブル)のロードプロセスを、アップストリームに必要なものに依存させます。
各ローダーは比較的モジュール化されており、ロードプロセスを並行して開始し、SSISスケジューラーに実行させることにより、有用な並列度が得られます。依存関係には冗長性が含まれます。たとえば、ODSテーブルは、完了するディメンションロードに依存しない場合がありますが、アップストリームパッケージ自体は、完了する前にコンポーネントをディメンションスキーマに直接移動します。ただし、これは次の理由から実際には問題になりそうにありません。
- ロードプロセスには、その間に実行できる他のタスクがおそらく多くあります
- ほとんどのリソースを消費するタスクは、ほぼ確実にファクトテーブルのロードであり、ほとんど相互に依存しません。依存関係がある場合(たとえば、別のテーブルのコンテンツに基づくロールアップテーブル)、これはとにかく回避できません。
SSISパッケージを構築して、すべての構成をXMLファイルから取得し、環境変数で外部から場所を指定できるようにすることができます。この種のことは、Control-Mなどのスケジューリングシステムを使用して、かなり簡単に実装できます。 これは、修正されたSSISパッケージを比較的少ない手動操作で展開できることを意味します。運用スタッフは、ストアドプロシージャと一緒に展開するパッケージを渡すことができ、SSISパッケージの構成を手動で調整する必要なく、環境ごとに構成ファイルを維持できます。
Service Brokerを確認したい場合は、アクティベーションストアドプロシージャを使用します...オプションかもしれません...