Die Ursache MUSS nicht unbedingt damit behoben sein.
Die Frage ist, ob SQL-Resourcen wie interne SQL-Statements und Cursor auch wieder freigegeben werden.

Da Scriptsprachen häufig mit zusammengesetzten SQL's arbeiten, versucht der Optimizer intern den SQL mit Parametermarkern zu ersetzen.
Hierfür wird dann ein wiederverwendbares Statement generiert.
Sieht der SQL aber häufig anders aus, werden halt neue Statements erstellt.
Wo da die Grenze ist, weiß ich allerdings nicht.

Solange die SQL-Verbindung bestehen bleibt (der Job also noch aktiv ist), werden nicht benötigte Statements auch nicht mehr freigegeben.

Es sollte nach Möglichkeit immer mit Prepared-Statements und Parametermarkern gearbeitet werden, das ist allemal performanter und übersichtlicher.

Auch PHP unterstützt dies.