2009-08-24 8 views
3

Les processus stockés CLR multi-threadés sont-ils possibles?Code multithread dans les processus stockés CLR?

J'ai une tâche exigeante en données avec beaucoup de potentiel pour la parallélisation. CLR Stored Procs serait génial pour supprimer les frais généraux de déplacement des données hors processus, mon je crains que je devrais abandonner l'informatique parallèle.

Quelles sont mes options?

Note: Nous sommes sur SQL Server 2005 avec des plans dans la gamme de mois < 4 mise à niveau vers SQL Server 2008

Répondre

4

Si est données intensive avec le potentiel de parallélisation, vous devez traiter dans mis manière orientée et laisser SQL paraleliser le processus comme il le veut. Vous ne serez pas capable de faire quoi que ce soit de plus intelligent que SQL pour partitionner l'accès aux données par CPU, il a simplement accès à des informations (état de remplissage du pool tampon, espérance de vie de la page, etc.). Si votre traitement est orienté scalaire et nécessite beaucoup de ressources processeur (et même un traitement orienté ensemble), placez le traitement dans une fonction UDF CLR et laissez à nouveau l'exécution de la requête paraléliser l'exécution de votre fonction.

Si votre traitement a une sorte d'E/S (c'est-à-dire des appels Web), faites pas mettez-le en SQL, placez en dehors du processus du serveur. Si votre traitement vraiment tombe en dehors de toutes ces catégories et vous pensez toujours que vous pourriez bénéficier du multithreading, en théorie il est possible de démarrer des threads en SQL. Soyez averti que l'hôte CLR à l'intérieur de SQL est et non votre hôte CLR normal (c'est-à-dire l'hôte d'application bien connu ou l'hôte ASP). SQL CLR est un troisième type d'hôte, offrant ses propres primitives (threads, verrouillage, gestion de la mémoire, etc.) superposées aux constructions SOS (travailleurs, verrous, greffiers de mémoire, etc.). Je déconseille fortement de faire un traitement CLR multi-thread explicite en SQL.

Questions connexes