2012-04-11 3 views
2

Derzeit versucht, einige Code zu optimieren und festgestellt, dass es eine Verbindung vor jeder Transaktion getan wird und die Trennung wird am Ende der Transaktion aufgerufen.Oracle Leistung bei Connect/Disconnect für jede Transaktion

In meiner vorherigen Erfahrung habe ich bemerkt, dass das Anrufen von Verbindung langsam ist. Dies wiederholt zu tun ist wahrscheinlich sehr teuer ... Oder ist es?

Antwort

3

Ja, es ist wahrscheinlich teuer, wenn Sie tatsächlich eine physische Verbindung für jede Transaktion erstellen und abbauen, es sei denn, Sie haben extrem lange laufende Transaktionen. Wenn Ihre Transaktion eine Stapelladung von einer Million Zeilen ist, sind die Kosten für das Öffnen und Schließen der Verbindung wahrscheinlich eher minimal. Wenn Ihre Transaktion andererseits aus einer einzeiligen Einfügung in eine Tabelle besteht, würde der größte Teil Ihrer Zeit damit verbracht, die Verbindung zu öffnen und zu schließen.

In den meisten Fällen verfügen Sie jedoch über eine dreischichtige Anwendung, bei der die mittlere Schicht einen Verbindungspool verwaltet. Wenn der Code der mittleren Schicht eine Verbindung öffnet und schließt, arbeitet sie eher mit einer logischen Verbindung als eine physische Verbindung. Beim Öffnen der Verbindung wird eine Verbindung aus dem Pool hergestellt, die Business-Schicht führt eine Transaktion durch und nach dem Schließen der Verbindung wird lediglich die Verbindung zum Pool zurückgegeben. Aus Datenbanksicht wird keine physikalische Verbindung geöffnet oder geschlossen. Wenn Sie tatsächlich mit Verbindungen aus einem Pool arbeiten, ist das Öffnen und Schließen der Verbindung bei jeder Transaktion vollkommen normal und sollte nicht viel Overhead generieren, vorausgesetzt, Ihr Verbindungspool ist einigermaßen groß.