I'm investigating a performance issue in an ArcGIS Enterprise geodatabase on SQL Server and wanted to see whether others have run into similar archive growth problems.
Environment:
- ArcGIS Enterprise 11.3
- Traditional versioning with archiving enabled
- SQL Server backend
- Feature class has approximately 118.5K active features
- Underlying SQL table has grown to approximately 16M+ rows
- The ArcGIS Pro client and ArcGIS Enterprise environment are on the same LAN.
- Separate app and database servers.
- DB Server: 32GB RAM, 2.70 GHz - 4 sockets, 4 virtual processors
- App Server: (same specs as DB server)
A bit about my background. I'm a software developer with some DBA experience . I'm working with our GIS analyst to keep this system running. We do not have a dedicated ArcGIS technical expert on staff.
Problem 1: Slow feature loading in ArcGIS Pro
We are seeing performance issues in ArcGIS Pro when this feature class is added to a map. Features take a long time to load and display.
As a test, we exported the feature class to a local file geodatabase and the performance problems disappeared. However, the file geodatabase export did not appear to preserve archive history, so I am not sure whether that is a meaningful comparison. It just proved the obvious: that less records yields a quicker experience.
Problem 2: Archive row inflation
We run a daily synchronization process that updates individual features with data from an external system. Turns out there was a bug in the script causing unchanged rows to be updated, which creates a new archive row. The script only targets a subset of all features in the class, but it still creates 20k new archive rows daily.
After the sync process completes we rebuild indexes.
Our feature class SQL table is 67GB, the index is 9GB.
Question 1:
Even with the reindexing, could the excess archive rows be causing the speed issues?
Question 2
Is there a way to safely perform SQL deletes of the duplicate archive rows (that don't represent actual changes). Then repair the gap.
Example:
Given a feature with GlobalID =1234, there are the rows: A B C D E F G.
G is the current row
A - F are the archive rows. B - F are all duplicates of A
Actions
1. Delete the duplicates
DELETE records B C D E F
2. Repair the gap
SET A.[GDB_TO_DATE] = G.[GDB_FROM_DATE]