Many applications need to generate sequence numbers for each transaction.
a. If a sequence counter is locked in two-phase manner, it can become a concurrency bottleneck. Explain why this may be the case.
b. Many database systems support built-in sequence counters that are not locked in two-phase manner; when a transaction requests a sequence number, the counter is locked, incremented and unlocked.
i. Explain how such counters can improve concurrency.
ii. Explain why there may be gaps in the sequence numbers belonging to the final set of committed transactions.