OLTP owes hundreds of concurrent users millisecond answers; analytics serves a few patient users whose queries each want every core. On one server the report competes with checkout for CPU, cache and I/O, so heavy analytics moves to a replica or a separate store.
Isolation is the subtler conflict. A ten-minute report must see one consistent state, and PostgreSQL 1,289 's multiversion concurrency control (MVCC) gives a REPEATABLE READ transaction a single snapshot without blocking writers. demos/ch04/scripts/snapshot.sh proves it: an analyst's transaction counted 100,000 orders, the app committed order 100,001 without waiting, and the analyst still counted 100,000 until it started a new transaction. Meanwhile pg_stat_activity showed the analyst's session holding backend_xmin at 848, and while that snapshot is open VACUUM may not remove row versions that died after transaction 848. A forgotten hour-long report bloats busy tables, which is why idle_in_transaction_session_timeout exists.