The most common problem is planning it as a blaming session and not as a meeting to come up with a plan to never repeat a mistake.
Or, in the rare case it's about a success: Plan it as a way to get to the root of why we succeeded, and how to repeat that routinely.
Placing the blame
To be successful, these sessions must not be about blaming (or complimenting) a specific person (or group).
You always want to be focusing on the process and not the person.
The timeline of what exactly happened and when in chronological order - needs to be agreed upon before the meeting.
If need be, have a pre-meeting to agree on the timeline, with everybody presenting facts (if possible).
Otherwise the meeting focuses on who did what when and why, instead of figuring out how to (not) repeat the process.
The atmosphere at these sessions must be conducive to freedom-of-speech. As already stated, the purpose is to figure out the problematic (or successful) process, not person (or group).
Similar to a brainstorming session, people should be allowed to say whatever they feel like (politely) without fear of being reprimanded.
(At the post-mortem of our worst catastrophes we always had the biggest cake and best nosh. Everybody knew: The better the food the worse the calamity. But it sets the mood: we're not going to shoot anybody; we want to fix the problem.)
Strict meeting protocol
To be effective, the sessions need to run along an agenda with a fixed (but not rigid) timeline.
Only one person is allowed to talk at a time, and they have to remain on-topic.
You will get nowhere if everybody starts talking at the same time, or worse, start yelling at each other.
The meeting must have a stated purpose - to prevent (or repat) what we are discussing, by creating a new policy/process that most of the team agrees to. (And all have to follow, until it's proven pointless).
There needs to be meeting minutes taken and disseminated, and there needs to be a clear bottom line.