[Oracle] Nombre d'instruction maximum d'un bloc d'éxecution

Nombre d'instruction maximum d'un bloc d'éxecution [Oracle] - SQL/NoSQL - Programmation

Marsh Posté le 12-07-2004 à 14:56:48    

Comme je l'ai déjà expliqué dans mon précédent topic, je dois insérer un grand nombre d'enregistrement dans une base de données Oracle via les ADO. Après moult tests, la méthode la plus rapide est d'appeller n fois une procedure stockée (qui fait un seul insert) dans un bloc d'execution BEGIN ... END . Le problème, c'est que le nombre d'instructions dans un bloc PL/SQL est limité et que je ne connais pas la méthode pour calculer cette limite.
 
Tout ce que j'ai trouvé c'est ça:

Citation :

Yes, the max size is not an explicit byte limit, but related to the parse tree that is created when you compile the code. You can run the following select statement to query the size of an existing package or procedure:  

SQL> select * from dba_object_size where name = 'procedure_name';



http://www.orafaq.com/faqplsql.htm#BLKSIZE
 
J'ai lancé la requete dans TOAD mais je ne sais pas quoi faire des données qu'il me renvoit, ça reste assez flou :/ (de plus cette requête ne fonctionne que pour un user avec des droits d'administrateur).
 
Si quelqu'un peut m'aider, je crois que je vais craquer :/
 
Merci d'avance  :hello:


Message édité par mareek le 12-07-2004 à 15:03:19

---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 12-07-2004 à 14:56:48   

Reply

Marsh Posté le 12-07-2004 à 15:05:30    

Sous Oracle 7, PL/SQL 2.0, la limite était de 64 Ko pour une procédure stockée ou un package. Mais attention :
- cette limite dépend du client. Ces 64 Ko sont valables pour un client Windows, pour Linux je sais pas
- cette limite de 64 Ko comprend le source + la représentation  de la compilation de ce source. Ce qui fait qu'un source de 10 Ko peut très bien dépasser cette limite


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 12-07-2004 à 15:10:32    

Harkonnen a écrit :

Sous Oracle 7, PL/SQL 2.0, la limite était de 64 Ko pour une procédure stockée ou un package. Mais attention :
- cette limite dépend du client. Ces 64 Ko sont valables pour un client Windows, pour Linux je sais pas
- cette limite de 64 Ko comprend le source + la représentation  de la compilation de ce source. Ce qui fait qu'un source de 10 Ko peut très bien dépasser cette limite


Merci :jap:  
Comment je fais pour calculer la taille de la représentation de la compilation de mon source ? :??:
 
EDIT: t'aurais un lien à ce sujet ?
ça a évolué dans Oracle 8i ou 9i ?


Message édité par mareek le 12-07-2004 à 15:11:39

---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 12-07-2004 à 15:13:36    

Peu importe sa taille (c'est ce qu'ils appellent le "parse tree" dans ton article), la requête qu'ils te donnent te permet de calculer la taille totale du paquet, source + représentation comprise. Il te reste qu'à vérifier que ça ne dépasse pas 64 Ko ;)


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 12-07-2004 à 15:22:47    

La requête me renvoit 3 valeurs: SOURCE_SIZE, PARSED_SIZE et CODE_SIZE C'est lequel qui ne doit pas dépasser 64Ko ?
 
 
P.S. tu pourrais répondre à mon précédent edit stp ? :)


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 12-07-2004 à 15:28:05    

à mon avis, ce lien devrait répondre à toutes tes questions :)
 
http://members.fortunecity.com/dpa [...] ons_8i.htm


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 12-07-2004 à 15:39:57    

Harkonnen a écrit :

à mon avis, ce lien devrait répondre à toutes tes questions :)
 
http://members.fortunecity.com/dpa [...] ons_8i.htm


Merci :jap: , je sais ce qu'il me reste à faire maintenant:
 
http://www.akademia.ch/noeuds/img/pendu.jpg


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 12-07-2004 à 15:43:39    

mareek a écrit :

Merci :jap: , je sais ce qu'il me reste à faire maintenant:
 
http://www.akademia.ch/noeuds/img/pendu.jpg


j'aimerais bien connaitre la limite de taille sous SQL Server tiens [:figti]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 12-07-2004 à 15:47:18    

Harkonnen a écrit :

j'aimerais bien connaitre la limite de taille sous SQL Server tiens [:figti]


Perso, je m'en fous un peu, je n'ai pas besoin d'avoir recours à de tels bricolages pour avoir des perfs décentes sous SQL Server.


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 12-07-2004 à 15:48:10    

c'est clair... au niveau perfs y'a pas photo entre Oracle et SQL Server :/


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 12-07-2004 à 15:48:10   

Reply

Marsh Posté le 12-07-2004 à 16:10:21    

/me se demande vraiment comment il va faire ...


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 12-07-2004 à 17:12:11    

[:sisicaivrai] j'y arrives pas


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 12-07-2004 à 18:05:09    

[:calin]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 12-07-2004 à 18:22:43    

Harkonnen a écrit :

à mon avis, ce lien devrait répondre à toutes tes questions :)
 
