Problem:
Wenn zwei oder mehr Benutzer auf gleiche Tabellen und Featureklassen in der selben Microsoft SQL Server Datenbank zugreifen, verschlechtert sich die Performance spürbar im Vergleich zum Zugriff nur eines Benutzers. Dies ist bereits bei einfachen Funktionen wie dem Verschieben des Kartenausschnitts nachvollziehbar, wirkt sich aber auf sämtliche Funktionen mit Datenbankzugriff aus.
Ursache:
Dieses Verhalten ist bei Esri unter "#BUG-000132672 Performance decreases while users simultaneously access the same data." als Known Limit registriert. Ursächlich ist ein Verhalten des Microsoft SQL Server, das Esri wie folgt beschreibt:
This issue is caused by a Microsoft behavior where Cursor + SELECT operations forces some strong name validations and causes mismatch between cached SCHEMAID + current user’s default SCHEMAID. A recompilation is triggered based on that mismatch and is the cause of the performance issue.
Umgehung:
Das Verhalten tritt auf, wenn jeder Benutzer sein eigenen Schema im Microsoft SQL Server hat. Verwenden alle Benutzer ein einheitliches Schema (z.b. DBO oder SDE), dann tritt das Verhalten nicht auf.
Einschränkung: Die Verwendung eines einheitliches Schemas beinhaltet die Einschränkung, dass die Benutzer keine eigenen Tabellen anlegen dürfen. Davon betroffen ist in UT for ArcGIS die Erzeugung von Tabellen zum Zwischenspeichern von UT Objekten (RESTAB). |
Anpassung in bestehender Installation:
Im Microsoft SQL Server Management Studio kann man dies nachräglich anpassen.
Anpassung der Skripte zur Erzeugung von Benutzern:
Wenn Benutzer mit den von UT for ArcGIS bereitgestellten Skripten angelegt werden sollen, muss das Skript UT.create_user.MSSQL.sql angepasst werden. Dazu müssen folgende Zeilen entfernt oder auskommentiert werden.
ALTER USER [$(USER_NAME)] WITH DEFAULT_SCHEMA=[$(USER_NAME)];
GO
Anpassung bei Verwendung von SSO:
Bei Verwendung von Single Sign On (SSO) muss das Skript UT.utusradm_procedures.MSSQL.sql angepasst werden. In der Prozedur ARCFMUT_CREATE_USER müssen folgende Zeilen entfernt werden.
set @CreateStatement = N'ALTER USER [' + @UserName + N'] WITH DEFAULT_SCHEMA=[' + @UserName + N']';
EXEC [$(USER_NAME)].ArcFMUT_EXEC_ANYSQL @CreateStatement;
Die so geänderte Prozedur muss dann noch in die Datenbank übertragen werden, entweder über das Skript UT.setup_SDE_MSSQL.bat oder händisch über selcmd.
sqlcmd -S %SQLSERVER% -H %SQLHOST% -d %SQLDB% %SQLADMIN% -i UT.sde_procedures.MSSQL.sql -o %SQLDBPATH%UT.sde_procedures.MSSQL.sql.log -v SQLDB=%SQLDB% SDE_OWNER=%SDE_OWNER% SQLADMIN_USER=%SQLADMIN_USER%
Kommentare
0 Kommentare
Bitte melden Sie sich an, um einen Kommentar zu hinterlassen.