2

J'essaie d'utiliser SQL Server Profiler (2005) pour identifier certains problèmes de performances d'applications. L'un des appels en cours est une fonction définie par l'utilisateur définie par une table. Cette fonction encapsule un select qui joint plusieurs tables ensemble.Instructions de profilage dans une fonction définie par l'utilisateur

Dans SQL Server Profiler, l'appel à l'UDF est enregistré. Toutefois, la sélection qui sous-tend l'UDF n'est pas enregistrée du tout. Pour cette raison, je ne reçois pas de données utiles sur les tables & index qui sont touchés. J'aimerais ajouter cette information au conseiller de réglage de base de données pour obtenir des conseils d'indexation.

Existe-t-il un moyen (à part de déballer les requêtes elles-mêmes) de consigner les tables appelées par des fonctions définies par l'utilisateur dans Profiler?

Répondre

3

Vous ne pouvez pas: une instruction multiple TVF est une boîte noire et vous ne pouvez obtenir CPU, Read, etc. Écrit

par « boîte noire » Je veux dire qu'il est une série entièrement encapsulé et opaque des états à l'intérieur d'une autre requête, et il n'y a pas de "flux" comme vous obtiendriez ligne par ligne à travers un proc stocké.

Un TVF en ligne est développé comme une vue ou une macro dans la requête principale et peut être vu.

Edit: concernant: Table Valued Function where did my query plan go?

+0

C'est ce que je soupçonnais. : - \ –

+0

@Craig Walker: Ils sont une douleur à dépanner. Utilisez-les avec parcimonie. Par exemple, toutes les lignes doivent être renvoyées par le TVF même si toutes ne sont pas nécessaires, ou dans d'autres cas, les filtres etc. seront appliqués à des points plus optimaux dans la requête – gbn

+0

Hmm ... convertir le TVF en TVF inline peut être faisable . –

Questions connexes