
Creé una aplicación de tipo calendario en MS Access 2013 con SQL Server como back-end (cada día del calendario es un subformulario). Unas 20 mesas están conectadas mediante la línea Call AttachDSNLessTable([details here])
. En el sitio, la velocidad está bien, pero cuando intento acceder a través de una VPN, me lleva unos 6 minutos simplemente cargar la pantalla de inicio. Y todo lo demás lleva al menos 5 veces más tiempo.
Ignoro las opciones alternativas. ¿Es posible hacer que la base de datos sea accesible a través de Internet? ¿Eso aceleraría incluso las cosas? ¿O deberíamos aumentar el ancho de banda de la VPN? ¿Cuál es mi mejor opción aquí? Gracias.
Respuesta1
La arquitectura general de su aplicación (Acceso con tablas vinculadas) probablemente sea defectuosa para este propósito. Probablemente pueda solucionarse (en su mayor parte), pero no sin alguna revisión.
La cuestión clave es que, cuando Access es la interfaz, el propio Access determina si puede enviar la consulta completa para que SQLServer la procese y, a menudo, llega a la conclusión de que no puede, por lo que a menudo realiza la consulta él mismo, descargando el archivo completo. mesa. Esto es particularmente cierto con las uniones, especialmente si no hay una clave primaria segura en cada una de las tablas en uso.
Aquí está el documento de MS Technet sobre el rendimiento de Access Linked Tables con el backend de SQLServer:https://technet.microsoft.com/en-us/library/bb188204%28v=sql.90%29.aspx
La parte más pertinente es:
La causa principal de la degradación del rendimiento de las consultas es cuando una consulta que involucra tablas muy grandes requiere que todos los datos de una o más tablas se descarguen al cliente. Esto puede suceder incluso cuando las uniones o criterios parecen limitar el conjunto de resultados a una pequeña cantidad de registros. Esto ocurre porque a veces el motor de base de datos de Office Access determina que no puede enviar una consulta completa a SQL Server. En su lugar, envía varias consultas, que a menudo incluyen consultas que solicitan todas las filas de una tabla, y luego combina o filtra los datos en el cliente. Si los criterios requieren procesamiento local, incluso las consultas que deberían devolver solo filas seleccionadas de una sola tabla pueden requerir que se devuelvan todas las filas de la tabla.
- Usar las utilidades de diagnóstico JET/ODBC para determinar dónde se está realizando todo el trabajo.
- Utilizar Snapshot RecordSets en el acceso siempre que sea posible.
- Envíe la lógica de consulta al SQLServer con vistas y procedimientos/funciones almacenados.
- Establezca claves e índices sólidos en SQLServer y asegúrese de que los índices estén desfragmentados según sea necesario.
- Almacenamiento en caché de datos de uso común en Access.
El enlace de arriba tiene muchos consejos y detalles técnicos excelentes para alguien en su posición. ¡Buena suerte!