Umgang mit ArcSDE-Verbindungslimit überschritten?

12

Wir überschreiten routinemäßig das ArcSDE-Verbindungslimit, etwa einmal pro Woche. Viele der "Verbindungen" sind nichts anderes als verwaiste Datensätze in der SDE.PROCESS_INFORMATIONTabelle. Gibt es eine Möglichkeit, diese Verbindungen regelmäßig zu bereinigen? Ich habe gerade ArcSDE auf 9.3.1 SP2 gepackt, in der Hoffnung, dass dies das Problem lösen würde. (Hat es nicht.) Derzeit starte ich den arcsdeDienst neu, um die Verbindungen zu bereinigen, eine ziemlich unelegante Lösung.

Dies ist übrigens der Fehler:

Failed to connect to database. Maximum number of connections to instance exceeded

Mein Workaround:

Meine Lösung war einfach: Starten Sie den SDE-Dienst wöchentlich neu und verdoppeln Sie die Anzahl der zulässigen Verbindungen. Dies ist natürlich keine Lösung ; Schande über ESRI für den Versand von Unternehmenssoftware, für die eine solche Problemumgehung erforderlich ist. Immerhin ist es immer noch möglich, die maximale Anzahl von Verbindungen zu überschreiten. Ich kann nur hoffen, dass unser aktueller Nutzungsgrad nicht dazu führt.

Ich habe das init.dSkript geändert , um zu verhindern, dass sdemonder Benutzer aufgefordert wird, das Beenden des Dienstes zu bestätigen (dies ist das -NArgument). Ich habe auch eine restartOption hinzugefügt .

#!/bin/bash
#
# arcsde Init file for starting and stopping ArcSDE 9.3
#
# chkconfig: 35 90 40
# description: ArcSDE startup script

# Source function library.

. /etc/rc.d/init.d/functions

SDE_OWNER="sde"
SDEHOME="/home/sde/sdeexe93"

case "$1" in
start)
echo -n $"Starting ArcSDE:"
su - $SDE_OWNER -c "$SDEHOME/bin/sdemon -o start -p pwd"
echo "OK"
;;
stop)
echo -n $"Stopping ArcSDE:"
su - $SDE_OWNER -c "$SDEHOME/bin/sdemon -o shutdown -p pwd -N"
echo "OK"
;;
restart)
cd "$CWD"
$0 stop
sleep 5
$0 start
;;
*)
echo $"Usage: $0 {start|stop|restart}"
esac

Dann habe ich einen Cron-Job erstellt, um den Dienst einmal wöchentlich neu zu starten:

# restart arcsde once weekly at 5am Saturdays
0 5 * * 6 service arcsde restart

Ich habe außerdem die maximale Anzahl zulässiger Verbindungen von 64 auf 128 erhöht, indem ich die $SDEHOME/etc/giomgr.defsDatei bearbeitet habe :

CONNECTIONS      128     # maximum number of connections
                         # NOTE:  On windows machines, you may need to
                         # increase server non-interactive desktop memory.
                         # Consult the ESRI support site for more information.

Dann habe ich die neuen Einstellungen importiert:

$ sdeconfig -o import -f $SDEHOME/etc/giomgr.defs -i esri_sde -u sde

Das war's. Wir werden sehen, wie es geht.

nw1
quelle
1
Wie haben Sie überprüft, ob die Einträge in den process_information-Tabellen tatsächlich verwaiste Verbindungen sind?
Derek Swingley,
Natürlich sind nicht alle verwaist, aber ich habe 2 Wochen alte Verbindungen von Arbeitsstationen mit einer Betriebszeit von <24 Stunden gefunden.
nw1
1
Eine Sache wurde mir gesagt: Wenn verwaiste Verbindungen bestehen, wird der Prozess zum Bereinigen der Verbindungen erst nach einer Kollision gestartet. Wenn Sie also die maximale Anzahl von Verbindungen auf 100 festgelegt haben und in process_info 50 Einträge vorhanden sind und beispielsweise 20 verwaiste Einträge haben, werden die Verbindungen erst bereinigt, wenn SDE versucht, diesen 101. Eintrag in process_info einzufügen. Wie auch immer, Sie sagen, dass Sie tatsächlich die Meldung erhalten, dass die maximale Anzahl an Verbindungen überschritten wurde, sodass der Prozess zum Bereinigen von Verbindungen ausgelöst werden sollte. Ich würde untersuchen, wie die Benutzer dieser Workstations die Verbindung trennen.
Derek Swingley

Antworten:

1

Sie können auch in Betracht ziehen, dass Ihre Benutzer eine direkte Verbindung herstellen und den Dienst insgesamt umgehen. Dies behebt einige Probleme, die ich mit dem Aufhängen von Diensten hatte, und führt zu einer leichten Erhöhung der Verbindungsgeschwindigkeit für Benutzer.


quelle
Ja, und das verringert auch die Belastung der Maschine. Da der Benutzer-PC die DAL-Verwaltung so handhabt, dass SQL nur als Datenspeicher verwendet wird, werden die Daten programmgesteuerter unterstützt.
DEWright
1

Dies ist eine Antwort, die gestern von meinem Vorgesetzten zu diesem Thema an einen Kunden gesendet wurde.

Um die Anzahl der ArcSDE-Verbindungen zu erhöhen, kann auf dem ArcSDE-Server die folgende Syntax verwendet werden:

sdeconfig -o alter -v CONNECTIONS=140 -u sde -p sde_password -i sde_instance

Dabei ist "sde_instance" der Name oder die Portnummer des ArcSDE-Service.

Sie können überprüfen, ob diese Änderung vorgenommen wurde, indem Sie den folgenden Befehl ausführen:

sdeconfig -o list -u sde -p sde_password -i sde_instance.*

CDBrown
quelle
Ja, ich habe dies zusätzlich zum Erstellen eines Cron-Jobs getan, der den arcsdeDienst einmal wöchentlich neu startet .
NW1
0

Wir haben den Server immer nur regelmäßig abgehackt, um dies zu tun ...

DavidF
quelle
0

Haben Sie diesen Beitrag im ESRI-Forum gelesen , der etwas alt ist, aber es gibt Skripte, die das tun, was Sie tun möchten?

MathiasWestin
quelle
Ich habe das Skript von T Beinmal ausgeführt, aber es hatte keine Wirkung. Es ist fast 5 Jahre alt und ich vermute, dass sich seitdem zu viel in der Umwelt verändert hat.
nw1
Ich würde nicht davon ausgehen, dass sich auf der SDE-Seite zu viel geändert hat. Hast du einen Link zu dem Skript, das du ausgeführt hast?
Derek Swingley
Ich denke nicht, dass es große Unterschiede zwischen 9.2 und 9.3.1 geben sollte. ESRI hat die Art und Weise geändert, wie Geodatabases behandelt werden. Dies ist jedoch in ArcGIS 10. Wir starten unser ArcSDE neu, da viele andere dies vorschlagen, sodass ich es nicht freigeben kann Vorkenntnisse im Umgang mit den Skripten.
MathiasWestin,
Das GDB-Zeug hat sich geändert (Tabellen mit GDB-Präfixen wurden konsolidiert), aber ich bin mir ziemlich sicher, dass das zugrunde liegende SDE-Zeug dasselbe ist.
Derek Swingley
@ Swingley Ich stimme dir voll und ganz zu.
MathiasWestin