We have following setup at the moment:
8 Cluster servers (SQL Server 2012 Standard Edition) talking to 2,000 store servers in the field via Merge Replication.
The 8 servers are replicating to a reporting DB server (SQL Server 2008 R2 Enterprise).
We have partitioned tables using the server ID from 8 servers on this reporting database so we can have data in one database and not going to 8 individual databases. It using Push Transactional Replication.
We would like to do the following:
Create a New Transactional Publication on this reporting DB server which would replicate to 2 SQL Server 2012 Standard nodes for scale-out. We've implemented this, and it's working as expected.
Issue we are running into:
One of the articles gets about 3 million updates (i.e. Delete and Insert coming from 8 cluster servers) twice in the morning and twice in the evening.
This causes a lot of activity in the Distribution database under
MSRepl_Commands table, which the reporting server is not keeping up with causing the entire replication to the "scale out" nodes to come to a halt. Commands keep piling up under the Distribution database at the reporting database server.
How can we make sure these Updates under this particular Article are getting cleaned up quickly at the Distribution database and keep replication to scale out nodes in good condition?
UPDATE: I am constantly seeing blocks when Distribution Cleanup job is running:
"Update MSsubscriptions..." is creating block ON this statement "UPDATE MSdistribution_history..."
One of the column in this particular article is VARBINARY(MAX) would that make a difference with large batch of INSERT and DELETE?