http://members.fortunecity.com/dpa [...] ons_8i.htm


t'aurais pas la même page pour Oracle 9i, j'ai l'impression que les limitations ne sont plus les mêmes
 
EDIT: D'après mes tests, la taille limite de mon bloc d'execution (qui lance n fois ma procedure stockée de test) semble aux alentours de 100Ko, ce qui me ferait penser que la taille maximale d'un programme est de 128Ko.


Message édité par mareek le 12-07-2004 à 18:26:35

---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 13-07-2004 à 16:49:45    

Bon, je m'en suis sorti en limitant la taille (le nombre de caractères en fait) de mon bloc BEGIN ... END; à 50Ko. J'espère que ça marchera sur les bases des clients :/


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 13-07-2004 à 16:54:18    

Hélas, je n'ai pas l'équivalent pour Oracle 9i, et je te parle même pas de 10g
Mais c'est pas impossible que la taille maximale ait augmenté, dans mon ex boite on avait reçu un commercial de chez Oracle, et on pestait justement contre la limitation des procédures à 64 Ko (on travaillait sur 7 et 8i), et à l'époque, il nous avait assuré, plaquettes à l'appui, que cette taille serait augmentée dans 9i, donc tous les espoirs  sont permis :)


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 13-07-2004 à 16:55:05    

mareek a écrit :

Bon, je m'en suis sorti en limitant la taille (le nombre de caractères en fait) de mon bloc BEGIN ... END; à 50Ko. J'espère que ça marchera sur les bases des clients :/


Sinon je suppose qu'écrire un fichier texte et lancer un bon gros sql loader est complètement hors de propos...? :whistle:


Message édité par skeye le 13-07-2004 à 16:55:15

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 13-07-2004 à 16:56:52    

Harkonnen a écrit :

Hélas, je n'ai pas l'équivalent pour Oracle 9i, et je te parle même pas de 10g
Mais c'est pas impossible que la taille maximale ait augmenté, dans mon ex boite on avait reçu un commercial de chez Oracle, et on pestait justement contre la limitation des procédures à 64 Ko (on travaillait sur 7 et 8i), et à l'époque, il nous avait assuré, plaquettes à l'appui, que cette taille serait augmentée dans 9i, donc tous les espoirs  sont permis :)


Vu que la plupart des clients ont 8i (ici on a 9i), je crois que je vais baisser ma limite de taille [:boidleau].
Au fait, c'est une limitation du client ou du Serveur ?


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 13-07-2004 à 16:57:19    

skeye a écrit :

Sinon je suppose qu'écrire un fichier texte et lancer un bon gros sql loader est complètement hors de propos...? :whistle:


ben j'aurais toujours cette limite à la con [:spamafote]


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 13-07-2004 à 16:59:56    

mareek a écrit :

ben j'aurais toujours cette limite à la con [:spamafote]


Euh j'en sais rien, ça dépend comment sqlloader fait ça, mais je suppose qu'il sait se démerder pour la contourner tout seul comme un grand! [:gratgrat]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 13-07-2004 à 17:00:35    

mareek a écrit :


Au fait, c'est une limitation du client ou du Serveur ?


Du client, en fait sur la 7 (et probablement sur 8i), ça vient du fait que Windows est incapable de gérer des blocs de plus de 64 Ko (explication made in Oracle à l'époque)


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 13-07-2004 à 17:05:30    

Harkonnen a écrit :

Du client, en fait sur la 7 (et probablement sur 8i), ça vient du fait que Windows est incapable de gérer des blocs de plus de 64 Ko (explication made in Oracle à l'époque)


[:rofl] Ils ne savent vraiment pas quoi inventer pour avoir des excuses les commerciaux d'Oracle


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 13-07-2004 à 17:15:23    

skeye a écrit :

Euh j'en sais rien, ça dépend comment sqlloader fait ça, mais je suppose qu'il sait se démerder pour la contourner tout seul comme un grand! [:gratgrat]


Je vois pas pourquoi SQL loader contournerait cette limitation alors que les autres n'y arrivent pas :/
Ou alors il execute les instructions une par une ce que je ne veux pas car c'est trop lent.


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 13-07-2004 à 17:19:00    

mareek a écrit :

Je vois pas pourquoi SQL loader contournerait cette limitation alors que les autres n'y arrivent pas :/
Ou alors il execute les instructions une par une ce que je ne veux pas car c'est trop lent.


http://www.orafaq.com/faqloadr.htm
 

Citation :


The conventional path loader essentially loads the data by using standard INSERT statements. The direct path loader (DIRECT=TRUE) bypasses much of the logic involved with that, and loads directly into the Oracle data files. More information about the restrictions of direct path loading can be obtained from the Utilities Users Guide.


Ca peut être sympa ça non? [:joce]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 13-07-2004 à 17:23:00    

skeye a écrit :

http://www.orafaq.com/faqloadr.htm
 

Citation :


The conventional path loader essentially loads the data by using standard INSERT statements. The direct path loader (DIRECT=TRUE) bypasses much of the logic involved with that, and loads directly into the Oracle data files. More information about the restrictions of direct path loading can be obtained from the Utilities Users Guide.


Ca peut être sympa ça non? [:joce]


Le truc de bourrin [:wam]
 
Bon, je garde ça sous le coude au cas où :D


Message édité par mareek le 13-07-2004 à 17:23:14

---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 13-07-2004 à 17:23:38    

mareek a écrit :

Le truc de bourrin [:wam]
 
Bon, je garde ça sous le coude au cas où :D


Ah ben toi qui voulais de la perf, ça devrait pas être trop mauvais ça...;)


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 13-07-2004 à 17:24:53    

mareek a écrit :

Le truc de bourrin [:wam]
 
Bon, je garde ça sous le coude au cas où :D


+1 :eek2:


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 13-07-2004 à 17:26:43    


Heureusement que les petits jeunes sont là pour te montrer les choses avant que tu embauches, toi!:o


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 13-07-2004 à 17:31:04    

skeye a écrit :

Heureusement que les petits jeunes sont là pour te montrer les choses avant que tu embauches, toi!:o


j'ai jamais utilisé SQL*Loader, au boulot on codait directement par SQL*NET :o


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 13-07-2004 à 17:32:19    

Harkonnen a écrit :

j'ai jamais utilisé SQL*Loader, au boulot on codait directement par SQL*NET :o


...et après on vient gueuler que ça marche pas...;)
 
 
 
 
 
 
 
