Hi All,
First of all - let me apologize regarding slight error in Apress blog post content. This is the old post and I corrected it in my upcoming troubleshooting and performance tuning book. :)
Udham is indeed correct - row versioning is not used on primary when it is not enabled. With readable secondaries, you would get 14-byte pointer added (beware of fragmentation impact). You would also have ghost cleanup (and version store cleanup when used) deferred based on oldest active transactions across all nodes. But SQL Server would not use version store on primary unless it is enabled or used by other processes (triggers, MARS, online index rebuild, etc).
Speaking of Longest Transaction Running Time - unfortunately, I don't know the answer. I cannot duplicate the problem in simple setup - active explicit transaction on secondary does not increase this counter on primary in my setup (would be easy to check in your environment with perf monitor, I suppose). I don't want to question monitoring strategy but I'd be a bit reluctant to use this performance counter to drive conclusions. It is not sampled frequently enough and it may be hard to correlate the information with the other sources. It is entirely possible that long running transaction on primary is gone by the time you received the alert.
So bottom line - why do you think long running transaction alert is triggered by secondaries activity instead of legit long running transaction on primary?
I would look at sys.dm_tran_database_transactions and other transactions DMV to confirm that the problem exists in the first place.
Sincerely,
Dmitri