This seems strange, but in fact I cannot reproduce your issue.
However, if I were able to reproduce this issue, I would solve this by using a Batch.
public class DeleteBatch implements Database.Batchable<SObject>, Database.Stateful {
public final String Query;
public DeleteBatch ( String q ) {
Query = q;
}
public Iterable<SObject> start( Database.BatchableContext bc ) {
return Database.query(query);
}
public void execute( Database.BatchableContext bc, SObject[] scope ) {
Database.deleteImmediate(scope);
}
public void finish( Database.BatchableContext bc ) {
}
}
Database.executeBatch(new DeleteBatch('select Son__c, Daughter__c from Big_Mommy__b'));
However, for me even simple statement
Database.deleteImmediate([select Son__c, Daughter__c from Big_Mommy__b]);
executes successfully, so I am unable to verify if batch works for you. But in batch you can set batch size for example
Database.executeBatch(new DeleteBatch('select Son__c, Daughter__c from Big_Mommy__b'), 1);
to execute one record at a time.
Or you could modify my execute statement
public void execute( Database.BatchableContext bc, SObject[] scope ) {
for (SObject record:scope)
Database.deleteImmediate(record);
}
I think at least one of these options should work for you.