Bonjour
Dans une procédure stockée, j'utilise 3 paramètres tables. Cette procédure
charge des données dans ces 3 tables puis effectue une série de calcul sur
l'une d'entre elles. La procédure retourne une somme sur un champ de cette
dernière, qui est le résultat de tous les calculs précédents.
J'appelle ensuite cette procédure dans une boucle qui effectue environ 900
itérations. Je n'ai pas trouvé de moyen autre que la boucle pour faire mon
calcul pour toutes mes entités.
Bref, au 2/3 environ des itérations, j'ai droit à cette erreur :
Une erreur s'est produite lors de l'exécution du lot. Message d'erreur : Une
exception de type 'System.OutOfMemoryException' a été levée.
Mais ceci n'est pas systématique, parfois toute la boucle se déroule sans
problème.
J'en déduit donc que je sollicite trop la mémoire du serveur. Peux t'on
forcer SQL Server à libérer la mémoire utilisée par ces paramètres table à
la fin de l'exécution de la procédure?
Merci
Geoffroy
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Geoffroy GABEL
Bon à priori l'erreur ne viendrait que du fait de l'exécution de la requête dans SSMS. Avec SqlCmd, je n'ai pas de soucis. Merci
"Geoffroy GABEL" a écrit dans le message de groupe de discussion : #
Bonjour Dans une procédure stockée, j'utilise 3 paramètres tables. Cette procédure charge des données dans ces 3 tables puis effectue une série de calcul sur l'une d'entre elles. La procédure retourne une somme sur un champ de cette dernière, qui est le résultat de tous les calculs précédents. J'appelle ensuite cette procédure dans une boucle qui effectue environ 900 itérations. Je n'ai pas trouvé de moyen autre que la boucle pour faire mon calcul pour toutes mes entités. Bref, au 2/3 environ des itérations, j'ai droit à cette erreur : Une erreur s'est produite lors de l'exécution du lot. Message d'erreur : Une exception de type 'System.OutOfMemoryException' a été levée.
Mais ceci n'est pas systématique, parfois toute la boucle se déroule sans problème. J'en déduit donc que je sollicite trop la mémoire du serveur. Peux t'on forcer SQL Server à libérer la mémoire utilisée par ces paramètres table à la fin de l'exécution de la procédure? Merci Geoffroy
Bon à priori l'erreur ne viendrait que du fait de l'exécution de la requête
dans SSMS. Avec SqlCmd, je n'ai pas de soucis.
Merci
"Geoffroy GABEL" <clarkgbl@nospam.nospam> a écrit dans le message de groupe
de discussion : #cNFobPdKHA.1652@TK2MSFTNGP05.phx.gbl...
Bonjour
Dans une procédure stockée, j'utilise 3 paramètres tables. Cette procédure
charge des données dans ces 3 tables puis effectue une série de calcul sur
l'une d'entre elles. La procédure retourne une somme sur un champ de cette
dernière, qui est le résultat de tous les calculs précédents.
J'appelle ensuite cette procédure dans une boucle qui effectue environ 900
itérations. Je n'ai pas trouvé de moyen autre que la boucle pour faire mon
calcul pour toutes mes entités.
Bref, au 2/3 environ des itérations, j'ai droit à cette erreur :
Une erreur s'est produite lors de l'exécution du lot. Message d'erreur :
Une exception de type 'System.OutOfMemoryException' a été levée.
Mais ceci n'est pas systématique, parfois toute la boucle se déroule sans
problème.
J'en déduit donc que je sollicite trop la mémoire du serveur. Peux t'on
forcer SQL Server à libérer la mémoire utilisée par ces paramètres table à
la fin de l'exécution de la procédure?
Merci
Geoffroy
Bon à priori l'erreur ne viendrait que du fait de l'exécution de la requête dans SSMS. Avec SqlCmd, je n'ai pas de soucis. Merci
"Geoffroy GABEL" a écrit dans le message de groupe de discussion : #
Bonjour Dans une procédure stockée, j'utilise 3 paramètres tables. Cette procédure charge des données dans ces 3 tables puis effectue une série de calcul sur l'une d'entre elles. La procédure retourne une somme sur un champ de cette dernière, qui est le résultat de tous les calculs précédents. J'appelle ensuite cette procédure dans une boucle qui effectue environ 900 itérations. Je n'ai pas trouvé de moyen autre que la boucle pour faire mon calcul pour toutes mes entités. Bref, au 2/3 environ des itérations, j'ai droit à cette erreur : Une erreur s'est produite lors de l'exécution du lot. Message d'erreur : Une exception de type 'System.OutOfMemoryException' a été levée.
Mais ceci n'est pas systématique, parfois toute la boucle se déroule sans problème. J'en déduit donc que je sollicite trop la mémoire du serveur. Peux t'on forcer SQL Server à libérer la mémoire utilisée par ces paramètres table à la fin de l'exécution de la procédure? Merci Geoffroy
Fred BROUARD
Salut geoffroy
Geoffroy GABEL a écrit :
Bonjour Dans une procédure stockée, j'utilise 3 paramètres tables. Cette procédure charge des données dans ces 3 tables puis effectue une série de calcul sur l'une d'entre elles. La procédure retourne une somme sur un champ de cette dernière, qui est le résultat de tous les calculs précédents.
et les CTE alors ???? Ne serait-ce pas une bonne idée que de commencer ta requête par 3 CTE :
WITH T1 AS (SELECT ...), T2 AS (SELECT ...), T3 AS (SELECT ...), ...
J'appelle ensuite cette procédure dans une boucle qui effectue environ 900 itérations. Je n'ai pas trouvé de moyen autre que la boucle pour faire mon calcul pour toutes mes entités.
Avec la CTE ce sera peut être plus clair !
Bref, au 2/3 environ des itérations, j'ai droit à cette erreur : Une erreur s'est produite lors de l'exécution du lot. Message d'erreur : Une exception de type 'System.OutOfMemoryException' a été levée.
Lorsque tu utilise des variables table ou des tables temporaires, il y a déversement des données de l'un (la base) dans l'autre (la table locale) ce qui impose une utilisation de la mémoire et des espaces de stockage de la tempdb. Alors qu'avec la CTE c'est SQL Server sui choisit la meilleure tectique !
Mais ceci n'est pas systématique, parfois toute la boucle se déroule sans problème. J'en déduit donc que je sollicite trop la mémoire du serveur. Peux t'on forcer SQL Server à libérer la mémoire utilisée par ces paramètres table à la fin de l'exécution de la procédure? Merci Geoffroy
A + -- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation Enseignant aux Arts & Métiers PACA et à L'ISEN Toulon - Var Technologies *********************** http://www.sqlspot.com *************************
Salut geoffroy
Geoffroy GABEL a écrit :
Bonjour
Dans une procédure stockée, j'utilise 3 paramètres tables. Cette
procédure charge des données dans ces 3 tables puis effectue une série
de calcul sur l'une d'entre elles. La procédure retourne une somme sur
un champ de cette dernière, qui est le résultat de tous les calculs
précédents.
et les CTE alors ???? Ne serait-ce pas une bonne idée que de commencer
ta requête par 3 CTE :
WITH
T1 AS
(SELECT ...),
T2 AS
(SELECT ...),
T3 AS
(SELECT ...),
...
J'appelle ensuite cette procédure dans une boucle qui effectue environ
900 itérations. Je n'ai pas trouvé de moyen autre que la boucle pour
faire mon calcul pour toutes mes entités.
Avec la CTE ce sera peut être plus clair !
Bref, au 2/3 environ des itérations, j'ai droit à cette erreur :
Une erreur s'est produite lors de l'exécution du lot. Message d'erreur :
Une exception de type 'System.OutOfMemoryException' a été levée.
Lorsque tu utilise des variables table ou des tables temporaires, il y a
déversement des données de l'un (la base) dans l'autre (la table locale)
ce qui impose une utilisation de la mémoire et des espaces de stockage
de la tempdb.
Alors qu'avec la CTE c'est SQL Server sui choisit la meilleure tectique !
Mais ceci n'est pas systématique, parfois toute la boucle se déroule
sans problème.
J'en déduit donc que je sollicite trop la mémoire du serveur. Peux t'on
forcer SQL Server à libérer la mémoire utilisée par ces paramètres table
à la fin de l'exécution de la procédure?
Merci
Geoffroy
A +
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
Enseignant aux Arts & Métiers PACA et à L'ISEN Toulon - Var Technologies
*********************** http://www.sqlspot.com *************************
Bonjour Dans une procédure stockée, j'utilise 3 paramètres tables. Cette procédure charge des données dans ces 3 tables puis effectue une série de calcul sur l'une d'entre elles. La procédure retourne une somme sur un champ de cette dernière, qui est le résultat de tous les calculs précédents.
et les CTE alors ???? Ne serait-ce pas une bonne idée que de commencer ta requête par 3 CTE :
WITH T1 AS (SELECT ...), T2 AS (SELECT ...), T3 AS (SELECT ...), ...
J'appelle ensuite cette procédure dans une boucle qui effectue environ 900 itérations. Je n'ai pas trouvé de moyen autre que la boucle pour faire mon calcul pour toutes mes entités.
Avec la CTE ce sera peut être plus clair !
Bref, au 2/3 environ des itérations, j'ai droit à cette erreur : Une erreur s'est produite lors de l'exécution du lot. Message d'erreur : Une exception de type 'System.OutOfMemoryException' a été levée.
Lorsque tu utilise des variables table ou des tables temporaires, il y a déversement des données de l'un (la base) dans l'autre (la table locale) ce qui impose une utilisation de la mémoire et des espaces de stockage de la tempdb. Alors qu'avec la CTE c'est SQL Server sui choisit la meilleure tectique !
Mais ceci n'est pas systématique, parfois toute la boucle se déroule sans problème. J'en déduit donc que je sollicite trop la mémoire du serveur. Peux t'on forcer SQL Server à libérer la mémoire utilisée par ces paramètres table à la fin de l'exécution de la procédure? Merci Geoffroy
A + -- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation Enseignant aux Arts & Métiers PACA et à L'ISEN Toulon - Var Technologies *********************** http://www.sqlspot.com *************************
Geoffroy GABEL
Bonjour Fred Oui mais la CTE impose son utilisation après sa déclaration. WITH T1 AS (SELECT ...), T2 AS (SELECT ...), T3 AS (SELECT ...) SELECT ... FROM T1... T2
Alors que là je fais plusieurs accès au fur et à mesure de ma procédure stockée à mes tables paramètres. Bon je vais quand même regardé si je peux modifier ça. Merci Geoffroy
"Fred BROUARD" a écrit dans le message de groupe de discussion :
Salut geoffroy
Geoffroy GABEL a écrit :
Bonjour Dans une procédure stockée, j'utilise 3 paramètres tables. Cette procédure charge des données dans ces 3 tables puis effectue une série de calcul sur l'une d'entre elles. La procédure retourne une somme sur un champ de cette dernière, qui est le résultat de tous les calculs précédents.
et les CTE alors ???? Ne serait-ce pas une bonne idée que de commencer ta requête par 3 CTE :
WITH T1 AS (SELECT ...), T2 AS (SELECT ...), T3 AS (SELECT ...), ...
J'appelle ensuite cette procédure dans une boucle qui effectue environ 900 itérations. Je n'ai pas trouvé de moyen autre que la boucle pour faire mon calcul pour toutes mes entités.
Avec la CTE ce sera peut être plus clair !
Bref, au 2/3 environ des itérations, j'ai droit à cette erreur : Une erreur s'est produite lors de l'exécution du lot. Message d'erreur : Une exception de type 'System.OutOfMemoryException' a été levée.
Lorsque tu utilise des variables table ou des tables temporaires, il y a déversement des données de l'un (la base) dans l'autre (la table locale) ce qui impose une utilisation de la mémoire et des espaces de stockage de la tempdb. Alors qu'avec la CTE c'est SQL Server sui choisit la meilleure tectique !
Mais ceci n'est pas systématique, parfois toute la boucle se déroule sans problème. J'en déduit donc que je sollicite trop la mémoire du serveur. Peux t'on forcer SQL Server à libérer la mémoire utilisée par ces paramètres table à la fin de l'exécution de la procédure? Merci Geoffroy
A + -- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation Enseignant aux Arts & Métiers PACA et à L'ISEN Toulon - Var Technologies *********************** http://www.sqlspot.com *************************
Bonjour Fred
Oui mais la CTE impose son utilisation après sa déclaration.
WITH
T1 AS
(SELECT ...),
T2 AS
(SELECT ...),
T3 AS
(SELECT ...)
SELECT ... FROM T1... T2
Alors que là je fais plusieurs accès au fur et à mesure de ma procédure
stockée à mes tables paramètres.
Bon je vais quand même regardé si je peux modifier ça.
Merci
Geoffroy
"Fred BROUARD" <brouardf@club-internet.fr> a écrit dans le message de groupe
de discussion : epFhjoddKHA.5984@TK2MSFTNGP06.phx.gbl...
Salut geoffroy
Geoffroy GABEL a écrit :
Bonjour
Dans une procédure stockée, j'utilise 3 paramètres tables. Cette
procédure charge des données dans ces 3 tables puis effectue une série de
calcul sur l'une d'entre elles. La procédure retourne une somme sur un
champ de cette dernière, qui est le résultat de tous les calculs
précédents.
et les CTE alors ???? Ne serait-ce pas une bonne idée que de commencer ta
requête par 3 CTE :
WITH
T1 AS
(SELECT ...),
T2 AS
(SELECT ...),
T3 AS
(SELECT ...),
...
J'appelle ensuite cette procédure dans une boucle qui effectue environ
900 itérations. Je n'ai pas trouvé de moyen autre que la boucle pour
faire mon calcul pour toutes mes entités.
Avec la CTE ce sera peut être plus clair !
Bref, au 2/3 environ des itérations, j'ai droit à cette erreur :
Une erreur s'est produite lors de l'exécution du lot. Message d'erreur :
Une exception de type 'System.OutOfMemoryException' a été levée.
Lorsque tu utilise des variables table ou des tables temporaires, il y a
déversement des données de l'un (la base) dans l'autre (la table locale)
ce qui impose une utilisation de la mémoire et des espaces de stockage de
la tempdb.
Alors qu'avec la CTE c'est SQL Server sui choisit la meilleure tectique !
Mais ceci n'est pas systématique, parfois toute la boucle se déroule sans
problème.
J'en déduit donc que je sollicite trop la mémoire du serveur. Peux t'on
forcer SQL Server à libérer la mémoire utilisée par ces paramètres table
à la fin de l'exécution de la procédure?
Merci
Geoffroy
A +
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
Enseignant aux Arts & Métiers PACA et à L'ISEN Toulon - Var Technologies
*********************** http://www.sqlspot.com *************************
Bonjour Fred Oui mais la CTE impose son utilisation après sa déclaration. WITH T1 AS (SELECT ...), T2 AS (SELECT ...), T3 AS (SELECT ...) SELECT ... FROM T1... T2
Alors que là je fais plusieurs accès au fur et à mesure de ma procédure stockée à mes tables paramètres. Bon je vais quand même regardé si je peux modifier ça. Merci Geoffroy
"Fred BROUARD" a écrit dans le message de groupe de discussion :
Salut geoffroy
Geoffroy GABEL a écrit :
Bonjour Dans une procédure stockée, j'utilise 3 paramètres tables. Cette procédure charge des données dans ces 3 tables puis effectue une série de calcul sur l'une d'entre elles. La procédure retourne une somme sur un champ de cette dernière, qui est le résultat de tous les calculs précédents.
et les CTE alors ???? Ne serait-ce pas une bonne idée que de commencer ta requête par 3 CTE :
WITH T1 AS (SELECT ...), T2 AS (SELECT ...), T3 AS (SELECT ...), ...
J'appelle ensuite cette procédure dans une boucle qui effectue environ 900 itérations. Je n'ai pas trouvé de moyen autre que la boucle pour faire mon calcul pour toutes mes entités.
Avec la CTE ce sera peut être plus clair !
Bref, au 2/3 environ des itérations, j'ai droit à cette erreur : Une erreur s'est produite lors de l'exécution du lot. Message d'erreur : Une exception de type 'System.OutOfMemoryException' a été levée.
Lorsque tu utilise des variables table ou des tables temporaires, il y a déversement des données de l'un (la base) dans l'autre (la table locale) ce qui impose une utilisation de la mémoire et des espaces de stockage de la tempdb. Alors qu'avec la CTE c'est SQL Server sui choisit la meilleure tectique !
Mais ceci n'est pas systématique, parfois toute la boucle se déroule sans problème. J'en déduit donc que je sollicite trop la mémoire du serveur. Peux t'on forcer SQL Server à libérer la mémoire utilisée par ces paramètres table à la fin de l'exécution de la procédure? Merci Geoffroy
A + -- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation Enseignant aux Arts & Métiers PACA et à L'ISEN Toulon - Var Technologies *********************** http://www.sqlspot.com *************************