La respuesta es que sí, que el número de filas en la tabla sde_state_lineages afecta directamente al rendimiento de la geodatabase. 200k filas no se considera "mucho" pero eso es relativo a tus recursos disponibles y asumiendo que no hay problemas de versiones que requieran un diagnóstico/reparación. Continúe comprimiendo con frecuencia.
Por sus convenciones de nomenclatura parece que está usando SQL Server como su DBMS subyacente. Los siguientes artículos se aplican a todas las plataformas RDBMS pero las consultas son para Oracle. Se pueden ajustar para SQL Server, se aplica la misma arquitectura. Yo lo he hecho para el primero.
La razón oficial es:
Cuando ArcGIS consulta una tabla versionada para una versión determinada, el versión se utiliza para derivar la representación versionada de la tabla de la tabla versionada (uniendo las adiciones, eliminaciones y sde.state_lineages). El rendimiento puede verse afectado por la longitud del linaje de la versión, debido al número de estados que deben ser entre la tabla sde.state_lineages y las tablas delta.
Cómo hacerlo: Informar de la longitud de un linaje de versión en Oracle http://support.esri.com/fr/knowledgebase/techarticles/detail/35500
Aquí está la consulta de esa página reescrita para SQL Server:
SELECT v.owner +'.'+v.name "VERSION NAME", COUNT(sl.lineage_id) "LINEAGE LENGTH"
FROM sde.sde_states s, sde.sde_state_lineages sl, sde.sde_versions v
WHERE s.lineage_name = sl.lineage_name
AND sl.lineage_id <= s.state_id
AND v.state_id = s.state_id
GROUP BY v.owner, v.name, sl.lineage_name
ORDER BY "LINEAGE LENGTH";
Esto le dirá exactamente cuántos estados contiene el linaje de cada versión. Esto se aplica tanto a las versiones transaccionales como a las versiones del sistema de réplica. También puede ajustar esta consulta para encontrar versiones que apunten al mismo estado que otras versiones; véase #1.
Puntos clave
A partir de su recuento de estados de 900 y el recuento de versiones de 1300, y su declaración de que nunca se reconcilia, tiene 400 versiones que nunca han sido editadas. Una versión es una etiqueta que apunta a un estado, y la única vez que varias versiones apuntan al mismo estado es justo después de haber sido reconciliadas o justo después de haber sido creadas. Yo miraría en la eliminación de esos si su sistema de orden de trabajo lo permite, como ArcGIS explorará la tabla de versiones para muchas funciones. Su recuento de versiones de 1300 podría ser más caro que su recuento de linaje de estado de 200k; depende de lo que esté haciendo cuando note un golpe de rendimiento.
Mantener los índices en la tabla sde_state_lineages, que en SQL Server son state_lineages_pk y lineage_id_idx2. La mayoría de las consultas a ArcSDE realizarán un escaneo de índice completo o de rango. Mantener estos índices actualizados después de sus operaciones diarias de compresión puede ayudar al rendimiento. Aquí hay un artículo sobre el tema:
Crecimiento del índice de la tabla SDE.STATE_LINEAGES http://support.esri.com/en/knowledgebase/techarticles/detail/20596
- Identificación del Estado
También puede consultar a qué versión pertenece un estado, así como cuántos estados pertenecen a un objeto específico editado por una versión específica, utilizando el siguiente artículo:
Cómo hacerlo: Descubrir el número de filas en la tabla de adiciones para el linaje de la versión DEFAULT para una clase de objeto específica
http://support.esri.com/fr/knowledgebase/techarticles/detail/35030
- Seguimiento de objetos por versión y tabla delta
-Aquí tienes una consulta para SQL Server que te dará el id de estado actual de cada objeto versionado junto con qué versión es la responsable y en qué tabla delta se puede encontrar:
SELECT v.owner version_owner,
v.name version_name,
v.state_id,
mm.state_id as modified_id,
mm.registration_id,
tr.owner layer_owner,
TR.TABLE_NAME layer_name
FROM sde.sde_versions v
FULL JOIN sde.sde_mvtables_modified mm ON (v.state_id = MM.STATE_ID)
LEFT JOIN sde.sde_table_registry tr
ON (tr.registration_id = mm.registration_id)
ORDER BY tr.owner, TR.TABLE_NAME;
Espero que esto ayude.
1 votos
La respuesta corta es sí. Cada vez que alguien solicita datos hay que sondear también cada uno de los estados para ver si se han hecho cambios. Creo que es hora de comprimir su base de datos. ¿Estás editando mucho estos datos?
0 votos
¿Qué quiere decir que cada vez que alguien solicita datos hay que sondear cada uno de los estados?
0 votos
Los datos de la tabla son los base Cuando se solicitan datos, el base se lee y luego cada uno de los estados a su vez es interrogado (encuestado) para ver si tiene una actualización de cualquiera de las filas en las tablas de adiciones y eliminaciones, cuantos más estados más tiempo toman las solicitudes de datos; es fracciones de un segundo para cada estado, pero obviamente cuantos más estados más tiempo se necesita. Eso es lo que yo entiendo de la parte de la base de datos de SDE. ¿Por qué no se pueden conciliar las versiones?
0 votos
Porque cada versión es una orden de trabajo que espera ser construida en el mundo real y cada una tendría conflictos que deben ser resueltos, por lo que no puede ser automatizada. Es un verdadero dilema. En cuanto a las tablas base y de estado. Sólo tendría que consultar los estados que se adjuntan a una versión individual, ¿correcto? Así que, si estoy en la versión A, sólo tendrá que consultar los estados y state_lineages que son específicos de la versión A e ignorar los otros registros? ¿O el hecho de tener esa gran cantidad de estados ralentiza la consulta?
0 votos
Es cierto, pero no hay forma de saber a qué versión pertenece el estado, al menos hasta donde yo sé, no me gusta hurgar en la base de datos más de lo necesario por si rompo algo. Para ayudar a acelerar esto se puede pedir a la base de datos que almacene en caché las tablas que se leen con frecuencia, de modo que las busque en la memoria RAM y sólo las lea del disco si están modificadas. Consulte la guía de ajuste de la base de datos de Esri para su base de datos subyacente. La que leí para PostgreSQL ayudó mucho a nuestra base de datos.