Meilleures pratiques pour appeler des procédures stockées compilées en mode natif
Les procédures stockées compilées en mode natif sont les suivantes :
utilisées en général dans les parties ayant un impact sur les performances d'une application ;
exécutées fréquemment ;
réputées très rapides.
L'avantage lié à l'utilisation d'une procédure stockée compilée en mode natif augmente avec le nombre de lignes et la quantité de logique qui est traitée par la procédure. Par exemple, une procédure stockée compilée en mode natif présentera de meilleures performances si elle utilise un ou plusieurs des éléments suivants :
Agrégation.
jointures de boucles imbriquées ;
opérations de sélection, insertion, mise à jour et suppression en plusieurs instructions ;
expressions complexes ;
logique procédurale, par exemple des instructions conditionnelles et des boucles.
Si vous devez traiter une seule ligne, l'utilisation d'une procédure stockée compilée en mode natif peut ne pas fournir un avantage en matière de performances.
Pour éviter que le serveur soit contraint de mettre en correspondance les noms des paramètres et les types de conversion :
Faites correspondre les types de paramètres transmis à la procédure avec les types dans la définition de la procédure.
Utilisez des paramètres (sans nom) ordinaux lorsque vous appelez des procédures stockées compilées en mode natif. Pour une exécution optimale, n'utilisez pas de paramètres nommés.
L'utilisation de paramètres nommés (inefficaces) avec des procédures stockées compilées en mode natif peut être détectée par le XEvent hekaton_slow_parameter_passing
, avec reason=named_parameters
.
De même, vous pouvez détecter l'utilisation de types incompatibles dans le même XEvent hekaton_slow_parameter_passing
, avec reason=parameter_conversion
.
Étant donné que vous devez implémenter une logique de nouvelle tentative lors de l’utilisation de tables optimisées en mémoire (dans de nombreux scénarios) et que vous devrez contourner certaines limitations de fonctionnalités, vous pouvez créer une procédure stockée Transact-SQL interprétée par wrapper. Pour obtenir un exemple, consultez Instructions pour la logique de nouvelle tentative pour les transactions sur Memory-Optimized tables.