0

I built a calendar-type application on MS Access 2013 with SQL Server as the back-end (each day on the calendar is a subform). About 20 tables are connected using the line Call AttachDSNLessTable([details here]). On-site the speed is just fine, but when I try to access it through a VPN, it takes about 6 minutes to simply load the home screen. And everything else takes at least 5 times longer to do.

I'm ignorant of alternative options. Is it possible the make the database accessible over the internet? Would that even speed things up? Or should we increase the bandwidth of the VPN? What's my best option here? Thanks.

2
  • Each user has a copy of the frontend? Or do they have to download everything when they access it remotely?
    – CharlieRB
    Apr 14, 2016 at 15:51
  • Yes, each user has a copy of the frontend on their local computer/laptop.
    – Mike
    Apr 14, 2016 at 17:05

1 Answer 1

1

Your general application architechure (Access with Linked Tables) is probably flawed for this purpose. It can probably be fixed (mostly) but not without some revision.

The key issue is, that when Access is the front end, Access itself determines whether it can submit the entire query for processing by SQLServer, and often comes to the conclusion that it cannot, so it often performs the query itself, by downloading the whole table. This is particularly true with Joins, especially if there is not a strong primary key on each of the tables in use.

Here is the MS Technet doc on performance for Access Linked Tables with SQLServer backend: https://technet.microsoft.com/en-us/library/bb188204%28v=sql.90%29.aspx

The most pertinent bit is:

The major cause of query performance degradation is when a query involving very large tables requires that all of the data from one or more tables be downloaded to the client. This can happen even when joins or criteria appear to limit the result set to a small number of records. This occurs because sometimes the Office Access database engine determines that it cannot submit an entire query to SQL Server. Instead, it submits multiple queries, often including queries that request all of the rows in a table, and then it combines or filters the data on the client. If the criteria require local processing, even queries that should return only selected rows from a single table can require that all the rows in the table be returned.

  • Using the JET/ODBC diagnostics utilities to determine where all the work is being done.
  • Using Snapshot RecordSets in access where possible.
  • Push query logic to the SQLServer with Views and Stored Procedures/Functions.
  • Establish solid Keys and Indexes in SQLServer, and make sure the indexes are defragmented as needed.
  • Caching commonly used data in Access.

The link above has lots of great advice and technical details for someone in your position. Good luck!

3
  • Thanks for the link. I'm sure it will be helpful regardless, but it sounds like the advice is not specific to a slowdown through a VPN. My application speed on-site is just fine, the problem is just when accessing it through a VPN. If I maximized the speed using the tips in the article, it would be faster but likely not fast enough to mitigate the slowdown through the VPN. My question is more wondering if there was a way to make the application work well off-site, whether it be increasing the capacity of the VPN, making the application internet-facing (if that's even an option), etc.
    – Mike
    Apr 14, 2016 at 17:56
  • VPN throughput is much higher latency than a LAN connection. I once wrote a .Net app to work over a VPN that used DataSets as its data access technology, and everything worked perfectly in our office, because 12MB transfers in about a second on a 100mbps link, but took our vpn connected DSL using folks 5+ minutes to transfer over the wire. You app runs acceptably on a low latency link, but to address the concerns of a high latency link like a remote VPN connection, you will have to do what I did; refine your data access methodology to pass only the absolute minimal data required for the task. Apr 14, 2016 at 18:38
  • 1
    About the only think you could do, without revising any of the existing structures, is to provide the application through RDP/Terminal Services. Have your users log into a remote desktop over the VPN, and run the access app from there. That will keep all your data within your network, and will only serve to the remote users an visual rendering of the data in the form of screen frames, so that should dramatically reduce the amount of data passed over the wire. It will probably cost a small fortune in licensing if you need concurrent multi-user access, but its prolly easier. Apr 14, 2016 at 19:50

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .