OK. This is a little test in my SQL Server 2019 CU11 instance. But the behavior I will demonstrate goes way back... and seems like it just may go way forward, too.
First, let's create a test database, with a nice little 3 column CCI table in it.
Let's take 2 minutes (or less) to insert 104,203,264 rows into the clustered columnstore index created.
All right - now let's check on the rowgroup quality. Pretty nice; 100 rowgroups. 99 of them at maximum size, and 1 with almost 400,000 rows.
Let's take a minute and delete 1 row out of every 15 from the CCI.
Here's a quick little query against the CCI, in Read Committed transaction isolation level. The query is run all by itself on the instance, at DOP 1.
Let's run the query again at DOP 1. But change the isolation level to Snapshot. No other queries are running on the instance, so there is no competition for resources. There is nothing in the version store, and there are no other open transactions against the objects in the query. Snapshot isolation all by itself is responsible for increasing the CPU time and the elapsed time of this query on a CCI with deleted rows by a factor of eight.
I've seen this behavior on production systems. But in the field, the effect can be even more pronounced than this example. I've seen more complicated queries involving CCIs have snapshot isolation increase their runtime from under 1 second to over 60 seconds.
That's too bad, since snapshot isolation is a canonical solution that can facilitate read analytics queries against the same database supporting read-write workloads.
If Snapshot Isolation does not meet workload goals, often RCSI is evaluated as an option. In this case, RCSI introduces the same performance overhead as snapshot isolation.
An Availability Group readable secondary also experiences the same performance overhead.
Removing all deleted rows from a CCI allows CCI queries in Read Committed and Snapshot Isolation levels to perform comparably (assuming no competition for resources or locks). But, CCI reorgs will only remove deleted rows from rowgroups with at least 10% of their rows deleted. And CCI rebuilds may not be appropriate given resource and other constrains.