SQL Server exécute-t-il des requêtes en parallèle?

10

SQL Server exécute-t-il des requêtes en parallèle? En d'autres termes, si j'exécute une requête lourde qui prend 10 secondes à exécuter et en même temps que je lance une autre requête lourde qui prend 10 secondes, la deuxième requête démarrera-t-elle réellement après 10 secondes, ou démarrera-t-elle les deux en même temps ?

user369117
la source
1
aucune vraie réponse possible, renseignez-vous sur la mise en commun des connexions et le mécanisme de verrouillage
2
Plus pertinent pour lire sur les travailleurs SQL Server et le mécanisme de planification coopérative IMO. En général, la réponse à votre question est "oui".
Martin Smith

Réponses:

14

Vous voulez dire "simultanément". La réponse est oui, avec des mises en garde trop larges pour être discutées ici. En fait, tout l'intérêt du SGBDR est la concurrence.

"Parallèle" a une signification précise dans SQL Server: "une seule requête est répartie sur plusieurs cœurs de processeur".

gbn
la source
6

Tant que votre première requête ne verrouille pas une table nécessaire dans votre deuxième requête, elles s'exécuteront en parallèle.

Ash Burlaczenko
la source
5

Les requêtes s'exécutent en parallèle, dans la mesure du possible.

La base de données utilise différents verrous pour la lecture et l'écriture, sur des lignes, des blocs ou des tables entières, selon ce que vous faites.

Si une requête ne lit qu'à partir d'une table, une autre requête peut également lire à partir de la même table en même temps. Si une requête met à jour certains enregistrements d'une table, une autre requête peut toujours lire à partir de la table tant qu'elle ne lit aucun enregistrement verrouillé pour la mise à jour.

Guffa
la source
2

Dépend des données - généralement, elles s'exécutent en parallèle, mais certains scénarios de verrouillage peuvent entraîner l'attente d'une requête par une autre. Bien sûr, si le sous-système de disque est faible et que vous n'avez pas beaucoup de RAM, plusieurs requêtes peuvent s'exécuter plus lentement.

Arvo
la source
0

DDL (langage de définition de données) fonctionne en parallèle comme l'instruction SELECT
DML (langage de données modifié) ne fonctionne pas en parallèle comme l'instruction INSERT et UPDATE


la source
SELECT n'est pas une instruction DDL
a_horse_with_no_name
-1

Si vous écrivez les requêtes comme ci-dessous ... cela fonctionnera parallèlement

SET XACT_ABORT ON
Begin Try
     Begin Tran
        --Your Sql Statement
     Commit Tran
End Try
Begin Catch
    Rollback Tran
End Catch

Remarque - Votre requête parallèle sera en attente dans le cas où une insertion en bloc dans une table

Pankaj
la source