Comment garder une SHARED_POOL "propre" ? - SQL/NoSQL - Programmation
Marsh Posté le 21-11-2005 à 11:29:18
Il existe une Bug oracle concernant "ORA-04031 : unable to allocate 8716 bytes of shared memory ("large pool", "unknown object","cursor work he","kllqas:kllsltba" )", sinon il est possible que la share pool soit fragmenté. Dans les deux cas, tu ne peut rien faire c'est au DBA d'intervenir.
Marsh Posté le 21-11-2005 à 12:32:00
Il te faut un vrai DBA pour ce genre de pb.
Tu peux essayer d'augmenter le shared_pool_size, mais je ne serais pas étonné que cette erreur en cache une autre, genre ORA-00600. Des erreurs connexes ou source du pb ne sont pas forcément directement visibles (entends pas là : tu ne te les prends pas forcément en pleine poire; tu te ramasses un 04031 mais ce n'est que la partie visible de l'iceberg).
Tu as vérifié alert.log et les dumps Oracle ? Appliqué un patch ?
Marsh Posté le 22-11-2005 à 02:09:48
sircam a écrit : Il te faut un vrai DBA pour ce genre de pb. |
Faut se méfier des 04 ou 00 parfois si tu te trompe t'appeles pas le bon destinataire
La confiture, la confiture ... (c)
Marsh Posté le 23-11-2005 à 12:03:04
ReplyMarsh Posté le 23-11-2005 à 13:35:09
Apsolu a écrit : "Alert.log et les dumps Oracle" ? |
Mais... Mes connaissances en Oracle s'arrêtent là, j'étalais simplement le peu que je possède.
Non, sérieux, si tu n'es pas DBA Oracle - et on est pas DBA parce qu'on a installé le bousin et qu'on utilise OEM, soyons clairs - laisse tomber. Avec Oracle, la profession de DBA prend tout son sens. Il est vain de tenter de s'y attaquer comme on le ferait sur un SQL Server ou un MySQL.
Fais appel à un vrai DBA.
Marsh Posté le 21-11-2005 à 11:01:41
Bonjour
Je suis développeur d'une application qui permet de consulter une table contenant beaucoup de données via une IHM qui ressemble à un tableau Excel.
Sur chaque colonne du tableau (c'est à dire de la table) l'utilisateur peut appliquer un tri et/ou un filtre sur une valeur donnée (ex. : n'afficher que les lignes pour lesquelles le montant vaut 100).
L'utilisateur peut créer des tris et des filtres sur autant de colonnes qu'il le désire (au plus 1 critère de filtre et un critère de tri sur une colonne donnée).
De plus, les colonnes affichées ou non sont également au bon vouloir de l'utilisateur.
La requête sous-jacente est donc complètement dynamique et n'a rien de fixé : ni la liste des colonnes du SELECT, ni la clause WHERE ni la clause ORDER BY !
Du coup, je ne sais pas comment je pourrais optimiser quoi que ce soit et surtout éviter que ces requêtes (toujours différentes de l'une à l'autre) s'accumulent dans la SHARED_POOL, ce qui produit très rapidement un message du style
ORA-04031 : unable to allocate 8716 bytes of shared memory ("large pool", "unknown object","cursor work he","kllqas:kllsltba" )
N'étant pas un spécialiste Oracle, pardon par avance si mon exposé n'est pas très clair ou qu'il y a confusion de plusieurs notions.
Votre aide me serait infiniment précieuse !
Merci d'avance !
PS
La version d'Oracle est la 8i, attaquée depuis une couche ADO.