[interesting experiences with virtual servers deleted]
My (totally uninformed) guess is that as a VM Ware mother box
gets loaded up with more and more applications and virtual
machines, our share of MIPS and/or memory decreases.
In cases where the server is being underprovisioned (by design?), as
you describe, yes, you get benefit from wringing all the performance
out of the server as you can.
On the other hand, my experience with non-virtualized SQL Servers
(none of them dedicated boxes, BTW) is that a well-designed Access
app upsizes quite well, and there are only a handful of bottlenecks
that need to be addressed by moving something serverside. I have
noticed the most bang for the buck in moving outer joins to
server-side views, because Jet is apparently not efficient in
handing that off to the server. I had one routine that I thought
would need an sproc, but it worked just fine with plain old DAO code
retrieving summary data (with the Access app, it had been so slow
that I was caching a recordset with the calculations done; the SQL
Server made it fast enough to just request the calculations
on-the-fly).
But since about 1998, I've been designing all my Access apps with
the idea that they might one day need to be upsized to SQL Server.
With that in mind, I do operations in a way that is going to be
efficient with a server, but the great result is that it also makes
the Access app more efficient.
So, obviously, YMMV.
But the difference between the two of us may simply be that I
haven't been in the situation where I was forced by the
infrastructure to wring all the performance out of the SQL Server as
possible.
And I'm not even sure I'm smart enough to do it. If you follow SQL
Profiler with plain vanilla ODBC, you'll see that with a few
exceptions (the most obvious being bulk inserts/updates), Jet is
very smart with what it sends to SQL Server. Almost everything gets
executed by a generic sproc with parameters, so it gets properly
compiled even though it's not server-side.
I was stunned by all of this the first time I upsized, since I
expected my junky old Access app to be completely inefficient. It
wasn't, and SQL Profiler told me what needed to be moved
server-side. It was substantially less than what I expected, and
also ended up not being the things I *assumed* would need to be
moved. Indeed, the biggest problem I had was with tasks that I
assumed were not going to be an issue at all, while the stuff I
thought was going to be a dog ran just fine.
Go figure.