SQL transaction log unexpecting grow on my published database

Problem description: The transaction log grow up without end.

 

Cause: After investigation we can confirm that the distributor database is with sync with backup option. And that cause the issue

 

Resolution: At this end to solve the issue, I remove this option that we don't need. I also check this property to all our publised database to be sure on the impact. And get a back in recovery model simple

select @@SERVERNAME,DATABASEPROPERTYEX('DistributionDB','IsSyncWithBackup')

EXECUTE sp_replicationdboption@dbname=  'DistributionDB',@optname=  'sync with backup'  ,  @value=  'false'

select @@SERVERNAME,DATABASEPROPERTYEX('DistributionDB','IsSyncWithBackup')

 
But if you need it, you could also  plan a backup log every hour and every day for your distributation base in recovery model FULL.

 

 

Work done : here I'm sharing my troubleshooting step that I did to understand this issue.

 

Step 1: I run the dbcc loginfo, and I found out that the number of VLF is increasing to 8135. Yesterday it was around 5000. That we can see that the status is 2, so almost all VLF are used and we are not able to truncate them.

 

Step 2: I had a look to see what the log is waiting to be reuse, we can see that we are pending replication.

select name,log_reuse_wait_descfromsys.databaseswherename='myDBName'

 name   log_reuse_wait_desc
'myDBName' REPLICATION

 

Step 3: I had a look to the Log reader and it was running and replicating the transactions on the distributor database. We saw that inside the verbos log level 2 that we enable.

-Publisher [myPublisherServer] -PublisherDB [myPublisherDB] -Distributor [MyDistributorServer] -DistributorSecurityMode 1  -Continuous -OutputVerboseLevel 2 -Output C:\ReplLog\ReplOutput.txt

Step 4: I enabled the Tracer to see the latency, and we don’t have any latencies on this replication.

 

Step 5:   “Oldest non-distributed LSN” does not change since a couple of days. I found that after  runing several time a DBCC OPENTRAN :

                        Transaction information for database 'myDBName'.

                       Replicated Transaction Information:
                               Oldest distributed LSN : (1218321:2940:24)
                               Oldest non-distributed LSN : (1218321:2959:1) --> this part didn't change during serverals days

 

Step 6:  Now the step was to see if the option synchWithBackup is enable the Distributor and the Publisher

On the distributor:  select @@servername, DATABASEPROPERTYEX('DistributionDbName','IsSyncWithBackup')

 This option was at TRUE

On the publisher : select @@SERVERNAME, DATABASEPROPERTYEX('publisherDBName','IsSyncWithBackup')

 This option was at  FALSE

For information this option means : The database is either a published database or a distribution database, and can be restored without disrupting transactional replication.

 

Step 7: To confirm the issue is due to this option, I put in the same recovery model the distributor database that the use db. Then I run a backup full an log

BACKUP DATABASE[distributionDB]TO  DISK=N'C:\mydump.BAK';

BACKUP LOG[distributionDB]TO  DISK=N'C:\mydump.TRN';

 

After this backup log all VLF on the published database become to 0 and the transaction log can be truncate now.

 

 

 

Regards,

Michel Degremont | Xbox Live Music - Data Engineer - SQL Server & PDW |

Comments

  • Anonymous
    February 25, 2016
    Nice post!