Hi Bob,
It is hard to tell why your environments perform differently; so many aspects could be an issue...
Like index fragmentation, like non updated stats, like different storage, nonoptimal stored exec plans, and freeing cache regularly on one system...
First, I would like to ask if you stated some things differently:
Both environments have 256GB RAM
Prod - "230 GB set as MAX SERVER MEMORY" and "max server memory (MB) 486592"
UAT - "230 GB set as MAX SERVER MEMORY" and "max server memory (MB) 235520"
What kind of value is that second PROD value? Where does it come from, or is it just a "Copy&Paste" error?
maxDoP on database level - is it set to 4 on ALL databases or just on one?
If it is set only on one or some databases... UAT maxDoP on the instance was set to 0, and CTfP = 5 means a lot of queries (if not restricted on db level) will run in parallel, which might be a boost depending on your workload.
Prod is set to a single thread, overridden by the db level set to 4
That might be the biggest impact of why UAT is performing better.
RecoveryMode Simple/Full might be an issue have your storage for the transaction log file performs really badly and is the IO bottleneck
You should look at the WAITSTATS on both environments, then check which statements aren't performing differently on both environments, and then dive deeper into why there are differences... maybe it is the storage or a config issue.
Let us know ;-)
I hope my answer is helpful to you,
Your
Bjoern Peters
If the reply was helpful, please upvote and/or accept it as an answer, as this helps others in the community with similar questions. Thanks!