Bon ok j'ai rien dit, j'ai découvert ça ya 2 semaines...:lol:


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 13-07-2004 à 17:35:16    

skeye a écrit :

Ah ben toi qui voulais de la perf, ça devrait pas être trop mauvais ça...;)


Le problème, c'est que si tu as une merde dans tes fichiers, tu bousilles ta base en moins de 2 :/


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 13-07-2004 à 17:37:37    

mareek a écrit :

Le problème, c'est que si tu as une merde dans tes fichiers, tu bousilles ta base en moins de 2 :/


ah ben oui...mieux vaut être sûr du contenu de tes fichiers, là...
 
Ici on utilise sql*loader pour charger un fichier dans un table temporaire, et ensuite on a un traitement qui teste la cohérence et insère dans la bonne table, et surtout nous sort les erreurs éventuelles.[:skeye]


Message édité par skeye le 13-07-2004 à 17:37:49

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 13-07-2004 à 17:48:44    

skeye a écrit :

ah ben oui...mieux vaut être sûr du contenu de tes fichiers, là...
 
Ici on utilise sql*loader pour charger un fichier dans un table temporaire, et ensuite on a un traitement qui teste la cohérence et insère dans la bonne table, et surtout nous sort les erreurs éventuelles.[:skeye]


Et malgré tout ce traitement, c'est quand même plus rapide qune insertion classique ? :??:


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 13-07-2004 à 17:50:28    

mareek a écrit :

Et malgré tout ce traitement, c'est quand même plus rapide qune insertion classique ? :??:


Aucune idée, je peux pas bencher, j'ai pas le code de ce qui se passe après avoir lancé le sql*loader.
Mais comme je te disais j'insère sans trop de problèmes 20/30000 enregistrements d'un coup sans que cela pose de problème...[:skeye]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 13-07-2004 à 17:51:16    

skeye a écrit :

Aucune idée, je peux pas bencher, j'ai pas le code de ce qui se passe après avoir lancé le sql*loader.
Mais comme je te disais j'insère sans trop de problèmes 20/30000 enregistrements d'un coup sans que cela pose de problème...[:skeye]


ça prend combien de temps ? c'est quoi comme serveur ?


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 13-07-2004 à 17:55:54    

mareek a écrit :

ça prend combien de temps ? c'est quoi comme serveur ?


Le tout (sql*loader + traitements qui suivent) prend à vue de nez (très difficile à contrôler dans le contexte dans lequel je l'utilise) 3 à 4 minutes, sur une base en prod avec des traitements assez lourds régulièrement lancés dessus...
Bref, je peux pas vraiment te filer de chiffres fiables, je contrôle trop peu de ce qui se passe.


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 13-07-2004 à 18:00:22    

et pour le serveur c'est une machine assez costaud...un HP DS25, si mes souvenirs sont bons.


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 13-07-2004 à 18:00:51    

OK, merci quand même :jap:
 
(tiens, j'ai aussi envie de cracher sur Transact-SQL maintenant [:itm] )


Message édité par mareek le 13-07-2004 à 18:01:42

---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 13-07-2004 à 18:06:25    

mareek a écrit :


(tiens, j'ai aussi envie de cracher sur Transact-SQL maintenant [:itm] )


t'aurais pas été emmerdé comme ça avec SQL Server :o


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 13-07-2004 à 18:10:45    

Harkonnen a écrit :

t'aurais pas été emmerdé comme ça avec SQL Server :o


Je ne crache pas sur les SGBD sans raison, ce con de transact-SQL n'accepte pas qu'une fonction (un Convert par ex.) soit passée en paramètre d'une procedure stockée. Vachement pratique pour passer des dates à une procedure stockée [:itm]


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed