J'ai une requête de sélection qui appelle une fonction trois fois [bien sûr à chaque fois avec une colonne d'entrée diff]. Je remarque que le temps d'exécution [plusieurs lignes] est de 8 secondes contre 3 secondes lorsque j'appelle la fonction une fois. C'est logique, puisque la charge de travail est triplée.Force le multithreading dans une requête de sélection? [Oracle ou Sql-Server]
DEMANDER:
Est-il possible de faire allusion au serveur DB pour forcer multithread car ils sont 3 différentes colonnes indépendantes?
J'ai essayé d'extraire les résultats séparément et de les joindre. Même ils ne semblent créer aucun type de parallélisme, ni dans SQL-Server ni dans Oracle. En utilisant la syntaxe SS ci-dessous.
select top 200 dbo.CALC_DURATION (Col1, Col2 , 'PP', 553, '', 'N', 'H'),
dbo.CALC_DURATION (Col3, Col4 , 'PP', 553, '', 'N', 'H'),
dbo.CALC_DURATION (Col5, Col6 , 'PP', 553, '', 'N', 'H')
from NNMP265_ISS;
extrait de fonction ci-dessus:
Je doute que ce soit possible car CALC_DURATION est une fonction scalaire. Voir https://dba.stackexchange.com/questions/134453/sql-not-engaging-parallelism-for-extremely-large-query – Serg
Pouvez-vous inclure le code de la fonction? Les gens pourraient avoir des idées sur la façon dont cela pourrait être fait d'une autre manière qui n'empêche pas le parallélisme. –
Bien sûr, merci. La fonction calcule les heures de travail en donnant la priorité à deux ensembles de données, puis calcule avec précision les heures de travail entre l'heure de début et celle de fin. Joindre une capture d'écran dans la question principale car je ne pouvais pas adapter le programme ici. – rsreji