マルチスレッドの CLR ストアド プロシージャは可能ですか?
並列化の可能性が高い、データ集約型のタスクがあります。CLR Stored Procs は、データをプロセス外に移動するオーバーヘッドを取り除くのに最適です。並列コンピューティングをあきらめなければならないのではないかと心配しています。
私のオプションは何ですか?
注: SQL Server 2005 を使用しており、4 か月以内に SQL Server 2008 にアップグレードする計画があります。
マルチスレッドの CLR ストアド プロシージャは可能ですか?
並列化の可能性が高い、データ集約型のタスクがあります。CLR Stored Procs は、データをプロセス外に移動するオーバーヘッドを取り除くのに最適です。並列コンピューティングをあきらめなければならないのではないかと心配しています。
私のオプションは何ですか?
注: SQL Server 2005 を使用しており、4 か月以内に SQL Server 2008 にアップグレードする計画があります。
並列化の可能性があるデータ集約型の場合は、セット指向の方法で処理し、SQL に適切と思われるプロセスを並列化させる必要があります。CPU ごとにデータ アクセスをパーティション分割することに関して、SQL が既に行っているよりも賢明なことは何もできません。SQL は、アクセスできない情報 (バッファ プールの塗りつぶし状態、ページの寿命の期待値、CPU/NUMA アフィニティなど) にアクセスするだけです。
処理がスカラー指向で CPU を集中的に使用する (場合によってはセット指向の処理でさえある) 場合は、処理を UDF CLR 関数に配置し、クエリの実行で関数の実行を並列化します。
処理になんらかの I/O (つまり、Web 呼び出し) がある場合は、それを SQL に入れないでください。サーバー プロセスの外に配置してください。
実際に処理がこれらすべてのカテゴリに当てはまらない場合でも、マルチスレッド化の恩恵を受けることができると確信している場合、理論的には SQL 内でスレッドを開始することが可能です。SQL 内の CLR ホストは、通常の CLR ホスト (よく知られているアプリケーション ホストまたは ASP ホスト)ではないことに注意してください。SQL CLR は 3 番目のホスト タイプであり、 SOSコンストラクト (ワーカー、ラッチ、メモリ クラークなど)の上にレイヤー化された独自のプリミティブ (スレッド、ロック、メモリ管理など) を提供します。SQL で明示的なマルチスレッド CLR 処理を実行しないことを強くお勧めします。