A description of DDR block situation.
DDR Block problem:
Some of the definitions related to DDR Block mode:
Replay position: This is the 'oldest' transaction that has not been acknowledged by all of its target instances and has not been stably stored in send queue. Replay position is the point where ER would have to begin snooping if the engine is restarted.
Snoopy position: The snoopy position is the log position that ER (ddr_snoopy) is currently processing.
Current position: The current log position is where the sqlexec threads are currently adding records to the logical log.
DDRBLOCK: DDRBLOCK is set when the current log position is getting too close to the replay log position. You will see the following onstat output when server is in DDRBLOCK mode.
Here is a diagram that explains DDR Block mode situation. I took this from one of the user conference presentation.
The “log needs” is not a fixed position in the log file, but a distance from the replay position. In the above chart, this represents about 70% of the distance from the replay position (everything except the DDR BLOCK zone). If the current position advances into the DDR BLOCK zone, DDR BLOCK will be set, causing sqlexec threads to hang.
As messages are ACKed or they are stored in the stable queue, the replay position should advance. Since the “log needs” position is based on the distance from the replay position, it will also advance. Once it has advanced one fourth of the “log needs” amount, DDR BLOCK will be lowered.
Some of the diagnostic outputs to collect in DDR Block situation:
- Server message log files
- onstat -g grp pager
- onstat -g all
- onstat -g stk all
- onstat -a
- onstat -g rcv full [at target server]
- onstat -g cdr