In my UKOUG 06 presentation on block change tracking internals I assumed that “change tracking state change latch” is, probably, used by DBWR and CTWR to protect access to a buffer area in shared pool. I wanted to verify it and tried to trace this latch.
It turned out that it has nothing to do with what I thought. So far I found only few cases when “change tracking state change latch” is acquired:
- during instance startup (when opened) — CTWR process starts and takes the latch once.
- during instance shutdown — CTWR stops and takes the latch once.
- during enabling and disabling block change tracking while database is open — session’s shadow process acquires the latch twice and CTWR process takes it once when it starts or stops.So it seems that this latch is used very rarely. Perhaps, there are other cases which I didn’t figure out but as I observed in several databases, the number of gets for this latch is 1 if block change tracking is left enabled from instance startup.
This leaves the open question — how does CTWR determine which blocks have been changed?