-
Notifications
You must be signed in to change notification settings - Fork 3.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
sql: allow deleteRangeNode to autoCommit transactions #41320
Comments
It does look like this is new as of v19.2. This is a pretty bad regression. I think it's probably a release blocker.
|
Wow, good catch, glad you noticed this. We kind of had tests for this, but I overwrote them in my patch because it seemed like they were specific to interleaved tables (the tests were in files named |
Actually, I don't see what you mean - how could you avoid doing a 2pc transaction in this case?
What would happen if you ran |
I put up a strawman PR that doesn't work for the reason that I mentioned. Maybe I'm just missing something about what you said. |
First commit from cockroachdb#41324. We expect a selection of simple single-statement mutations to hit the "1-phase commit" transaction fast-path. cockroachdb#41320 demonstrated how critical this is, as regressions here can cause major (> 50%) performance hits to benchmarks and user workloads. This commit adds a logic test to validate that these statements continue to hit this fast-path. Release justification: Testing only. Release note: None
First commit from cockroachdb#41324. We expect a selection of simple single-statement mutations to hit the "1-phase commit" transaction fast-path. cockroachdb#41320 demonstrated how critical this is, as regressions here can cause major (> 50%) performance hits to benchmarks and user workloads. This commit adds a logic test to validate that these statements continue to hit this fast-path. Release justification: Testing only. Release note: None
41356: Revert "opt: disallow mutations under union" r=RaduBerinde a=RaduBerinde This reverts commit a34d705. Release justification: recently merge fix no longer needed (thanks to #41307). Release note (sql change): Mutations under UNION or UNION ALL are allowed again. 41358: sql/logictest: add logictest for all expected 1PC txn statements r=nvanbenschoten a=nvanbenschoten First commit from #41324. We expect a selection of simple single-statement mutations to hit the "1-phase commit" transaction fast-path. #41320 demonstrated how critical this is, as regressions here can cause major (> 50%) performance hits to benchmarks and user workloads. This commit adds a logic test to validate that these statements continue to hit this fast-path. Release justification: Testing only. 41371: kv: avoid allocations in client.Txn constructor r=nvanbenschoten a=nvanbenschoten This PR contains two small wins that help speed up the client.Txn constructor, which is responsible for **2.90%** of a CPU profile when running Sysbench's `oltp_point_select` workload. The biggest win here will come from addressing #32508. #### kv: lazily create *RangeIterator in txnPipeliner This allocation was responsible for **0.34%** of a CPU profile when running Sysbench's `oltp_point_select` workload. #### kv: only re-alloc refresh spans in augmentMetaLocked if necessary This was responsible for **0.057%** of a CPU profile when running Sysbench's `oltp_point_select` workload. Release justification: None. These can wait for the branch to split. 41372: sql/pgwire: statically allocate format code slice for all text args/cols r=nvanbenschoten a=nvanbenschoten This allocation was responsible for **0.8%** of a CPU profile when running Sysbench's oltp_point_select workload. Release justification: Probably none, although this does look very safe. Release note: None 41379: pkg/sql: use ring.Buffer in StmtBuf r=nvanbenschoten a=nvanbenschoten The StmtBuf has the exact access patterns typically associated with a ring buffer. Command instances are added to the back of the buffer and trimmed from the front of the buffer. These operations are often performed in lockstep, but that is not always the case, so we need the buffer to be able to grow. `ring.Buffer` provides exactly these semantics and it allows us to avoid memory allocations on each Command in `StmtBuf.Push`. Release justification: None. Don't merge until branch is split. Co-authored-by: Radu Berinde <radu@cockroachlabs.com> Co-authored-by: Nathan VanBenschoten <nvanbenschoten@gmail.com>
deleteRangeNode
currently has the following restriction:cockroach/pkg/sql/delete_range.go
Lines 29 to 31 in 445ec41
This has huge performance implications, as it means that no point
DELETE
statement can run as a 1PC transaction. This results in roughly a 50% performance hit for delete-heavy workloads on tables without secondary indexes.The comment says that we delete in batches and we won't know whether or not there is more work to do until after a batch is returned. I don't fully understand this. If the comment is talking about
b.Header.MaxSpanRequestKeys = TableTruncateChunkSize
then I don't think this needs to preclude attempting a 1PC transaction. I think the kv implementation is smart enough to handle 1PC transactions with key limits. If it's not, we should make it work to support this case.For context, we have heard in the past from people running Cockroach that deletes are slower than inserts, which has never made sense to me. This explains why this is the case. Sysbench adds more weight to this claim.
oltp_delete
without a secondary index is the only sysbench workload that we are slower on than similarly architected databases. If we could run pointDELETE
statements as 1PC transactions then we would immediately close this gap.@jordanlewis I noticed that some of this changed in #36728. Do you have context on this? Did that cause a regression in this behavior?
The text was updated successfully, but these errors were encountered: