Configuration du serveur : seuil de curseur

S'applique à : SQL Server

Cet article explique comment configurer l’option de configuration du cursor threshold serveur dans SQL Server à l’aide de SQL Server Management Studio ou de Transact-SQL. L’option cursor threshold spécifie le nombre de lignes dans le jeu de curseurs sur lequel les jeux de touches de curseur sont générés de manière asynchrone. Lorsque les curseurs génèrent un jeu de clés pour un jeu de résultats, l’optimiseur de requête estime le nombre de lignes retournées pour ce jeu de résultats. Si l'optimiseur de requête estime que le nombre de lignes renvoyées est plus élevé que ce seuil, le curseur est généré de façon asynchrone, ce qui permet à l'utilisateur de rechercher des lignes à partir du curseur alors que ce dernier continue d'être rempli. Dans le cas contraire, le curseur est généré de façon synchrone et la requête attend que toutes les lignes soient renvoyées.

Limites

SQL Server ne prend pas en charge la génération asynchrone de curseurs Transact-SQL pilotés par des jeux de clés ou statiques. Les opérations de curseur Transact-SQL telles que OPEN ou FETCH sont traitées par lots, il n’est donc pas nécessaire de créer de façon asynchrone des curseurs Transact-SQL. SQL Server continue de prendre en charge les curseurs de serveur d’interface de programmation d’applications statiques ou pilotés par des jeux de clés asynchrones ou statiques, où une faible latence OPEN est une préoccupation, en raison des allers-retours clients pour chaque opération de curseur.

La précision avec laquelle l'optimiseur de requête va évaluer le nombre de lignes d'un jeu de clés dépend du degré d'actualité des statistiques pour chacune des tables dans le curseur.

Recommandations

Seul un administrateur de base de données qualifié ou un spécialiste agréé doit changer cette option avancée SQL Server.

Si vous définissez cursor threshold -1sur , tous les jeux de clés sont générés de manière synchrone, ce qui bénéficie de petits jeux de curseurs. Si vous définissez cursor threshold sur 0, tous les ensembles de touches de curseur sont générés de manière asynchrone. Avec d’autres valeurs, l’optimiseur de requête compare le nombre de lignes attendues dans le jeu de curseurs et génère le jeu de clés de manière asynchrone s’il dépasse le nombre défini dans cursor threshold. Ne définissez cursor threshold pas trop bas, car les petits jeux de résultats sont mieux générés de manière synchrone.

autorisations

Les autorisations d’exécution de sp_configure , sans paramètre ou avec le premier paramètre uniquement, sont accordées par défaut à tous les utilisateurs. Pour exécuter sp_configure avec les deux paramètres afin de modifier une option de configuration ou pour exécuter l’instruction RECONFIGURE, un utilisateur doit disposer de l’autorisation ALTER SETTINGS au niveau du serveur. L’autorisation ALTER SETTINGS est implicitement détenue par les rôles serveur fixes sysadmin et serveradmin.

Utiliser SQL Server Management Studio

  1. Dans l’Explorateur d’objets, cliquez avec le bouton droit sur un serveur et sélectionnez Propriétés.

  2. Cliquez sur le nœud Avancé.

  3. Sous Divers, remplacez l’option cursor threshold par la valeur souhaitée.

Utiliser Transact-SQL

  1. Connectez-vous au Moteur de base de données.

  2. Dans la barre d’outils standard, sélectionnez Nouvelle requête.

  3. Copiez et collez l’exemple suivant dans la fenêtre de requête, puis sélectionnez Exécuter. Cet exemple montre comment utiliser sp_configure pour attribuer à l’option cursor threshold la valeur 0 pour que les jeux de clés du curseur soient générés de façon asynchrone.

    USE master;
    GO
    
    EXECUTE sp_configure 'show advanced options', 1;
    GO
    
    RECONFIGURE;
    GO
    
    EXECUTE sp_configure 'cursor threshold', 0;
    GO
    
    RECONFIGURE;
    GO
    
    EXECUTE sp_configure 'show advanced options', 0;
    GO
    
    RECONFIGURE;
    GO
    

Pour plus d’informations, consultez l’article Options de configuration du serveur.

Suivi : après avoir configuré l’option de seuil de curseur

Le paramètre prend effet immédiatement sans redémarrage du serveur.