2009-09-09 5 views
5

Vielleicht ist das normal, aber in meiner Oracle 11g Datenbank sehe ich Programmierer mit Oracle SQL Developer regelmäßig verbrauchen mehr als 100 MB UGA und PGA-Speicher kombiniert. Ich würde gerne wissen, ob das normal ist und was dagegen getan werden kann. Unsere Datenbank befindet sich in der 32-Bit-Version von Windows 2008. Speicherbeschränkungen werden daher immer wichtiger. Ich verwende die folgende Abfrage die Speichernutzung zu zeigen:SQLDeveloper mit über 100 MB PGA

SELECT e.SID, e.username, e.status, b.PGA_MEMORY 
FROM v$session e 
LEFT JOIN 
    (select y.SID, y.value pga, 
     TO_CHAR(ROUND(y.value/1024/1024),99999999) || ' MB' PGA_MEMORY 
    from v$sesstat y, v$statname z 
    where y.STATISTIC# = z.STATISTIC# and NAME = 'session pga memory') b 
ON e.sid=b.sid 
WHERE (PGA)/1024/1024 > 20 
ORDER BY 4 DESC; 

Es scheint, dass die Ressourcennutzung jederzeit nach oben geht eine Tabelle in sqldeveloper geöffnet wird, aber selbst wenn es geschlossen ist der Speicher nicht weggeht. Das Problem ist schlimmer, wenn die Tabelle sortiert wird, während sie geöffnet ist, da sie anscheinend noch mehr Speicher verwendet. Ich verstehe, wie dies Speicher verwenden würde, während es sortiert, und vielleicht sogar, während es noch offen ist, aber Speicher zu verwenden, nachdem es geschlossen wird, scheint mir falsch. Kann das jemand bestätigen?

Update: Ich entdeckte, dass meine Zahlen aufgrund nicht zu verstehen, dass the UGA is stored in the PGA under dedicated server mode. Dies macht die Zahlen niedriger als sie waren, aber das Problem bleibt, dass SQL Developer übermäßig PGA zu verwenden scheint.

Antwort

3

Vielleicht schließt SQL Developer nicht die Cursor, die es geöffnet hatte. Wenn Sie also eine Abfrage ausführen, die eine Million Zeilen sortiert und SQL Developer nur die ersten 20 Zeilen von dort abruft, muss der Cursor geöffnet bleiben, wenn Sie nach unten scrollen und mehr abrufen möchten.

So muss ein Teil des PGA-Speichers, der dem Sortierbereich des Cursors zugeordnet ist, noch zugewiesen werden (es wird als zurückgehaltener Sortierbereich bezeichnet), solange der Cursor geöffnet ist und EOF nicht erreicht hat (End-of-Fetch) .

eine Session-Auswahl und laufen:

select sql_id,operation_type,actual_mem_used,max_mem_used,tempseg_size 
from v$sql_workarea_active 
where sid = &SID_OF_INTEREST 

Dies sollte zeigen, ob einige Cursor noch offen gehalten werden, mit ihrem Gedächtnis ...

+0

+1 Sie haben Recht. Es scheint, diese im Speicher zu halten, auch nachdem die Tabelle in SQLDeveloper geschlossen wurde. Da erwartet wird, dass Version drei bald veröffentlicht wird, werde ich wahrscheinlich abwarten, ob es ein Problem hat, und dann eine SR öffnen, falls dies der Fall ist. Wir sind jetzt weniger besorgt über das Problem, da wir auf 64 Bit aufgerüstet und den Speicher verdreifacht haben. –

0

Verwenden Sie Automatic Memory Management? Wenn ja, würde ich mich nicht um den verwendeten PGA-Speicher kümmern. Memory Management

Automatik::

Siehe docs http://download.oracle.com/docs/cd/B28359_01/server.111/b28310/memory003.htm#ADMIN11011

MEMORY_TARGET: http://download.oracle.com/docs/cd/B28359_01/server.111/b28320/initparams133.htm

Gibt es einen Grund, warum Sie 32-Bit-Oracle verwenden? Die neueste Hardware unterstützt 64 Bit.

+0

Ja, wir verwenden automatische Speicherverwaltung, aber Ich verstehe nicht, warum die Verwendung von PGA kein Problem darstellt. Sicher, das System kann die Größe des SGA ändern, um dem PGA bei Bedarf mehr Speicher zu geben. Wenn jedoch der Puffercache, der gemeinsam genutzte Pool oder andere Bereiche zu klein werden, führt dies zu Leistungsproblemen. –

+0

Unsere Hardware unterstützt 64 Bit und wir haben vor kurzem versucht, auf Windows 2008 64 Bit mit 11g zu migrieren, aber beim Testen entdeckt, dass Oracle heterogene Dienste in 11g nicht mehr unterstützt und der Ersatz dg4odbc nur auf der 32-Bit-Version funktioniert. Angeblich kommt Unterstützung in 11.2. Siehe 361676.1 auf Metalink, das erklärt dies und gibt eine inakzeptable Problemumgehung. –

+1

>> Wenn jedoch der Puffercache, der gemeinsam genutzte Pool oder andere Bereiche zu klein werden, führt dies zu Leistungsproblemen. Wenn Sie AMM verwenden, sollten Sie Oracle vertrauen, um den Speicher zu verwalten. Wenn Sie ein tatsächliches Leistungsproblem haben, können Sie die verschiedenen Tools in Oracle verwenden, um zu untersuchen. Wenn Sie neugierig sind, können Sie die Entwickler-Sitzung verfolgen und eine Idee bekommen, was sie tun, die den PGA-Speicher verwendet. Hoffentlich wird 11gR2 Ihr HS-Problem beheben. Das Ausführen von Oracle auf 32 Bit ist schmerzhaft. –

0

Oracle, vor allem mit AMM, wird jedes bisschen Speicher auf der Maschine verwenden, die Sie ihm geben. Wenn es keinen Grund gibt, den Speicher freizugeben, wird dies nicht der Fall sein. Dies gilt auch für den Speicherplatz: Wenn Sie 20 GB an Benutzerdaten löschen, wird der Speicherplatz nicht an das Betriebssystem zurückgegeben. Oracle wird daran festhalten, wenn Sie die Tablespaces nicht explizit komprimieren.

Ich glaube, ein einfacher Test sollte Ihre Bedenken lindern. Wenn es 32 Bit ist und jede SQL Developer-Sitzung 100 MB RAM verwendet, müssen nur ein paar hundert Sitzungen geöffnet werden, um ein Problem mit wenig Arbeitsspeicher zu verursachen ... wenn es wirklich einen gibt.

+0

Ich habe getestet, wie Sie vorgeschlagen haben, Sitzungen zu erstellen und Speicherplatz zu verbrauchen, bis ich die Prozessspeicherfehler behoben habe. Für meine erste Sitzung in SQLDeveloper habe ich den Datenreiter einer Tabelle geöffnet und die Tabelle sortiert. Die Verbindung verwendete dann 65 MB Speicher. Ich schloss dann den Tisch, aber die Verbindung hielt weiterhin 65 MB. Ich begann, andere Sitzungen zu erstellen und Speicher zu verwenden, bis ich einen ORA-04030-Out-of-Process-Speicher erhielt. Meine ursprüngliche Sitzung verwendete immer noch 65 MB und tat dies, bis ich es geschlossen habe. –