|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre actif
![]() |
Bonjour,
J'ai développé à l'aide de différents tutos. un script T-SQL que je souhaiterai mettre en place sous forme de procédure. Ce script doit permettre de mettre à jour une table d'une base de données si les conditions sont respectées. Ma préoccupation est en fait au niveau de la gestion mémoire lors de l'exécution de ce script. En effet, après exécution la mémoire n'est pas libérée, et lorsque je ré-exécute la quantité de mémoire utilisée ne cesse d'augmenter. Je pense qu'il doit y avoir des optimisations considérable à mettre en place dans mon script qui est vraiment, et je le dis du "bricolage". Voici une brève description de ce que je souhaite faire dans ce script : 1 - Extraction d'un compteur de lignes sauvegardé dans une table : @COUNTER 2 - Extraction du nombre de lignes total d'une vue : @VIEW 3 - Si @VIEW > @COUNTER alors je lance la suite de mon script 4 - Créations d'autant de fichiers qu'il y a de type (colonne :TYPE_STOCK) à partir de la vue et de la commande BCP. 5 - Pour chaque combinaison de type : XX, XY, YY, je lance un script PHP en SHELL qui va générer un fichier résultat dans un dossier. 6 - J'insère pour chaques fichiers XX, XY dans une table avec BULK INSERT. Je présente ensuite mon script, sachant qu'avant exécution je suis a 700 Mo d'utilisation de mémoire et après, je suis a 1.20G et cette mémoire ne se libère pas. Je suis persuadé qu'il a des libération ou des optimisations. Cordialement
__________________
while (true) echo 'comique'; Du comique de répétition ... Pour des questions de lisibilité, utilisez la balise [code] Si votre problème est résolu, n'oubliez pas le tag
|
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() dba Inscription : juillet 2007 Messages : 2 520 ![]() |
Par principe, la base de données ne rend jamais la RAM qu'elle utilise. Et vue qu'elle est sur un serveur dédié ça n'est pas un problème.
__________________
les règles du forum - mode d'emploi du forum Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur) JE NE RÉPONDS PAS aux questions techniques par message privé. Écrire en français sur un forum est une marque minimale de respect. |
|
|
00
|
|
|
#3 |
|
Membre Expert
![]() |
Quelle mémoire?
Celle de votre Serveur SQL? SQL SERVER ne libère la mémoire que si c'est nécessaire... vous n'avez pas (à votre niveau)à vous en soucier... Je rappel que SQL SERVER doit être installé sur une instance dédiée. |
|
|
00
|
|
|
#4 | |
|
Membre Expert
![]() |
Citation:
|
|
|
|
00
|
|
|
#5 | ||
|
Membre actif
![]() |
Bonjour,
Merci pour vos réponses. Le serveur SQL est complété par un serveur Apache/PHP sur la machine. J'essaye de trouver la meilleure optimisation pour mon script. Pourriez-vous visualiser si celui-ci ne contient pas des erreurs de scripting, d'algo. ou autres ? Autre point, dans ce script je fais appel à du SHELL pour éxécuter un script PHP sur la même machine, et j'ai l'impression que cet appel ne fonctionne pas dans une procédure. Il fonctionne sous Management Studio. Mon idée est-elle possible dans une procédure ? Exemple : Code :
Cordialement
__________________
while (true) echo 'comique'; Du comique de répétition ... Pour des questions de lisibilité, utilisez la balise [code] Si votre problème est résolu, n'oubliez pas le tag
|
||
|
|
00
|
|
|
#6 | |||
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Bonjour
Citation:
--- Je ne comprend pas très bien le principe de votre script, vous imbriquez les EXEC et xp_cmdshell ? pour xp_cmdshell la doc est ici Vous pouvez donc faire directement Code SQL :
Cela dit : 1/ xp_cmdshell est désactivée par défaut, pour des raisons de sécurité 2/ Je vous conseille de faire autrement (pour les mêmes raisons de sécurité). Par exemple, sur votre (nouveau |
|||
|
|
00
|
|
|
#7 | |
|
Membre Expert
![]() |
Citation:
|
|
|
|
01
|
|
|
#8 | ||
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Pour ce qui est de l'optimisation de votre script :
1/ pourquoi déclarer @COUNTER et @VIEW en VARCHAR(10) Alors que visiblement ils contiennent des nombres ? 2/ dans votre première requête, pourquoi utiliser IN (qui permet vérifier l'égalité d'une valeur avec une liste de valeur) alors que par définition, vous sous requête (dans le IN) ne peux renvoyer q'une seule valeur (vous faites un select MAX(...) ) donc je dirai : Code SQL :
Mais bon globalement cela ne changera pas grand chose... J'ai même l'impression que vous vous servez de ces variables uniquement pour la comparaison, vous pourriez comparer directement les deux requêtes sans passer par des variables. pour le reste du script, comme je vous disais, le mieux serait de récupérer la liste des fichiers à traiter, et de lancer ces traitements depuis un script PHP. |
||
|
|
00
|
|
|
#9 |
|
Membre actif
![]() |
Merci pour votre réponse ...
Je vais m'orienter vers la gestion des fichiers dans le script PHP. En fait, je crois que je me suis compliqué dans la gestion des différents traitement au niveau SQL et PHP. Je peux très bien créer les fichiers sources par la commande BCP dans mon script PHP, de même pour les fichiers résultats, en allant chercher les différents fichiers résultats à générer. Par contre simple question : Code :
xp_cmdshell 'PHP d:\Roots\distance\distance.php ' + @FILE + '.txt install '
__________________
while (true) echo 'comique'; Du comique de répétition ... Pour des questions de lisibilité, utilisez la balise [code] Si votre problème est résolu, n'oubliez pas le tag
|
|
|
00
|
|
|
#10 | |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Je pense aussi
Citation:
Il faut : 1/ autoriser l'utilisation de xp_cmdshell 2/ donner a votre utilisateur SQL le privilege d'execution de xp_cmdshell (GRANT EXECUTE...) 3/ donner les droit à l'utilisateur windows pour l'execution de votre commande (le compte du service MSSQL je crois ?) Une fois que vous aurez trifouillé pour effectuer cela, vous aurez ouvert des trous, que dis-je des trous... des cratères de sécurité... non vraiment, laissez à votre serveur de base de données le soin de s'occuper des données, et à votre langage de scripting le soin de s'occuper du reste... |
|
|
|
00
|
|
|
#11 |
|
Membre actif
![]() |
OK
Je me ré-oriente vers la gestion des fichiers de données dans mon script. La sécurité n'a pas de prix !Cordialement PS : je met le TOPIC en résolu !
__________________
while (true) echo 'comique'; Du comique de répétition ... Pour des questions de lisibilité, utilisez la balise [code] Si votre problème est résolu, n'oubliez pas le tag
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com