Hi,
When ToCanonical gets an expression it will first use Expand to convert it into a sum of terms and then act on each individual term separately. If the resulting terms cancel out you will get zero. ToCanonical does not abort the global operation because it finds a problem in one of the terms. Canonicalization of each term is independent of the rest. ToCanonical may be slow with an individual term in which there is a lot of symmetry, but having many terms will increase time linearly on average. Of course, having many terms with many indices also increase the chances that some of them are especially complicated.
What I'd recommend is the following: if you have a expression expr formed by a sum of thousands of terms, then first use
terms = Apply[List, expr]
and then use ToCanonical on each of the terms separately. For example you can use Map, or you can use a Table. It it takes very long, perhaps you can work on groups of 100 terms or something like that and collect them at the end. Another possibility is to use parallelization. If you see that ToCanonical gives problems with one of the terms (either because there are messages or because it does not canonicalize as you expect), report it here, or send it to me. If everything seems to work then you will have again a list of canonicalized result, and you can do Apply[Plus, result], or Total[result] to see if this really gives zero.
Cheers,
Jose.