Skip to content
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

util: support 128 FastIntSet elements without allocation #72798

Merged
merged 1 commit into from
Dec 14, 2021

Conversation

RaduBerinde
Copy link
Member

@RaduBerinde RaduBerinde commented Nov 16, 2021

util: support 128 FastIntSet elements without allocation

This commit increases the size of the "small set" bitmap from 64 bits
to 128 bits. The main goal is to avoid the slow path in optimizer
ColSets for more queries.

Fixes #72733.

Release note: None

@cockroach-teamcity
Copy link
Member

This change is Reviewable

Copy link
Collaborator

@mgartner mgartner left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Very nice! :lgtm:

Reviewed 2 of 2 files at r1, 2 of 2 files at r2, 2 of 2 files at r3, 13 of 13 files at r4, all commit messages.
Reviewable status: :shipit: complete! 1 of 0 LGTMs obtained (waiting on @cucaroach, @nvanbenschoten, and @RaduBerinde)


pkg/sql/opt/xform/testdata/rules/join, line 185 at r4 (raw file):

SELECT * FROM abc, stu, xyz WHERE abc.a=stu.s AND stu.s=xyz.x
----
memo (optimized, ~42KB, required=[presentation: a:1,b:2,c:3,s:7,t:8,u:9,x:12,y:13,z:14])

Adding 8 bytes to FastIntSet increases memo size by 13.5%... Shows you how much we use FastIntSet.


pkg/util/fast_int_set.go, line 309 at r2 (raw file):

		return (s.small & rhs.small) == s.small
	}
	if rhs.large != nil {

nit: should/could this be if !rhs.large.fitsInSmall() {?


pkg/util/fast_int_set.go, line 322 at r2 (raw file):

		// Fast path.
		if delta > 0 {
			if bits.LeadingZeros64(s.small)-(64-smallCutoff) >= delta {

A mysterious -(64-smallCutoff) => -(0) 😆


pkg/util/fast_int_set.go, line 343 at r2 (raw file):

// If the set fits in s.small, we encode a 0 followed by the bitmap values.
//
// Otherwise, we encode a length followed by each element.

nit: mention that Encode errors if the set contains negative integers.


pkg/util/fast_int_set.go, line 43 at r4 (raw file):

// bitmap implements a bitmap of size smallCutoff.
type bitmap [bitmapWords]uint64

This blog post mentions that the compiler doesn't optimize [2]uint64 as well as struct { a, b uint64 } due to golang/go#24416. Maybe their case was special and we won't run into the same problem, but it might be worth checking. The [2]uint64 approach is certainly preferable because the implementation is cleaner and it'll be easy to grow the small set in the future if needed.


pkg/util/fast_int_set.go, line 164 at r4 (raw file):

// ForEach calls a function for each value in the set (in increasing order).
func (s FastIntSet) ForEach(f func(i int)) {
	if s.large != nil {

Is small set iteration generally faster than large set iteration? If so, we should change this to if s.fitsInSmall() {.


pkg/util/fast_int_set.go, line 341 at r4 (raw file):

		}
		for _, v := range s.small {
			if err := writeUint(v); err != nil {

Currently Encode is only used for plan gists. Are gists ever persisted to disk? Are they ever encoded by one node and decoded by another? Both cases would require handling this new encoding format carefully.


pkg/util/fast_int_set.go, line 395 at r4 (raw file):

func (v bitmap) IsSet(i int) bool {
	return v[i>>6]&(1<<uint64(i&63)) != 0

😳


pkg/util/fast_int_set_test.go, line 71 at r1 (raw file):

					// Cross-check Ordered and Next().
					var vals []int
					// Start at the minimum vale, or before.

nit: vale => value

Copy link
Member Author

@RaduBerinde RaduBerinde left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewable status: :shipit: complete! 0 of 0 LGTMs obtained (and 1 stale) (waiting on @cucaroach, @mgartner, and @nvanbenschoten)


pkg/sql/opt/xform/testdata/rules/join, line 185 at r4 (raw file):

Previously, mgartner (Marcus Gartner) wrote…

Adding 8 bytes to FastIntSet increases memo size by 13.5%... Shows you how much we use FastIntSet.

Yeah, it's kind of unfortunate in increases this much..


pkg/util/fast_int_set.go, line 322 at r2 (raw file):

Previously, mgartner (Marcus Gartner) wrote…

A mysterious -(64-smallCutoff) => -(0) 😆

I think it was valid to set smallCutoff to something smaller (for testing purposes).


pkg/util/fast_int_set.go, line 43 at r4 (raw file):

Previously, mgartner (Marcus Gartner) wrote…

This blog post mentions that the compiler doesn't optimize [2]uint64 as well as struct { a, b uint64 } due to golang/go#24416. Maybe their case was special and we won't run into the same problem, but it might be worth checking. The [2]uint64 approach is certainly preferable because the implementation is cleaner and it'll be easy to grow the small set in the future if needed.

I've been meaning to look at the generated assembly. I'll also check out some opt benchmarks.


pkg/util/fast_int_set.go, line 164 at r4 (raw file):

Previously, mgartner (Marcus Gartner) wrote…

Is small set iteration generally faster than large set iteration? If so, we should change this to if s.fitsInSmall() {.

Probably very similar, but I changed it.


pkg/util/fast_int_set.go, line 341 at r4 (raw file):

Previously, mgartner (Marcus Gartner) wrote…

Currently Encode is only used for plan gists. Are gists ever persisted to disk? Are they ever encoded by one node and decoded by another? Both cases would require handling this new encoding format carefully.

@cucaroach can correct me but storing gists is WIP right now. I agree we definitely need some kind of versioning.

Copy link
Contributor

@cucaroach cucaroach left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed 2 of 2 files at r1, 12 of 14 files at r5, all commit messages.
Reviewable status: :shipit: complete! 0 of 0 LGTMs obtained (and 1 stale) (waiting on @cucaroach, @mgartner, @nvanbenschoten, and @RaduBerinde)


pkg/util/fast_int_set.go, line 341 at r4 (raw file):

Previously, RaduBerinde wrote…

@cucaroach can correct me but storing gists is WIP right now. I agree we definitely need some kind of versioning.

I think that's still TBD at this point but they probably will at some point. I think the versioning provided by gists should be enough though, if gists were already released we'd need to bump the gist versioning for this I think.

Copy link
Member Author

@RaduBerinde RaduBerinde left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewable status: :shipit: complete! 0 of 0 LGTMs obtained (and 1 stale) (waiting on @cucaroach, @mgartner, and @nvanbenschoten)


pkg/util/fast_int_set.go, line 341 at r4 (raw file):

Previously, cucaroach (Tommy Reilly) wrote…

I think that's still TBD at this point but they probably will at some point. I think the versioning provided by gists should be enough though, if gists were already released we'd need to bump the gist versioning for this I think.

I bumped the version to set a good precedent (and added a comment for Encode).

Copy link
Contributor

@cucaroach cucaroach left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed 1 of 14 files at r5.
Reviewable status: :shipit: complete! 0 of 0 LGTMs obtained (and 1 stale) (waiting on @cucaroach, @mgartner, @nvanbenschoten, and @RaduBerinde)


pkg/util/fast_int_set.go, line 341 at r4 (raw file):

Previously, RaduBerinde wrote…

I bumped the version to set a good precedent (and added a comment for Encode).

👍

Copy link
Contributor

@cucaroach cucaroach left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:lgtm:

Reviewable status: :shipit: complete! 1 of 0 LGTMs obtained (and 1 stale) (waiting on @cucaroach, @mgartner, @nvanbenschoten, and @RaduBerinde)

@RaduBerinde
Copy link
Member Author

bors r+

@craig
Copy link
Contributor

craig bot commented Nov 18, 2021

Build failed:

@mgartner
Copy link
Collaborator

Did you get a chance to look at the assembly or run some opt benchmarks? No worries if not, but I'm curious to know the findings if there are any.

@RaduBerinde
Copy link
Member Author

Ah, it slipped my mind. Fortunately bors failed :) Adding the do-not-merge label so I don't forget again.

@RaduBerinde RaduBerinde added the do-not-merge bors won't merge a PR with this label. label Nov 18, 2021
nvanbenschoten added a commit to nvanbenschoten/cockroach that referenced this pull request Nov 19, 2021
This commit updates `NewMemBatchWithCapacity` to batch allocate all necessary
`memColumn` objects in a single chunk. Outside of cockroachdb#72798, this was the single
largest source of heap allocations by object count (`alloc_objects`) in TPC-E.
With cockroachdb#72798 applied, calls to `NewMemColumn` were responsible for **3.18%** of
total heap allocations in the workload:

```
----------------------------------------------------------+-------------
      flat  flat%   sum%        cum   cum%   calls calls% + context
----------------------------------------------------------+-------------
                                         355202097 97.92% |   github.com/cockroachdb/cockroach/pkg/col/coldata.NewMemBatchWithCapacity /go/src/github.com/cockroachdb/cockroach/pkg/col/coldata/batch.go:123
                                           7561654  2.08% |   github.com/cockroachdb/cockroach/pkg/sql/colmem.(*Allocator).NewMemColumn /go/src/github.com/cockroachdb/cockroach/pkg/sql/colmem/allocator.go:217
 362763751  3.18%  3.18%  362763751  3.18%                | github.com/cockroachdb/cockroach/pkg/col/coldata.NewMemColumn /go/src/github.com/cockroachdb/cockroach/pkg/col/coldata/vec.go:202
----------------------------------------------------------+-------------
```

Lower in the heap profile, we see that each of the other heap allocations that
are performed once per call to `NewMemBatchWithCapacity` were observed 39625411
times. So we can estimate that the average batch contains `362763751 / 39625411 = 9.15`
columns.

This lines up with the improvement we see due to this change. Heap allocations
due to `memColumn` objects drop by about a factor of 9, down to **0.33%** of all
heap allocations:

```
----------------------------------------------------------+-------------
      flat  flat%   sum%        cum   cum%   calls calls% + context
----------------------------------------------------------+-------------
                                          12082615   100% |   github.com/cockroachdb/cockroach/pkg/sql/colmem.(*Allocator).NewMemBatchWithFixedCapacity /go/src/github.com/cockroachdb/cockroach/pkg/sql/colmem/allocator.go:131
  12082615  0.33% 38.80%   12082615  0.33%                | github.com/cockroachdb/cockroach/pkg/col/coldata.NewMemBatchWithCapacity /go/src/github.com/cockroachdb/cockroach/pkg/col/coldata/batch.go:122
----------------------------------------------------------+-------------
```

Despite this change, we will still probably want to address Jordan's TODO a few
lines earlier about pooling all allocations it this level:

https://github.com/cockroachdb/cockroach/blob/28bb1ea049da5bfb6e15a7003cd7b678cbc4b67f/pkg/col/coldata/batch.go#L113
nvanbenschoten added a commit to nvanbenschoten/cockroach that referenced this pull request Nov 19, 2021
This commit updates `DistSQLTypeResolver` to implement all interfaces on a
pointer receiver instead of a value receiver. Implementing interfaces on values
is rarely the right choice, as it forces a heap allocation whenever the object
is boxed into an interface, instead of just forcing the pointer onto the heap
once (on its own or as part of a larger object) and then storing the pointer in
the interface header.

Before this commit, the use of value receivers was causing `HydrateTypeSlice` to
allocate. Outside of cockroachdb#72798 and cockroachdb#72961, this was the single largest source of
heap allocations in TPC-E. With those two PRs applied, `HydrateTypeSlice` was
accounting for **2.30%** of total heap allocations in the workload:

```
----------------------------------------------------------+-------------
      flat  flat%   sum%        cum   cum%   calls calls% + context
----------------------------------------------------------+-------------
                                          27722149 32.66% |   github.com/cockroachdb/cockroach/pkg/sql/execinfra.(*ProcessorBase).InitWithEvalCtx /go/src/github.com/cockroachdb/cockroach/pkg/sql/execinfra/processorsbase.go:790
                                          27460002 32.36% |   github.com/cockroachdb/cockroach/pkg/sql/colflow.(*vectorizedFlowCreator).setupFlow.func1 /go/src/github.com/cockroachdb/cockroach/pkg/sql/colflow/vectorized_flow.go:1097
                                          21266755 25.06% |   github.com/cockroachdb/cockroach/pkg/sql/colflow.(*vectorizedFlowCreator).setupInput /go/src/github.com/cockroachdb/cockroach/pkg/sql/colflow/vectorized_flow.go:818
                                           8421503  9.92% |   github.com/cockroachdb/cockroach/pkg/sql/colfetcher.populateTableArgs /go/src/github.com/cockroachdb/cockroach/pkg/sql/colfetcher/cfetcher_setup.go:174
  84870409  2.30%  2.30%   84870409  2.30%                | github.com/cockroachdb/cockroach/pkg/sql/catalog/descs.DistSQLTypeResolver.HydrateTypeSlice /go/src/github.com/cockroachdb/cockroach/pkg/sql/catalog/descs/dist_sql_type_resolver.go:134
----------------------------------------------------------+-------------
```

With this change, the heap allocation in `HydrateTypeSlice` disappears.

With these three PRs combined, the largest source of heap allocations in the
workload is `context.WithValue`, like the Go gods intended.
```
----------------------------------------------------------+-------------
      flat  flat%   sum%        cum   cum%   calls calls% + context
----------------------------------------------------------+-------------
                                          16723340 38.17% |   github.com/cockroachdb/logtags.WithTags /go/src/github.com/cockroachdb/cockroach/vendor/github.com/cockroachdb/logtags/context.go:34
                                           7405899 16.90% |   google.golang.org/grpc/peer.NewContext /go/src/github.com/cockroachdb/cockroach/vendor/google.golang.org/grpc/peer/peer.go:44
                                           3910493  8.93% |   google.golang.org/grpc.NewContextWithServerTransportStream /go/src/github.com/cockroachdb/cockroach/vendor/google.golang.org/grpc/server.go:1672
                                           3702950  8.45% |   github.com/cockroachdb/cockroach/pkg/util/tracing.maybeWrapCtx /go/src/github.com/cockroachdb/cockroach/pkg/util/tracing/context.go:80
                                           3560952  8.13% |   google.golang.org/grpc/metadata.NewIncomingContext /go/src/github.com/cockroachdb/cockroach/vendor/google.golang.org/grpc/metadata/metadata.go:152
                                           3342479  7.63% |   google.golang.org/grpc.newContextWithRPCInfo /go/src/github.com/cockroachdb/cockroach/vendor/google.golang.org/grpc/rpc_util.go:791
                                           2938326  6.71% |   google.golang.org/grpc/internal/credentials.NewRequestInfoContext /go/src/github.com/cockroachdb/cockroach/vendor/google.golang.org/grpc/internal/credentials/credentials.go:29
                                           1387235  3.17% |   github.com/cockroachdb/cockroach/pkg/util/grpcutil.NewLocalRequestContext /go/src/github.com/cockroachdb/cockroach/pkg/util/grpcutil/grpc_util.go:39
                                            655388  1.50% |   github.com/cockroachdb/cockroach/pkg/sql.withStatement /go/src/github.com/cockroachdb/cockroach/pkg/sql/conn_executor.go:3197
                                            185693  0.42% |   google.golang.org/grpc/metadata.NewOutgoingContext /go/src/github.com/cockroachdb/cockroach/vendor/google.golang.org/grpc/metadata/metadata.go:159
  43812755  2.20%  2.20%   43812755  2.20%                | context.WithValue /usr/local/go/src/context/context.go:533
----------------------------------------------------------+-------------
```
craig bot pushed a commit that referenced this pull request Nov 19, 2021
72841: sql: cleanup r=andreimatei a=andreimatei

This code was unnecessarily constructing a struct.

Release note: None

72961: col/coldata: batch allocate memColumn objects r=nvanbenschoten a=nvanbenschoten

This commit updates `NewMemBatchWithCapacity` to batch allocate all necessary
`memColumn` objects in a single chunk. Outside of #72798, this was the single
largest source of heap allocations by object count (`alloc_objects`) in TPC-E.
With #72798 applied, calls to `NewMemColumn` were responsible for **3.18%** of
total heap allocations in the workload:

```
----------------------------------------------------------+-------------
      flat  flat%   sum%        cum   cum%   calls calls% + context
----------------------------------------------------------+-------------
                                         355202097 97.92% |   github.com/cockroachdb/cockroach/pkg/col/coldata.NewMemBatchWithCapacity /go/src/github.com/cockroachdb/cockroach/pkg/col/coldata/batch.go:123
                                           7561654  2.08% |   github.com/cockroachdb/cockroach/pkg/sql/colmem.(*Allocator).NewMemColumn /go/src/github.com/cockroachdb/cockroach/pkg/sql/colmem/allocator.go:217
 362763751  3.18%  3.18%  362763751  3.18%                | github.com/cockroachdb/cockroach/pkg/col/coldata.NewMemColumn /go/src/github.com/cockroachdb/cockroach/pkg/col/coldata/vec.go:202
----------------------------------------------------------+-------------
```

Lower in the heap profile, we see that each of the other heap allocations that
are performed once per call to `NewMemBatchWithCapacity` were observed 39625411
times. So we can estimate that the average batch contains `362763751 / 39625411 = 9.15`
columns.

This lines up with the improvement we see due to this change. Heap allocations
due to `memColumn` objects drop by about a factor of 9, down to **0.33%** of all
heap allocations:

```
----------------------------------------------------------+-------------
      flat  flat%   sum%        cum   cum%   calls calls% + context
----------------------------------------------------------+-------------
                                          12082615   100% |   github.com/cockroachdb/cockroach/pkg/sql/colmem.(*Allocator).NewMemBatchWithFixedCapacity /go/src/github.com/cockroachdb/cockroach/pkg/sql/colmem/allocator.go:131
  12082615  0.33% 38.80%   12082615  0.33%                | github.com/cockroachdb/cockroach/pkg/col/coldata.NewMemBatchWithCapacity /go/src/github.com/cockroachdb/cockroach/pkg/col/coldata/batch.go:122
----------------------------------------------------------+-------------
```

Despite this change, we will still probably want to address Jordan's TODO a few
lines earlier about pooling all allocations it this level:

https://github.com/cockroachdb/cockroach/blob/28bb1ea049da5bfb6e15a7003cd7b678cbc4b67f/pkg/col/coldata/batch.go#L113

72962: sql/catalog/descs: implement interfaces on *DistSQLTypeResolver r=nvanbenschoten a=nvanbenschoten

This commit updates `DistSQLTypeResolver` to implement all interfaces on a
pointer receiver instead of a value receiver. Implementing interfaces on values
is rarely the right choice, as it forces a heap allocation whenever the object
is boxed into an interface, instead of just forcing the pointer onto the heap
once (on its own or as part of a larger object) and then storing the pointer in
the interface header.

Before this commit, the use of value receivers was causing `HydrateTypeSlice` to
allocate. Outside of #72798 and #72961, this was the single largest source of
heap allocations in TPC-E. With those two PRs applied, `HydrateTypeSlice` was
accounting for **2.30%** of total heap allocations in the workload:

```
----------------------------------------------------------+-------------
      flat  flat%   sum%        cum   cum%   calls calls% + context
----------------------------------------------------------+-------------
                                          27722149 32.66% |   github.com/cockroachdb/cockroach/pkg/sql/execinfra.(*ProcessorBase).InitWithEvalCtx /go/src/github.com/cockroachdb/cockroach/pkg/sql/execinfra/processorsbase.go:790
                                          27460002 32.36% |   github.com/cockroachdb/cockroach/pkg/sql/colflow.(*vectorizedFlowCreator).setupFlow.func1 /go/src/github.com/cockroachdb/cockroach/pkg/sql/colflow/vectorized_flow.go:1097
                                          21266755 25.06% |   github.com/cockroachdb/cockroach/pkg/sql/colflow.(*vectorizedFlowCreator).setupInput /go/src/github.com/cockroachdb/cockroach/pkg/sql/colflow/vectorized_flow.go:818
                                           8421503  9.92% |   github.com/cockroachdb/cockroach/pkg/sql/colfetcher.populateTableArgs /go/src/github.com/cockroachdb/cockroach/pkg/sql/colfetcher/cfetcher_setup.go:174
  84870409  2.30%  2.30%   84870409  2.30%                | github.com/cockroachdb/cockroach/pkg/sql/catalog/descs.DistSQLTypeResolver.HydrateTypeSlice /go/src/github.com/cockroachdb/cockroach/pkg/sql/catalog/descs/dist_sql_type_resolver.go:134
----------------------------------------------------------+-------------
```

With this change, the heap allocation in `HydrateTypeSlice` disappears.

With these three PRs combined, the largest source of heap allocations in the
workload is `context.WithValue`, like the Go gods intended.
```
----------------------------------------------------------+-------------
      flat  flat%   sum%        cum   cum%   calls calls% + context
----------------------------------------------------------+-------------
                                          16723340 38.17% |   github.com/cockroachdb/logtags.WithTags /go/src/github.com/cockroachdb/cockroach/vendor/github.com/cockroachdb/logtags/context.go:34
                                           7405899 16.90% |   google.golang.org/grpc/peer.NewContext /go/src/github.com/cockroachdb/cockroach/vendor/google.golang.org/grpc/peer/peer.go:44
                                           3910493  8.93% |   google.golang.org/grpc.NewContextWithServerTransportStream /go/src/github.com/cockroachdb/cockroach/vendor/google.golang.org/grpc/server.go:1672
                                           3702950  8.45% |   github.com/cockroachdb/cockroach/pkg/util/tracing.maybeWrapCtx /go/src/github.com/cockroachdb/cockroach/pkg/util/tracing/context.go:80
                                           3560952  8.13% |   google.golang.org/grpc/metadata.NewIncomingContext /go/src/github.com/cockroachdb/cockroach/vendor/google.golang.org/grpc/metadata/metadata.go:152
                                           3342479  7.63% |   google.golang.org/grpc.newContextWithRPCInfo /go/src/github.com/cockroachdb/cockroach/vendor/google.golang.org/grpc/rpc_util.go:791
                                           2938326  6.71% |   google.golang.org/grpc/internal/credentials.NewRequestInfoContext /go/src/github.com/cockroachdb/cockroach/vendor/google.golang.org/grpc/internal/credentials/credentials.go:29
                                           1387235  3.17% |   github.com/cockroachdb/cockroach/pkg/util/grpcutil.NewLocalRequestContext /go/src/github.com/cockroachdb/cockroach/pkg/util/grpcutil/grpc_util.go:39
                                            655388  1.50% |   github.com/cockroachdb/cockroach/pkg/sql.withStatement /go/src/github.com/cockroachdb/cockroach/pkg/sql/conn_executor.go:3197
                                            185693  0.42% |   google.golang.org/grpc/metadata.NewOutgoingContext /go/src/github.com/cockroachdb/cockroach/vendor/google.golang.org/grpc/metadata/metadata.go:159
  43812755  2.20%  2.20%   43812755  2.20%                | context.WithValue /usr/local/go/src/context/context.go:533
----------------------------------------------------------+-------------
```

Co-authored-by: Andrei Matei <[email protected]>
Co-authored-by: Nathan VanBenschoten <[email protected]>
@RaduBerinde
Copy link
Member Author

The optimizer benchmarks don't look good.. Somehow a few queries show more allocations (which I can't explain right now), and even tests that don't involve FastIntSet (like Parse) are slower (maybe larger binary size?). I tried running before and after multiple times and saw similar results.

name                                                                 old time/op    new time/op    delta
Phases/kv-read/Simple/Parse                                            13.7µs ± 2%    15.0µs ± 3%    +9.42%  (p=0.008 n=5+5)
Phases/kv-read/Simple/OptBuildNoNorm                                   32.1µs ± 2%    35.5µs ± 4%   +10.68%  (p=0.008 n=5+5)
Phases/kv-read/Simple/OptBuildNorm                                     35.6µs ± 1%    39.6µs ± 1%   +11.37%  (p=0.008 n=5+5)
Phases/kv-read/Simple/Explore                                          41.7µs ± 1%    46.7µs ± 2%   +11.92%  (p=0.008 n=5+5)
Phases/kv-read/Simple/ExecBuild                                        43.3µs ± 2%    48.2µs ± 0%   +11.35%  (p=0.008 n=5+5)
Phases/kv-read/Prepared/ExecBuild                                      1.85µs ± 2%    1.89µs ± 1%    +2.03%  (p=0.016 n=5+5)
Phases/kv-read-const/Simple/Parse                                      14.0µs ± 1%    15.5µs ± 5%   +10.00%  (p=0.008 n=5+5)
Phases/kv-read-const/Simple/OptBuildNoNorm                             31.8µs ± 1%    36.1µs ± 4%   +13.56%  (p=0.008 n=5+5)
Phases/kv-read-const/Simple/OptBuildNorm                               36.0µs ± 1%    42.1µs ± 7%   +17.09%  (p=0.008 n=5+5)
Phases/kv-read-const/Simple/Explore                                    41.9µs ± 1%    47.6µs ± 2%   +13.53%  (p=0.008 n=5+5)
Phases/kv-read-const/Simple/ExecBuild                                  44.5µs ± 2%    49.3µs ± 2%   +10.85%  (p=0.008 n=5+5)
Phases/kv-read-const/Prepared/ExecBuild                                1.54µs ± 1%    1.60µs ± 2%    +3.85%  (p=0.008 n=5+5)
Phases/tpcc-new-order/Simple/Parse                                     28.1µs ± 2%    31.3µs ± 2%   +11.68%  (p=0.008 n=5+5)
Phases/tpcc-new-order/Simple/OptBuildNoNorm                            63.8µs ± 3%    71.2µs ± 1%   +11.55%  (p=0.008 n=5+5)
Phases/tpcc-new-order/Simple/OptBuildNorm                              75.4µs ± 0%    86.5µs ± 2%   +14.82%  (p=0.008 n=5+5)
Phases/tpcc-new-order/Simple/Explore                                    103µs ± 1%     118µs ± 2%   +14.23%  (p=0.008 n=5+5)
Phases/tpcc-new-order/Simple/ExecBuild                                  105µs ± 0%     121µs ± 1%   +15.43%  (p=0.016 n=4+5)
Phases/tpcc-new-order/Prepared/ExecBuild                               2.13µs ± 1%    2.31µs ± 2%    +8.55%  (p=0.008 n=5+5)
Phases/tpcc-delivery/Simple/Parse                                      22.9µs ± 1%    25.4µs ± 1%   +11.09%  (p=0.008 n=5+5)
Phases/tpcc-delivery/Simple/OptBuildNoNorm                             53.8µs ± 2%    61.0µs ± 1%   +13.40%  (p=0.008 n=5+5)
Phases/tpcc-delivery/Simple/OptBuildNorm                               67.3µs ± 3%    77.7µs ± 2%   +15.52%  (p=0.008 n=5+5)
Phases/tpcc-delivery/Simple/Explore                                    91.2µs ± 1%   107.9µs ± 3%   +18.31%  (p=0.008 n=5+5)
Phases/tpcc-delivery/Simple/ExecBuild                                  93.9µs ± 1%   111.0µs ± 3%   +18.24%  (p=0.008 n=5+5)
Phases/tpcc-delivery/Prepared/AssignPlaceholdersNoNorm                 13.8µs ± 1%    18.4µs ± 3%   +33.76%  (p=0.008 n=5+5)
Phases/tpcc-delivery/Prepared/AssignPlaceholdersNorm                   13.8µs ± 2%    18.6µs ± 5%   +34.59%  (p=0.008 n=5+5)
Phases/tpcc-delivery/Prepared/Explore                                  34.0µs ± 2%    40.0µs ± 1%   +17.54%  (p=0.008 n=5+5)
Phases/tpcc-delivery/Prepared/ExecBuild                                36.6µs ± 1%    42.5µs ± 2%   +16.30%  (p=0.008 n=5+5)
Phases/tpcc-stock-level/Simple/Parse                                   47.7µs ± 2%    53.5µs ± 1%   +12.25%  (p=0.008 n=5+5)
Phases/tpcc-stock-level/Simple/OptBuildNoNorm                           166µs ± 2%     190µs ± 2%   +14.32%  (p=0.008 n=5+5)
Phases/tpcc-stock-level/Simple/OptBuildNorm                             294µs ± 2%     370µs ± 1%   +26.04%  (p=0.008 n=5+5)
Phases/tpcc-stock-level/Simple/Explore                                  393µs ± 2%     487µs ± 1%   +23.76%  (p=0.008 n=5+5)
Phases/tpcc-stock-level/Simple/ExecBuild                                399µs ± 1%     512µs ± 2%   +28.22%  (p=0.008 n=5+5)
Phases/tpcc-stock-level/Prepared/AssignPlaceholdersNoNorm              56.2µs ± 2%    73.5µs ± 2%   +30.79%  (p=0.008 n=5+5)
Phases/tpcc-stock-level/Prepared/AssignPlaceholdersNorm                56.9µs ± 1%    75.2µs ± 4%   +32.10%  (p=0.008 n=5+5)
Phases/tpcc-stock-level/Prepared/Explore                                144µs ± 3%     175µs ± 2%   +21.21%  (p=0.008 n=5+5)
Phases/tpcc-stock-level/Prepared/ExecBuild                              153µs ± 1%     186µs ± 2%   +21.58%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-a/Simple/Parse                         11.7µs ± 1%    12.9µs ± 1%   +10.75%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-a/Simple/OptBuildNoNorm                 219µs ± 0%     687µs ± 2%  +214.45%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-a/Simple/OptBuildNorm                   228µs ± 3%     695µs ± 2%  +204.45%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-a/Simple/Explore                        337µs ± 1%     824µs ± 1%  +144.38%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-a/Simple/ExecBuild                      339µs ± 2%     820µs ± 1%  +142.18%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-a/Prepared/AssignPlaceholdersNoNorm     195µs ± 1%     641µs ± 1%  +228.23%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-a/Prepared/AssignPlaceholdersNorm       194µs ± 1%     646µs ± 2%  +233.21%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-a/Prepared/Explore                      294µs ± 1%     767µs ± 1%  +160.93%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-a/Prepared/ExecBuild                    301µs ± 3%     772µs ± 1%  +156.78%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-b/Simple/Parse                         20.6µs ± 1%    23.4µs ± 2%   +13.58%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-b/Simple/OptBuildNoNorm                 246µs ± 1%     726µs ± 3%  +194.97%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-b/Simple/OptBuildNorm                   262µs ± 2%     736µs ± 3%  +181.08%  (p=0.008 n=5+5)

name                                                                 old alloc/op   new alloc/op   delta
Phases/kv-read/Simple/Parse                                            3.55kB ± 0%    3.55kB ± 0%      ~     (all equal)
Phases/kv-read/Simple/OptBuildNoNorm                                   10.4kB ± 0%    10.9kB ± 0%    +5.08%  (p=0.008 n=5+5)
Phases/kv-read/Simple/OptBuildNorm                                     11.5kB ± 0%    12.2kB ± 0%    +6.13%  (p=0.008 n=5+5)
Phases/kv-read/Simple/Explore                                          13.4kB ± 0%    14.2kB ± 0%    +6.33%  (p=0.008 n=5+5)
Phases/kv-read/Simple/ExecBuild                                        13.9kB ± 0%    14.7kB ± 0%    +6.23%  (p=0.016 n=4+5)
Phases/kv-read/Prepared/ExecBuild                                        704B ± 0%      720B ± 0%    +2.27%  (p=0.008 n=5+5)
Phases/kv-read-const/Simple/Parse                                      3.65kB ± 0%    3.65kB ± 0%      ~     (all equal)
Phases/kv-read-const/Simple/OptBuildNoNorm                             10.5kB ± 0%    11.0kB ± 0%    +5.04%  (p=0.008 n=5+5)
Phases/kv-read-const/Simple/OptBuildNorm                               11.6kB ± 0%    12.3kB ± 0%    +6.09%  (p=0.008 n=5+5)
Phases/kv-read-const/Simple/Explore                                    13.5kB ± 0%    14.3kB ± 0%    +6.29%  (p=0.008 n=5+5)
Phases/kv-read-const/Simple/ExecBuild                                  14.0kB ± 0%    14.8kB ± 0%    +6.19%  (p=0.008 n=5+5)
Phases/kv-read-const/Prepared/ExecBuild                                  520B ± 0%      536B ± 0%    +3.08%  (p=0.008 n=5+5)
Phases/tpcc-new-order/Simple/Parse                                     5.76kB ± 0%    5.76kB ± 0%      ~     (all equal)
Phases/tpcc-new-order/Simple/OptBuildNoNorm                            20.1kB ± 0%    20.7kB ± 0%    +2.78%  (p=0.008 n=5+5)
Phases/tpcc-new-order/Simple/OptBuildNorm                              22.9kB ± 0%    23.9kB ± 0%    +4.19%  (p=0.008 n=5+5)
Phases/tpcc-new-order/Simple/Explore                                   28.2kB ± 0%    29.6kB ± 0%    +5.17%  (p=0.008 n=5+5)
Phases/tpcc-new-order/Simple/ExecBuild                                 28.7kB ± 0%    30.1kB ± 0%    +5.13%  (p=0.008 n=5+5)
Phases/tpcc-new-order/Prepared/ExecBuild                                 768B ± 0%      784B ± 0%    +2.08%  (p=0.008 n=5+5)
Phases/tpcc-delivery/Simple/Parse                                      5.52kB ± 0%    5.52kB ± 0%      ~     (all equal)
Phases/tpcc-delivery/Simple/OptBuildNoNorm                             14.6kB ± 0%    15.2kB ± 0%    +4.40%  (p=0.016 n=5+4)
Phases/tpcc-delivery/Simple/OptBuildNorm                               18.6kB ± 0%    19.7kB ± 0%    +5.63%  (p=0.008 n=5+5)
Phases/tpcc-delivery/Simple/Explore                                    23.3kB ± 0%    24.8kB ± 0%    +6.22%  (p=0.008 n=5+5)
Phases/tpcc-delivery/Simple/ExecBuild                                  23.8kB ± 0%    25.2kB ± 0%    +6.16%  (p=0.008 n=5+5)
Phases/tpcc-delivery/Prepared/AssignPlaceholdersNoNorm                 4.85kB ± 0%    5.39kB ± 0%   +11.22%  (p=0.008 n=5+5)
Phases/tpcc-delivery/Prepared/AssignPlaceholdersNorm                   4.85kB ± 0%    5.39kB ± 0%   +11.22%  (p=0.008 n=5+5)
Phases/tpcc-delivery/Prepared/Explore                                  10.7kB ± 0%    11.6kB ± 0%    +8.85%  (p=0.008 n=5+5)
Phases/tpcc-delivery/Prepared/ExecBuild                                11.1kB ± 0%    12.1kB ± 0%    +8.65%  (p=0.008 n=5+5)
Phases/tpcc-stock-level/Simple/Parse                                   10.3kB ± 0%    10.3kB ± 0%      ~     (all equal)
Phases/tpcc-stock-level/Simple/OptBuildNoNorm                          48.6kB ± 0%    49.8kB ± 0%    +2.44%  (p=0.008 n=5+5)
Phases/tpcc-stock-level/Simple/OptBuildNorm                            80.2kB ± 0%    87.9kB ± 0%    +9.61%  (p=0.008 n=5+5)
Phases/tpcc-stock-level/Simple/Explore                                  102kB ± 0%     112kB ± 0%    +9.43%  (p=0.008 n=5+5)
Phases/tpcc-stock-level/Simple/ExecBuild                                106kB ± 0%     115kB ± 0%    +9.11%  (p=0.008 n=5+5)
Phases/tpcc-stock-level/Prepared/AssignPlaceholdersNoNorm              17.0kB ± 0%    18.9kB ± 0%   +11.51%  (p=0.008 n=5+5)
Phases/tpcc-stock-level/Prepared/AssignPlaceholdersNorm                16.6kB ± 0%    18.6kB ± 0%   +12.06%  (p=0.008 n=5+5)
Phases/tpcc-stock-level/Prepared/Explore                               35.9kB ± 0%    39.8kB ± 0%   +10.93%  (p=0.008 n=5+5)
Phases/tpcc-stock-level/Prepared/ExecBuild                             39.5kB ± 0%    43.5kB ± 0%    +9.97%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-a/Simple/Parse                         2.48kB ± 0%    2.48kB ± 0%      ~     (all equal)
Phases/many-columns-and-indexes-a/Simple/OptBuildNoNorm                13.6kB ± 0%    14.2kB ± 0%    +4.00%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-a/Simple/OptBuildNorm                  15.5kB ± 0%    16.3kB ± 0%    +5.06%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-a/Simple/Explore                       16.6kB ± 0%    17.5kB ± 0%    +5.51%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-a/Simple/ExecBuild                     17.2kB ± 0%    18.2kB ± 0%    +5.38%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-a/Prepared/AssignPlaceholdersNoNorm    3.30kB ± 0%    3.76kB ± 0%   +14.08%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-a/Prepared/AssignPlaceholdersNorm      3.30kB ± 0%    3.76kB ± 0%   +14.08%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-a/Prepared/Explore                     4.35kB ± 0%    4.94kB ± 0%   +13.60%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-a/Prepared/ExecBuild                   5.02kB ± 0%    5.63kB ± 0%   +12.10%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-b/Simple/Parse                         3.71kB ± 0%    3.71kB ± 0%      ~     (all equal)
Phases/many-columns-and-indexes-b/Simple/OptBuildNoNorm                19.4kB ± 0%    20.0kB ± 0%    +2.97%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-b/Simple/OptBuildNorm                  22.5kB ± 0%    23.5kB ± 0%    +4.26%  (p=0.008 n=5+5)

name                                                                 old allocs/op  new allocs/op  delta
Phases/kv-read/Simple/Parse                                              29.0 ± 0%      29.0 ± 0%      ~     (all equal)
Phases/kv-read/Simple/OptBuildNoNorm                                     74.0 ± 0%      74.0 ± 0%      ~     (all equal)
Phases/kv-read/Simple/OptBuildNorm                                       77.0 ± 0%      77.0 ± 0%      ~     (all equal)
Phases/kv-read/Simple/Explore                                            84.0 ± 0%      84.0 ± 0%      ~     (all equal)
Phases/kv-read/Simple/ExecBuild                                          91.0 ± 0%      92.0 ± 0%    +1.10%  (p=0.008 n=5+5)
Phases/kv-read/Prepared/ExecBuild                                        11.0 ± 0%      12.0 ± 0%    +9.09%  (p=0.008 n=5+5)
Phases/kv-read-const/Simple/Parse                                        29.0 ± 0%      29.0 ± 0%      ~     (all equal)
Phases/kv-read-const/Simple/OptBuildNoNorm                               74.0 ± 0%      74.0 ± 0%      ~     (all equal)
Phases/kv-read-const/Simple/OptBuildNorm                                 77.0 ± 0%      77.0 ± 0%      ~     (all equal)
Phases/kv-read-const/Simple/Explore                                      84.0 ± 0%      84.0 ± 0%      ~     (all equal)
Phases/kv-read-const/Simple/ExecBuild                                    91.0 ± 0%      92.0 ± 0%    +1.10%  (p=0.008 n=5+5)
Phases/kv-read-const/Prepared/ExecBuild                                  8.00 ± 0%      9.00 ± 0%   +12.50%  (p=0.008 n=5+5)
Phases/tpcc-new-order/Simple/Parse                                       39.0 ± 0%      39.0 ± 0%      ~     (all equal)
Phases/tpcc-new-order/Simple/OptBuildNoNorm                               112 ± 0%       112 ± 0%      ~     (all equal)
Phases/tpcc-new-order/Simple/OptBuildNorm                                 128 ± 0%       128 ± 0%      ~     (all equal)
Phases/tpcc-new-order/Simple/Explore                                      156 ± 0%       156 ± 0%      ~     (all equal)
Phases/tpcc-new-order/Simple/ExecBuild                                    164 ± 0%       165 ± 0%    +0.61%  (p=0.008 n=5+5)
Phases/tpcc-new-order/Prepared/ExecBuild                                 11.0 ± 0%      12.0 ± 0%    +9.09%  (p=0.008 n=5+5)
Phases/tpcc-delivery/Simple/Parse                                        35.0 ± 0%      35.0 ± 0%      ~     (all equal)
Phases/tpcc-delivery/Simple/OptBuildNoNorm                                102 ± 0%       102 ± 0%      ~     (all equal)
Phases/tpcc-delivery/Simple/OptBuildNorm                                  119 ± 0%       119 ± 0%      ~     (all equal)
Phases/tpcc-delivery/Simple/Explore                                       158 ± 0%       158 ± 0%      ~     (all equal)
Phases/tpcc-delivery/Simple/ExecBuild                                     166 ± 0%       167 ± 0%    +0.60%  (p=0.008 n=5+5)
Phases/tpcc-delivery/Prepared/AssignPlaceholdersNoNorm                   27.0 ± 0%      27.0 ± 0%      ~     (all equal)
Phases/tpcc-delivery/Prepared/AssignPlaceholdersNorm                     27.0 ± 0%      27.0 ± 0%      ~     (all equal)
Phases/tpcc-delivery/Prepared/Explore                                    67.0 ± 0%      67.0 ± 0%      ~     (all equal)
Phases/tpcc-delivery/Prepared/ExecBuild                                  75.0 ± 0%      76.0 ± 0%    +1.33%  (p=0.008 n=5+5)
Phases/tpcc-stock-level/Simple/Parse                                     59.0 ± 0%      59.0 ± 0%      ~     (all equal)
Phases/tpcc-stock-level/Simple/OptBuildNoNorm                             291 ± 0%       291 ± 0%      ~     (all equal)
Phases/tpcc-stock-level/Simple/OptBuildNorm                               493 ± 0%       493 ± 0%      ~     (all equal)
Phases/tpcc-stock-level/Simple/Explore                                    617 ± 0%       617 ± 0%      ~     (all equal)
Phases/tpcc-stock-level/Simple/ExecBuild                                  637 ± 0%       638 ± 0%    +0.16%  (p=0.008 n=5+5)
Phases/tpcc-stock-level/Prepared/AssignPlaceholdersNoNorm                 106 ± 0%       106 ± 0%      ~     (all equal)
Phases/tpcc-stock-level/Prepared/AssignPlaceholdersNorm                   105 ± 0%       105 ± 0%      ~     (all equal)
Phases/tpcc-stock-level/Prepared/Explore                                  229 ± 0%       229 ± 0%      ~     (all equal)
Phases/tpcc-stock-level/Prepared/ExecBuild                                249 ± 0%       250 ± 0%    +0.40%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-a/Simple/Parse                           21.0 ± 0%      21.0 ± 0%      ~     (all equal)
Phases/many-columns-and-indexes-a/Simple/OptBuildNoNorm                  62.0 ± 0%      62.0 ± 0%      ~     (all equal)
Phases/many-columns-and-indexes-a/Simple/OptBuildNorm                    69.0 ± 0%      69.0 ± 0%      ~     (all equal)
Phases/many-columns-and-indexes-a/Simple/Explore                         71.0 ± 0%      71.0 ± 0%      ~     (all equal)
Phases/many-columns-and-indexes-a/Simple/ExecBuild                       82.0 ± 0%      83.0 ± 0%    +1.22%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-a/Prepared/AssignPlaceholdersNoNorm      21.0 ± 0%      21.0 ± 0%      ~     (all equal)
Phases/many-columns-and-indexes-a/Prepared/AssignPlaceholdersNorm        21.0 ± 0%      21.0 ± 0%      ~     (all equal)
Phases/many-columns-and-indexes-a/Prepared/Explore                       23.0 ± 0%      23.0 ± 0%      ~     (all equal)
Phases/many-columns-and-indexes-a/Prepared/ExecBuild                     34.0 ± 0%      35.0 ± 0%    +2.94%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-b/Simple/Parse                           30.0 ± 0%      30.0 ± 0%      ~     (all equal)
Phases/many-columns-and-indexes-b/Simple/OptBuildNoNorm                   109 ± 0%       109 ± 0%      ~     (all equal)
Phases/many-columns-and-indexes-b/Simple/OptBuildNorm                     128 ± 0%       128 ± 0%      ~     (all equal)

These are all with GOMAXPROCS=1.

Copy link
Member Author

@RaduBerinde RaduBerinde left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewable status: :shipit: complete! 0 of 0 LGTMs obtained (and 2 stale) (waiting on @cucaroach, @mgartner, @nvanbenschoten, and @RaduBerinde)


pkg/util/fast_int_set.go, line 43 at r4 (raw file):

Previously, RaduBerinde wrote…

I've been meaning to look at the generated assembly. I'll also check out some opt benchmarks.

The benchmarks suggest we are indeed hitting a problem like that. I will try the two a, b uint64 approach when I have some time.

Very nice find by the way!

Copy link
Collaborator

@mgartner mgartner left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewable status: :shipit: complete! 0 of 0 LGTMs obtained (and 2 stale) (waiting on @cucaroach, @mgartner, @nvanbenschoten, and @RaduBerinde)


pkg/util/fast_int_set.go, line 43 at r4 (raw file):

Previously, RaduBerinde wrote…

The benchmarks suggest we are indeed hitting a problem like that. I will try the two a, b uint64 approach when I have some time.

Very nice find by the way!

Darn... That's unfortunate. Hopefully a, b uint64 works.

@RaduBerinde
Copy link
Member Author

I tried replacing the array with two uint64 fields (see the latest revision). Still seeing significant regressions.

name                                                                  old time/op    new time/op    delta
Phases/kv-read/Simple/Parse                                             9.26µs ± 3%   12.39µs ± 1%  +33.78%  (p=0.000 n=9+8)
Phases/kv-read/Simple/OptBuildNoNorm                                    23.5µs ± 1%    28.5µs ± 2%  +21.05%  (p=0.000 n=8+9)
Phases/kv-read/Simple/OptBuildNorm                                      27.1µs ± 3%    32.1µs ± 3%  +18.60%  (p=0.000 n=10+10)
Phases/kv-read/Simple/Explore                                           33.2µs ± 2%    38.9µs ± 1%  +17.22%  (p=0.000 n=10+10)
Phases/kv-read/Simple/ExecBuild                                         34.9µs ± 1%    41.1µs ± 3%  +17.64%  (p=0.000 n=10+10)
Phases/kv-read/Prepared/ExecBuild                                       1.42µs ± 1%    1.49µs ± 2%   +5.07%  (p=0.000 n=9+10)
Phases/kv-read-const/Simple/Parse                                       9.35µs ± 1%   12.59µs ± 3%  +34.65%  (p=0.000 n=10+10)
Phases/kv-read-const/Simple/OptBuildNoNorm                              24.0µs ± 2%    28.5µs ± 3%  +18.87%  (p=0.000 n=10+10)
Phases/kv-read-const/Simple/OptBuildNorm                                26.6µs ± 2%    32.3µs ± 2%  +21.23%  (p=0.000 n=10+10)
Phases/kv-read-const/Simple/Explore                                     33.6µs ± 2%    39.6µs ± 2%  +17.81%  (p=0.000 n=10+10)
Phases/kv-read-const/Simple/ExecBuild                                   35.7µs ± 2%    41.6µs ± 1%  +16.51%  (p=0.000 n=10+9)
Phases/kv-read-const/Prepared/ExecBuild                                 1.20µs ± 2%    1.28µs ± 4%   +6.32%  (p=0.000 n=10+10)
Phases/tpcc-new-order/Simple/Parse                                      18.1µs ± 6%    25.6µs ± 3%  +41.36%  (p=0.000 n=10+10)
Phases/tpcc-new-order/Simple/OptBuildNoNorm                             55.5µs ± 1%    66.3µs ± 4%  +19.50%  (p=0.000 n=10+10)
Phases/tpcc-new-order/Simple/OptBuildNorm                               65.2µs ± 2%    76.3µs ± 3%  +17.04%  (p=0.000 n=10+10)
Phases/tpcc-new-order/Simple/Explore                                    91.5µs ± 2%   104.4µs ± 1%  +14.06%  (p=0.000 n=10+10)
Phases/tpcc-new-order/Simple/ExecBuild                                  95.7µs ± 3%   106.8µs ± 4%  +11.64%  (p=0.000 n=10+10)
Phases/tpcc-new-order/Prepared/ExecBuild                                1.77µs ± 3%    1.80µs ± 3%   +2.14%  (p=0.006 n=10+10)
Phases/tpcc-delivery/Simple/Parse                                       15.4µs ± 2%    20.9µs ± 3%  +35.51%  (p=0.000 n=10+10)
Phases/tpcc-delivery/Simple/OptBuildNoNorm                              47.1µs ± 2%    54.1µs ± 2%  +15.03%  (p=0.000 n=8+9)
Phases/tpcc-delivery/Simple/OptBuildNorm                                57.7µs ± 2%    65.6µs ± 1%  +13.60%  (p=0.000 n=10+10)
Phases/tpcc-delivery/Simple/Explore                                     79.8µs ± 2%    90.3µs ± 2%  +13.15%  (p=0.000 n=10+10)
Phases/tpcc-delivery/Simple/ExecBuild                                   82.5µs ± 1%    92.0µs ± 2%  +11.56%  (p=0.000 n=9+10)
Phases/tpcc-delivery/Prepared/AssignPlaceholdersNoNorm                  10.9µs ± 3%    12.4µs ± 1%  +13.90%  (p=0.000 n=10+10)
Phases/tpcc-delivery/Prepared/AssignPlaceholdersNorm                    10.8µs ± 2%    12.4µs ± 3%  +14.99%  (p=0.000 n=10+10)
Phases/tpcc-delivery/Prepared/Explore                                   29.3µs ± 2%    32.1µs ± 3%   +9.55%  (p=0.000 n=10+10)
Phases/tpcc-delivery/Prepared/ExecBuild                                 31.7µs ± 1%    34.0µs ± 2%   +7.40%  (p=0.000 n=8+10)
Phases/tpcc-stock-level/Simple/Parse                                    32.4µs ± 4%    44.2µs ± 2%  +36.70%  (p=0.000 n=10+10)
Phases/tpcc-stock-level/Simple/OptBuildNoNorm                            158µs ± 2%     177µs ± 2%  +11.61%  (p=0.000 n=9+10)
Phases/tpcc-stock-level/Simple/OptBuildNorm                              262µs ± 1%     290µs ± 1%  +10.48%  (p=0.000 n=9+8)
Phases/tpcc-stock-level/Simple/Explore                                   346µs ± 3%     387µs ± 1%  +11.69%  (p=0.000 n=10+8)
Phases/tpcc-stock-level/Simple/ExecBuild                                 361µs ± 2%     394µs ± 1%   +9.21%  (p=0.000 n=9+10)
Phases/tpcc-stock-level/Prepared/AssignPlaceholdersNoNorm               48.3µs ± 3%    52.6µs ± 1%   +8.89%  (p=0.000 n=10+9)
Phases/tpcc-stock-level/Prepared/AssignPlaceholdersNorm                 49.0µs ± 3%    54.5µs ± 1%  +11.15%  (p=0.000 n=10+9)
Phases/tpcc-stock-level/Prepared/Explore                                 126µs ± 4%     135µs ± 1%   +7.06%  (p=0.000 n=10+10)
Phases/tpcc-stock-level/Prepared/ExecBuild                               136µs ± 3%     145µs ± 1%   +6.60%  (p=0.000 n=10+10)
Phases/many-columns-and-indexes-a/Simple/Parse                          7.97µs ± 3%   10.53µs ± 3%  +32.22%  (p=0.000 n=10+10)
Phases/many-columns-and-indexes-a/Simple/OptBuildNoNorm                  246µs ± 2%     314µs ± 2%  +27.54%  (p=0.000 n=10+10)
Phases/many-columns-and-indexes-a/Simple/OptBuildNorm                    254µs ± 2%     318µs ± 1%  +25.23%  (p=0.000 n=9+10)
Phases/many-columns-and-indexes-a/Simple/Explore                         461µs ± 4%     534µs ± 2%  +15.81%  (p=0.000 n=10+10)
Phases/many-columns-and-indexes-a/Simple/ExecBuild                       474µs ± 1%     541µs ± 1%  +14.09%  (p=0.000 n=10+10)
Phases/many-columns-and-indexes-a/Prepared/AssignPlaceholdersNoNorm      218µs ± 2%     283µs ± 1%  +30.22%  (p=0.000 n=10+9)
Phases/many-columns-and-indexes-a/Prepared/AssignPlaceholdersNorm        218µs ± 3%     280µs ± 1%  +28.43%  (p=0.000 n=10+10)
Phases/many-columns-and-indexes-a/Prepared/Explore                       431µs ± 2%     495µs ± 2%  +14.93%  (p=0.000 n=10+10)
Phases/many-columns-and-indexes-a/Prepared/ExecBuild                     431µs ± 2%     498µs ± 1%  +15.67%  (p=0.000 n=10+10)
Phases/many-columns-and-indexes-b/Simple/Parse                          14.1µs ± 2%    19.5µs ± 2%  +38.66%  (p=0.000 n=10+9)
Phases/many-columns-and-indexes-b/Simple/OptBuildNoNorm                  270µs ± 3%     341µs ± 2%  +26.21%  (p=0.000 n=10+10)
Phases/many-columns-and-indexes-b/Simple/OptBuildNorm                    279µs ± 1%     354µs ± 2%  +26.61%  (p=0.000 n=9+10)
Phases/many-columns-and-indexes-b/Simple/Explore                         506µs ± 3%     574µs ± 1%  +13.51%  (p=0.000 n=10+10)
Phases/many-columns-and-indexes-b/Simple/ExecBuild                       507µs ± 1%     583µs ± 1%  +15.09%  (p=0.000 n=8+10)
Phases/many-columns-and-indexes-b/Prepared/AssignPlaceholdersNoNorm      222µs ± 2%     289µs ± 1%  +30.48%  (p=0.000 n=10+10)
Phases/many-columns-and-indexes-b/Prepared/AssignPlaceholdersNorm        223µs ± 1%     289µs ± 2%  +29.70%  (p=0.000 n=10+10)
Phases/many-columns-and-indexes-b/Prepared/Explore                       440µs ± 1%     513µs ± 2%  +16.60%  (p=0.000 n=10+10)
Phases/many-columns-and-indexes-b/Prepared/ExecBuild                     442µs ± 1%     512µs ± 1%  +15.95%  (p=0.000 n=10+10)
Phases/ored-preds-100/Simple/Parse                                       627µs ± 2%     917µs ± 1%  +46.23%  (p=0.000 n=10+10)
Phases/ored-preds-100/Simple/OptBuildNoNorm                             2.40ms ± 3%    2.64ms ± 2%  +10.07%  (p=0.000 n=10+10)
Phases/ored-preds-100/Simple/OptBuildNorm                               2.43ms ± 2%    2.62ms ± 1%   +7.69%  (p=0.000 n=10+10)
Phases/ored-preds-100/Simple/Explore                                    3.17ms ± 3%    3.40ms ± 2%   +7.40%  (p=0.000 n=10+10)
Phases/ored-preds-100/Simple/ExecBuild                                  3.29ms ± 3%    3.53ms ± 2%   +7.34%  (p=0.000 n=10+10)
Phases/ored-preds-100/Prepared/ExecBuild                                 116µs ± 2%     114µs ± 1%   -1.84%  (p=0.000 n=9+10)
Phases/ored-preds-using-params-100/Simple/Parse                          603µs ± 2%     890µs ± 1%  +47.45%  (p=0.000 n=10+8)
Phases/ored-preds-using-params-100/Simple/OptBuildNoNorm                2.08ms ± 4%    2.31ms ± 2%  +11.28%  (p=0.000 n=10+10)
Phases/ored-preds-using-params-100/Simple/OptBuildNorm                  2.06ms ± 3%    2.33ms ± 2%  +13.02%  (p=0.000 n=10+10)
Phases/ored-preds-using-params-100/Simple/Explore                       2.79ms ± 2%    3.10ms ± 2%  +11.16%  (p=0.000 n=10+10)
Phases/ored-preds-using-params-100/Simple/ExecBuild                     2.94ms ± 3%    3.32ms ± 5%  +12.95%  (p=0.000 n=10+10)
Phases/ored-preds-using-params-100/Prepared/AssignPlaceholdersNoNorm     524µs ± 2%     536µs ± 2%   +2.34%  (p=0.000 n=10+10)
Phases/ored-preds-using-params-100/Prepared/AssignPlaceholdersNorm       525µs ± 1%     533µs ± 4%   +1.58%  (p=0.043 n=10+10)
Phases/ored-preds-using-params-100/Prepared/Explore                     1.29ms ± 1%    1.30ms ± 1%     ~     (p=0.211 n=9+10)
Phases/ored-preds-using-params-100/Prepared/ExecBuild                   1.42ms ± 3%    1.41ms ± 1%     ~     (p=0.278 n=10+9)
Chain/chain-1                                                           13.0µs ± 3%    14.7µs ± 3%  +12.53%  (p=0.000 n=10+9)
Chain/chain-2                                                           85.1µs ± 1%    95.0µs ± 3%  +11.60%  (p=0.000 n=10+10)
Chain/chain-3                                                            161µs ± 3%     181µs ± 2%  +12.47%  (p=0.000 n=10+10)
Chain/chain-4                                                            229µs ± 2%     268µs ± 2%  +16.86%  (p=0.000 n=9+10)
Chain/chain-5                                                            317µs ± 3%     367µs ± 4%  +15.83%  (p=0.000 n=10+9)
Chain/chain-6                                                            414µs ± 2%     482µs ± 3%  +16.60%  (p=0.000 n=10+10)
Chain/chain-7                                                            522µs ± 2%     617µs ± 3%  +18.21%  (p=0.000 n=10+10)
Chain/chain-8                                                            629µs ± 2%     747µs ± 4%  +18.62%  (p=0.000 n=10+10)
Chain/chain-9                                                            782µs ± 3%     936µs ± 4%  +19.71%  (p=0.000 n=10+10)
Chain/chain-10                                                           925µs ± 2%    1099µs ± 6%  +18.87%  (p=0.000 n=10+10)
Chain/chain-11                                                          1.09ms ± 2%    1.37ms ± 3%  +26.00%  (p=0.000 n=9+10)
Chain/chain-12                                                          1.24ms ± 2%    1.53ms ± 6%  +22.63%  (p=0.000 n=9+10)
Chain/chain-13                                                          1.43ms ± 2%    1.71ms ± 2%  +19.63%  (p=0.000 n=10+10)
Chain/chain-14                                                          1.70ms ± 3%    2.04ms ± 3%  +20.01%  (p=0.000 n=10+10)
Chain/chain-15                                                          1.89ms ± 3%    2.31ms ± 1%  +22.30%  (p=0.000 n=10+9)
Chain/chain-16                                                          2.31ms ± 2%    2.61ms ± 2%  +12.94%  (p=0.000 n=9+10)
Chain/chain-17                                                          2.94ms ± 2%    2.96ms ± 1%     ~     (p=0.247 n=10+10)
Chain/chain-18                                                          3.61ms ± 1%    3.33ms ± 1%   -7.91%  (p=0.000 n=9+9)
Chain/chain-19                                                          4.38ms ± 3%    3.81ms ± 5%  -12.95%  (p=0.000 n=10+10)
EndToEnd/kv-read/Simple                                                  182µs ± 1%     200µs ± 1%  +10.28%  (p=0.000 n=9+9)
EndToEnd/kv-read/Prepared                                                132µs ± 5%     145µs ± 3%   +9.17%  (p=0.000 n=10+10)
EndToEnd/kv-read-const/Simple                                            143µs ± 2%     161µs ± 2%  +13.18%  (p=0.000 n=10+10)
EndToEnd/kv-read-const/Prepared                                          134µs ± 1%     145µs ± 2%   +8.51%  (p=0.000 n=8+10)
EndToEnd/tpcc-new-order/Simple                                           211µs ± 2%     240µs ± 4%  +13.77%  (p=0.000 n=9+9)
EndToEnd/tpcc-new-order/Prepared                                         149µs ± 2%     164µs ± 0%  +10.26%  (p=0.000 n=10+8)
EndToEnd/tpcc-delivery/Simple                                            253µs ± 2%     283µs ± 2%  +11.67%  (p=0.000 n=9+10)
EndToEnd/tpcc-delivery/Prepared                                          194µs ± 2%     214µs ± 2%   +9.92%  (p=0.000 n=10+10)
EndToEnd/tpcc-stock-level/Simple                                         498µs ± 1%     552µs ± 2%  +10.85%  (p=0.000 n=10+10)
EndToEnd/tpcc-stock-level/Prepared                                       402µs ± 1%     444µs ± 3%  +10.44%  (p=0.000 n=10+10)
EndToEnd/many-columns-and-indexes-a/Simple                              1.09ms ± 4%    1.14ms ± 1%   +5.44%  (p=0.000 n=10+9)
EndToEnd/many-columns-and-indexes-a/Prepared                            1.02ms ± 2%    1.10ms ± 1%   +8.13%  (p=0.000 n=9+10)
EndToEnd/many-columns-and-indexes-b/Simple                              1.26ms ± 1%    1.35ms ± 2%   +7.50%  (p=0.000 n=10+10)
EndToEnd/many-columns-and-indexes-b/Prepared                            1.20ms ± 1%    1.28ms ± 2%   +6.12%  (p=0.000 n=10+10)
EndToEnd/ored-preds-100/Simple                                          1.43ms ± 1%    1.75ms ± 3%  +21.81%  (p=0.000 n=10+10)
EndToEnd/ored-preds-100/Prepared                                         805µs ± 2%     830µs ± 2%   +3.00%  (p=0.000 n=9+7)
EndToEnd/ored-preds-using-params-100/Simple                             2.73ms ± 2%    3.08ms ± 2%  +12.49%  (p=0.000 n=10+9)
EndToEnd/ored-preds-using-params-100/Prepared                           1.91ms ± 2%    2.06ms ± 1%   +7.41%  (p=0.000 n=9+9)
FKInsert/SingleRow/None                                                  481µs ± 3%     522µs ± 4%   +8.50%  (p=0.000 n=10+10)
FKInsert/SingleRow/NoFastPath                                            607µs ± 3%     663µs ± 5%   +9.08%  (p=0.000 n=10+10)
FKInsert/SingleRow/FastPath                                              294µs ± 2%     330µs ± 3%  +12.27%  (p=0.000 n=10+10)
FKInsert/MultiRowSingleParent/None                                      1.09ms ± 2%    1.15ms ± 4%   +5.22%  (p=0.000 n=9+10)
FKInsert/MultiRowSingleParent/NoFastPath                                1.09ms ± 2%    1.17ms ± 5%   +7.56%  (p=0.000 n=10+10)
FKInsert/MultiRowSingleParent/FastPath                                   450µs ± 3%     485µs ± 3%   +7.79%  (p=0.000 n=10+10)
FKInsert/MultiRowMultiParent/None                                       1.23ms ± 4%    1.30ms ± 4%   +5.25%  (p=0.000 n=10+10)
FKInsert/MultiRowMultiParent/NoFastPath                                 1.20ms ± 1%    1.27ms ± 2%   +5.84%  (p=0.000 n=9+10)
FKInsert/MultiRowMultiParent/FastPath                                    613µs ± 3%     641µs ± 2%   +4.44%  (p=0.000 n=10+9)

name                                                                  old alloc/op   new alloc/op   delta
Phases/kv-read/Simple/Parse                                             3.55kB ± 0%    3.55kB ± 0%     ~     (all equal)
Phases/kv-read/Simple/OptBuildNoNorm                                    10.4kB ± 0%    10.9kB ± 0%   +5.08%  (p=0.000 n=10+10)
Phases/kv-read/Simple/OptBuildNorm                                      11.5kB ± 0%    12.2kB ± 0%   +6.13%  (p=0.000 n=10+10)
Phases/kv-read/Simple/Explore                                           13.4kB ± 0%    14.2kB ± 0%   +6.33%  (p=0.000 n=10+10)
Phases/kv-read/Simple/ExecBuild                                         13.9kB ± 0%    14.7kB ± 0%   +6.23%  (p=0.000 n=8+10)
Phases/kv-read/Prepared/ExecBuild                                         704B ± 0%      720B ± 0%   +2.27%  (p=0.000 n=10+10)
Phases/kv-read-const/Simple/Parse                                       3.65kB ± 0%    3.65kB ± 0%     ~     (all equal)
Phases/kv-read-const/Simple/OptBuildNoNorm                              10.5kB ± 0%    11.0kB ± 0%   +5.04%  (p=0.000 n=10+10)
Phases/kv-read-const/Simple/OptBuildNorm                                11.6kB ± 0%    12.3kB ± 0%   +6.09%  (p=0.000 n=10+10)
Phases/kv-read-const/Simple/Explore                                     13.5kB ± 0%    14.3kB ± 0%   +6.29%  (p=0.000 n=9+10)
Phases/kv-read-const/Simple/ExecBuild                                   14.0kB ± 0%    14.8kB ± 0%   +6.19%  (p=0.000 n=9+10)
Phases/kv-read-const/Prepared/ExecBuild                                   520B ± 0%      536B ± 0%   +3.08%  (p=0.000 n=10+10)
Phases/tpcc-new-order/Simple/Parse                                      5.76kB ± 0%    5.76kB ± 0%     ~     (all equal)
Phases/tpcc-new-order/Simple/OptBuildNoNorm                             20.1kB ± 0%    20.7kB ± 0%   +2.78%  (p=0.000 n=10+10)
Phases/tpcc-new-order/Simple/OptBuildNorm                               22.9kB ± 0%    23.9kB ± 0%   +4.19%  (p=0.000 n=10+10)
Phases/tpcc-new-order/Simple/Explore                                    28.2kB ± 0%    29.6kB ± 0%   +5.17%  (p=0.000 n=10+10)
Phases/tpcc-new-order/Simple/ExecBuild                                  28.7kB ± 0%    30.1kB ± 0%   +5.13%  (p=0.000 n=10+9)
Phases/tpcc-new-order/Prepared/ExecBuild                                  768B ± 0%      784B ± 0%   +2.08%  (p=0.000 n=10+10)
Phases/tpcc-delivery/Simple/Parse                                       5.52kB ± 0%    5.52kB ± 0%     ~     (all equal)
Phases/tpcc-delivery/Simple/OptBuildNoNorm                              14.6kB ± 0%    15.2kB ± 0%   +4.40%  (p=0.000 n=10+10)
Phases/tpcc-delivery/Simple/OptBuildNorm                                18.6kB ± 0%    19.7kB ± 0%   +5.62%  (p=0.000 n=10+10)
Phases/tpcc-delivery/Simple/Explore                                     23.3kB ± 0%    24.8kB ± 0%   +6.21%  (p=0.000 n=8+10)
Phases/tpcc-delivery/Simple/ExecBuild                                   23.8kB ± 0%    25.2kB ± 0%   +6.16%  (p=0.000 n=10+10)
Phases/tpcc-delivery/Prepared/AssignPlaceholdersNoNorm                  4.85kB ± 0%    5.39kB ± 0%  +11.22%  (p=0.000 n=10+10)
Phases/tpcc-delivery/Prepared/AssignPlaceholdersNorm                    4.85kB ± 0%    5.39kB ± 0%  +11.22%  (p=0.000 n=10+10)
Phases/tpcc-delivery/Prepared/Explore                                   10.7kB ± 0%    11.6kB ± 0%   +8.85%  (p=0.000 n=8+9)
Phases/tpcc-delivery/Prepared/ExecBuild                                 11.1kB ± 0%    12.1kB ± 0%   +8.64%  (p=0.000 n=9+10)
Phases/tpcc-stock-level/Simple/Parse                                    10.3kB ± 0%    10.3kB ± 0%     ~     (all equal)
Phases/tpcc-stock-level/Simple/OptBuildNoNorm                           48.6kB ± 0%    49.8kB ± 0%   +2.44%  (p=0.000 n=10+10)
Phases/tpcc-stock-level/Simple/OptBuildNorm                             80.2kB ± 0%    87.9kB ± 0%   +9.59%  (p=0.000 n=10+10)
Phases/tpcc-stock-level/Simple/Explore                                   102kB ± 0%     112kB ± 0%   +9.43%  (p=0.000 n=10+10)
Phases/tpcc-stock-level/Simple/ExecBuild                                 106kB ± 0%     115kB ± 0%   +9.12%  (p=0.000 n=10+10)
Phases/tpcc-stock-level/Prepared/AssignPlaceholdersNoNorm               17.0kB ± 0%    18.9kB ± 0%  +11.50%  (p=0.000 n=10+10)
Phases/tpcc-stock-level/Prepared/AssignPlaceholdersNorm                 16.6kB ± 0%    18.6kB ± 0%  +12.05%  (p=0.000 n=10+10)
Phases/tpcc-stock-level/Prepared/Explore                                35.9kB ± 0%    39.8kB ± 0%  +10.94%  (p=0.000 n=9+10)
Phases/tpcc-stock-level/Prepared/ExecBuild                              39.5kB ± 0%    43.5kB ± 0%   +9.97%  (p=0.000 n=10+10)
Phases/many-columns-and-indexes-a/Simple/Parse                          2.48kB ± 0%    2.48kB ± 0%     ~     (all equal)
Phases/many-columns-and-indexes-a/Simple/OptBuildNoNorm                 13.6kB ± 0%    14.2kB ± 0%   +4.00%  (p=0.000 n=10+10)
Phases/many-columns-and-indexes-a/Simple/OptBuildNorm                   15.5kB ± 0%    16.3kB ± 0%   +5.06%  (p=0.000 n=10+8)
Phases/many-columns-and-indexes-a/Simple/Explore                        16.6kB ± 0%    17.5kB ± 0%   +5.51%  (p=0.000 n=7+10)
Phases/many-columns-and-indexes-a/Simple/ExecBuild                      17.2kB ± 0%    18.2kB ± 0%   +5.39%  (p=0.000 n=8+10)
Phases/many-columns-and-indexes-a/Prepared/AssignPlaceholdersNoNorm     3.30kB ± 0%    3.76kB ± 0%  +14.08%  (p=0.000 n=10+10)
Phases/many-columns-and-indexes-a/Prepared/AssignPlaceholdersNorm       3.30kB ± 0%    3.76kB ± 0%  +14.08%  (p=0.000 n=10+10)
Phases/many-columns-and-indexes-a/Prepared/Explore                      4.35kB ± 0%    4.94kB ± 0%  +13.60%  (p=0.000 n=10+10)
Phases/many-columns-and-indexes-a/Prepared/ExecBuild                    5.02kB ± 0%    5.63kB ± 0%  +12.10%  (p=0.000 n=10+10)
Phases/many-columns-and-indexes-b/Simple/Parse                          3.71kB ± 0%    3.71kB ± 0%     ~     (all equal)
Phases/many-columns-and-indexes-b/Simple/OptBuildNoNorm                 19.5kB ± 0%    20.0kB ± 0%   +2.96%  (p=0.000 n=9+10)
Phases/many-columns-and-indexes-b/Simple/OptBuildNorm                   22.5kB ± 0%    23.5kB ± 0%   +4.27%  (p=0.000 n=10+10)
Phases/many-columns-and-indexes-b/Simple/Explore                        23.6kB ± 0%    24.6kB ± 0%   +4.62%  (p=0.000 n=10+10)
Phases/many-columns-and-indexes-b/Simple/ExecBuild                      24.6kB ± 0%    25.7kB ± 0%   +4.48%  (p=0.000 n=10+10)
Phases/many-columns-and-indexes-b/Prepared/AssignPlaceholdersNoNorm     5.40kB ± 0%    5.94kB ± 0%  +10.08%  (p=0.000 n=10+10)
Phases/many-columns-and-indexes-b/Prepared/AssignPlaceholdersNorm       5.40kB ± 0%    5.94kB ± 0%  +10.08%  (p=0.000 n=10+10)
Phases/many-columns-and-indexes-b/Prepared/Explore                      6.45kB ± 0%    7.13kB ± 0%  +10.42%  (p=0.000 n=10+8)
Phases/many-columns-and-indexes-b/Prepared/ExecBuild                    7.46kB ± 0%    8.15kB ± 0%   +9.22%  (p=0.000 n=10+9)
Phases/ored-preds-100/Simple/Parse                                       168kB ± 0%     168kB ± 0%     ~     (all equal)
Phases/ored-preds-100/Simple/OptBuildNoNorm                              592kB ± 0%     593kB ± 0%   +0.14%  (p=0.000 n=10+10)
Phases/ored-preds-100/Simple/OptBuildNorm                                592kB ± 0%     593kB ± 0%   +0.17%  (p=0.000 n=10+9)
Phases/ored-preds-100/Simple/Explore                                     980kB ± 0%     983kB ± 0%   +0.29%  (p=0.000 n=10+10)
Phases/ored-preds-100/Simple/ExecBuild                                  1.01MB ± 0%    1.01MB ± 0%   +0.28%  (p=0.000 n=10+10)
Phases/ored-preds-100/Prepared/ExecBuild                                29.6kB ± 0%    29.6kB ± 0%   +0.05%  (p=0.000 n=10+10)
Phases/ored-preds-using-params-100/Simple/Parse                          149kB ± 0%     149kB ± 0%     ~     (all equal)
Phases/ored-preds-using-params-100/Simple/OptBuildNoNorm                 574kB ± 0%     575kB ± 0%   +0.14%  (p=0.000 n=10+9)
Phases/ored-preds-using-params-100/Simple/OptBuildNorm                   575kB ± 0%     576kB ± 0%   +0.17%  (p=0.000 n=10+9)
Phases/ored-preds-using-params-100/Simple/Explore                        963kB ± 0%     965kB ± 0%   +0.29%  (p=0.000 n=10+10)
Phases/ored-preds-using-params-100/Simple/ExecBuild                      992kB ± 0%     995kB ± 0%   +0.28%  (p=0.000 n=10+10)
Phases/ored-preds-using-params-100/Prepared/AssignPlaceholdersNoNorm     348kB ± 0%     348kB ± 0%   +0.09%  (p=0.000 n=10+9)
Phases/ored-preds-using-params-100/Prepared/AssignPlaceholdersNorm       348kB ± 0%     348kB ± 0%   +0.09%  (p=0.000 n=10+9)
Phases/ored-preds-using-params-100/Prepared/Explore                      736kB ± 0%     738kB ± 0%   +0.29%  (p=0.000 n=10+10)
Phases/ored-preds-using-params-100/Prepared/ExecBuild                    765kB ± 0%     767kB ± 0%   +0.28%  (p=0.000 n=10+10)
Chain/chain-1                                                           8.53kB ± 0%    8.94kB ± 0%   +4.88%  (p=0.000 n=10+10)
Chain/chain-2                                                           27.7kB ± 0%    29.8kB ± 0%   +7.72%  (p=0.000 n=10+10)
Chain/chain-3                                                           54.0kB ± 0%    59.1kB ± 0%   +9.49%  (p=0.000 n=10+10)
Chain/chain-4                                                           80.8kB ± 0%    88.9kB ± 0%  +10.00%  (p=0.000 n=10+10)
Chain/chain-5                                                            115kB ± 0%     128kB ± 0%  +11.01%  (p=0.000 n=10+9)
Chain/chain-6                                                            154kB ± 0%     172kB ± 0%  +11.43%  (p=0.000 n=10+10)
Chain/chain-7                                                            197kB ± 0%     222kB ± 0%  +12.58%  (p=0.000 n=10+10)
Chain/chain-8                                                            240kB ± 0%     272kB ± 0%  +13.37%  (p=0.000 n=10+10)
Chain/chain-9                                                            316kB ± 0%     357kB ± 0%  +12.98%  (p=0.000 n=10+10)
Chain/chain-10                                                           370kB ± 0%     421kB ± 0%  +13.68%  (p=0.000 n=10+10)
Chain/chain-11                                                           430kB ± 0%     490kB ± 0%  +13.93%  (p=0.000 n=10+9)
Chain/chain-12                                                           503kB ± 0%     573kB ± 0%  +14.06%  (p=0.000 n=10+10)
Chain/chain-13                                                           578kB ± 0%     664kB ± 0%  +14.96%  (p=0.000 n=10+10)
Chain/chain-14                                                           711kB ± 0%     812kB ± 0%  +14.22%  (p=0.000 n=10+10)
Chain/chain-15                                                           798kB ± 0%     921kB ± 0%  +15.40%  (p=0.000 n=10+10)
Chain/chain-16                                                           993kB ± 0%    1050kB ± 0%   +5.75%  (p=0.000 n=10+10)
Chain/chain-17                                                          1.22MB ± 0%    1.17MB ± 0%   -4.34%  (p=0.000 n=10+10)
Chain/chain-18                                                          1.41MB ± 0%    1.29MB ± 0%   -8.85%  (p=0.000 n=10+10)
Chain/chain-19                                                          1.61MB ± 0%    1.41MB ± 0%  -12.23%  (p=0.000 n=9+10)
EndToEnd/kv-read/Simple                                                 25.5kB ± 1%    25.6kB ± 2%     ~     (p=0.321 n=8+9)
EndToEnd/kv-read/Prepared                                               19.4kB ± 1%    19.5kB ± 0%     ~     (p=0.195 n=8+8)
EndToEnd/kv-read-const/Simple                                           18.9kB ± 0%    18.9kB ± 0%     ~     (p=0.268 n=9+9)
EndToEnd/kv-read-const/Prepared                                         19.2kB ± 1%    19.5kB ± 4%     ~     (p=0.146 n=8+10)
EndToEnd/tpcc-new-order/Simple                                          33.4kB ± 0%    33.5kB ± 0%     ~     (p=0.504 n=9+9)
EndToEnd/tpcc-new-order/Prepared                                        25.0kB ± 0%    25.0kB ± 0%     ~     (p=0.878 n=8+8)
EndToEnd/tpcc-delivery/Simple                                           39.3kB ± 0%    40.3kB ± 0%   +2.51%  (p=0.000 n=9+9)
EndToEnd/tpcc-delivery/Prepared                                         31.1kB ± 1%    32.0kB ± 1%   +3.11%  (p=0.000 n=9+8)
EndToEnd/tpcc-stock-level/Simple                                         138kB ± 0%     144kB ± 0%   +4.38%  (p=0.000 n=8+10)
EndToEnd/tpcc-stock-level/Prepared                                       124kB ± 0%     130kB ± 0%   +4.91%  (p=0.000 n=9+8)
EndToEnd/many-columns-and-indexes-a/Simple                              60.9kB ± 1%    62.0kB ± 0%   +1.93%  (p=0.000 n=9+8)
EndToEnd/many-columns-and-indexes-a/Prepared                            58.6kB ±13%    57.3kB ± 1%     ~     (p=0.156 n=10+9)
EndToEnd/many-columns-and-indexes-b/Simple                              66.6kB ± 0%    67.9kB ± 0%   +1.90%  (p=0.000 n=9+10)
EndToEnd/many-columns-and-indexes-b/Prepared                            60.7kB ± 1%    62.1kB ± 2%   +2.32%  (p=0.000 n=9+8)
EndToEnd/ored-preds-100/Simple                                          1.21MB ± 0%    1.21MB ± 0%     ~     (p=0.237 n=8+10)
EndToEnd/ored-preds-100/Prepared                                        1.03MB ± 0%    1.03MB ± 0%     ~     (p=0.489 n=9+9)
EndToEnd/ored-preds-using-params-100/Simple                             1.96MB ± 0%    1.96MB ± 0%   +0.13%  (p=0.000 n=8+8)
EndToEnd/ored-preds-using-params-100/Prepared                           1.79MB ± 0%    1.79MB ± 0%   +0.15%  (p=0.000 n=9+9)
FKInsert/SingleRow/None                                                 72.4kB ± 0%    73.1kB ± 1%   +0.89%  (p=0.016 n=8+10)
FKInsert/SingleRow/NoFastPath                                            123kB ± 0%     125kB ± 0%   +1.62%  (p=0.000 n=10+10)
FKInsert/SingleRow/FastPath                                             53.5kB ± 0%    55.3kB ± 0%   +3.30%  (p=0.000 n=9+10)
FKInsert/MultiRowSingleParent/None                                       379kB ± 1%     380kB ± 1%     ~     (p=0.052 n=10+10)
FKInsert/MultiRowSingleParent/NoFastPath                                 314kB ± 1%     316kB ± 1%   +0.67%  (p=0.004 n=10+10)
FKInsert/MultiRowSingleParent/FastPath                                   118kB ± 0%     119kB ± 0%   +1.29%  (p=0.000 n=10+9)
FKInsert/MultiRowMultiParent/None                                        383kB ± 1%     384kB ± 1%     ~     (p=0.529 n=10+10)
FKInsert/MultiRowMultiParent/NoFastPath                                  340kB ± 1%     342kB ± 1%     ~     (p=0.089 n=10+10)
FKInsert/MultiRowMultiParent/FastPath                                    140kB ± 0%     142kB ± 0%   +1.15%  (p=0.000 n=9+10)

name                                                                  old allocs/op  new allocs/op  delta
Phases/kv-read/Simple/Parse                                               29.0 ± 0%      29.0 ± 0%     ~     (all equal)
Phases/kv-read/Simple/OptBuildNoNorm                                      74.0 ± 0%      74.0 ± 0%     ~     (all equal)
Phases/kv-read/Simple/OptBuildNorm                                        77.0 ± 0%      77.0 ± 0%     ~     (all equal)
Phases/kv-read/Simple/Explore                                             84.0 ± 0%      84.0 ± 0%     ~     (all equal)
Phases/kv-read/Simple/ExecBuild                                           91.0 ± 0%      92.0 ± 0%   +1.10%  (p=0.000 n=10+10)
Phases/kv-read/Prepared/ExecBuild                                         11.0 ± 0%      12.0 ± 0%   +9.09%  (p=0.000 n=10+10)
Phases/kv-read-const/Simple/Parse                                         29.0 ± 0%      29.0 ± 0%     ~     (all equal)
Phases/kv-read-const/Simple/OptBuildNoNorm                                74.0 ± 0%      74.0 ± 0%     ~     (all equal)
Phases/kv-read-const/Simple/OptBuildNorm                                  77.0 ± 0%      77.0 ± 0%     ~     (all equal)
Phases/kv-read-const/Simple/Explore                                       84.0 ± 0%      84.0 ± 0%     ~     (all equal)
Phases/kv-read-const/Simple/ExecBuild                                     91.0 ± 0%      92.0 ± 0%   +1.10%  (p=0.000 n=10+10)
Phases/kv-read-const/Prepared/ExecBuild                                   8.00 ± 0%      9.00 ± 0%  +12.50%  (p=0.000 n=10+10)
Phases/tpcc-new-order/Simple/Parse                                        39.0 ± 0%      39.0 ± 0%     ~     (all equal)
Phases/tpcc-new-order/Simple/OptBuildNoNorm                                112 ± 0%       112 ± 0%     ~     (all equal)
Phases/tpcc-new-order/Simple/OptBuildNorm                                  128 ± 0%       128 ± 0%     ~     (all equal)
Phases/tpcc-new-order/Simple/Explore                                       156 ± 0%       156 ± 0%     ~     (all equal)
Phases/tpcc-new-order/Simple/ExecBuild                                     164 ± 0%       165 ± 0%   +0.61%  (p=0.000 n=10+10)
Phases/tpcc-new-order/Prepared/ExecBuild                                  11.0 ± 0%      12.0 ± 0%   +9.09%  (p=0.000 n=10+10)
Phases/tpcc-delivery/Simple/Parse                                         35.0 ± 0%      35.0 ± 0%     ~     (all equal)
Phases/tpcc-delivery/Simple/OptBuildNoNorm                                 102 ± 0%       102 ± 0%     ~     (all equal)
Phases/tpcc-delivery/Simple/OptBuildNorm                                   119 ± 0%       119 ± 0%     ~     (all equal)
Phases/tpcc-delivery/Simple/Explore                                        158 ± 0%       158 ± 0%     ~     (all equal)
Phases/tpcc-delivery/Simple/ExecBuild                                      166 ± 0%       167 ± 0%   +0.60%  (p=0.000 n=10+10)
Phases/tpcc-delivery/Prepared/AssignPlaceholdersNoNorm                    27.0 ± 0%      27.0 ± 0%     ~     (all equal)
Phases/tpcc-delivery/Prepared/AssignPlaceholdersNorm                      27.0 ± 0%      27.0 ± 0%     ~     (all equal)
Phases/tpcc-delivery/Prepared/Explore                                     67.0 ± 0%      67.0 ± 0%     ~     (all equal)
Phases/tpcc-delivery/Prepared/ExecBuild                                   75.0 ± 0%      76.0 ± 0%   +1.33%  (p=0.000 n=10+10)
Phases/tpcc-stock-level/Simple/Parse                                      59.0 ± 0%      59.0 ± 0%     ~     (all equal)
Phases/tpcc-stock-level/Simple/OptBuildNoNorm                              291 ± 0%       291 ± 0%     ~     (all equal)
Phases/tpcc-stock-level/Simple/OptBuildNorm                                493 ± 0%       493 ± 0%     ~     (all equal)
Phases/tpcc-stock-level/Simple/Explore                                     617 ± 0%       617 ± 0%     ~     (all equal)
Phases/tpcc-stock-level/Simple/ExecBuild                                   637 ± 0%       638 ± 0%   +0.16%  (p=0.000 n=10+10)
Phases/tpcc-stock-level/Prepared/AssignPlaceholdersNoNorm                  106 ± 0%       106 ± 0%     ~     (all equal)
Phases/tpcc-stock-level/Prepared/AssignPlaceholdersNorm                    105 ± 0%       105 ± 0%     ~     (all equal)
Phases/tpcc-stock-level/Prepared/Explore                                   229 ± 0%       229 ± 0%     ~     (all equal)
Phases/tpcc-stock-level/Prepared/ExecBuild                                 249 ± 0%       250 ± 0%   +0.40%  (p=0.000 n=10+10)
Phases/many-columns-and-indexes-a/Simple/Parse                            21.0 ± 0%      21.0 ± 0%     ~     (all equal)
Phases/many-columns-and-indexes-a/Simple/OptBuildNoNorm                   62.0 ± 0%      62.0 ± 0%     ~     (all equal)
Phases/many-columns-and-indexes-a/Simple/OptBuildNorm                     69.0 ± 0%      69.0 ± 0%     ~     (all equal)
Phases/many-columns-and-indexes-a/Simple/Explore                          71.0 ± 0%      71.0 ± 0%     ~     (all equal)
Phases/many-columns-and-indexes-a/Simple/ExecBuild                        82.0 ± 0%      83.0 ± 0%   +1.22%  (p=0.000 n=10+10)
Phases/many-columns-and-indexes-a/Prepared/AssignPlaceholdersNoNorm       21.0 ± 0%      21.0 ± 0%     ~     (all equal)
Phases/many-columns-and-indexes-a/Prepared/AssignPlaceholdersNorm         21.0 ± 0%      21.0 ± 0%     ~     (all equal)
Phases/many-columns-and-indexes-a/Prepared/Explore                        23.0 ± 0%      23.0 ± 0%     ~     (all equal)
Phases/many-columns-and-indexes-a/Prepared/ExecBuild                      34.0 ± 0%      35.0 ± 0%   +2.94%  (p=0.000 n=10+10)
Phases/many-columns-and-indexes-b/Simple/Parse                            30.0 ± 0%      30.0 ± 0%     ~     (all equal)
Phases/many-columns-and-indexes-b/Simple/OptBuildNoNorm                    109 ± 0%       109 ± 0%     ~     (all equal)
Phases/many-columns-and-indexes-b/Simple/OptBuildNorm                      128 ± 0%       128 ± 0%     ~     (all equal)
Phases/many-columns-and-indexes-b/Simple/Explore                           130 ± 0%       130 ± 0%     ~     (all equal)
Phases/many-columns-and-indexes-b/Simple/ExecBuild                         145 ± 0%       146 ± 0%   +0.69%  (p=0.000 n=10+10)
Phases/many-columns-and-indexes-b/Prepared/AssignPlaceholdersNoNorm       36.0 ± 0%      36.0 ± 0%     ~     (all equal)
Phases/many-columns-and-indexes-b/Prepared/AssignPlaceholdersNorm         36.0 ± 0%      36.0 ± 0%     ~     (all equal)
Phases/many-columns-and-indexes-b/Prepared/Explore                        38.0 ± 0%      38.0 ± 0%     ~     (all equal)
Phases/many-columns-and-indexes-b/Prepared/ExecBuild                      53.0 ± 0%      54.0 ± 0%   +1.89%  (p=0.000 n=10+10)
Phases/ored-preds-100/Simple/Parse                                         823 ± 0%       823 ± 0%     ~     (all equal)
Phases/ored-preds-100/Simple/OptBuildNoNorm                              4.08k ± 0%     4.08k ± 0%     ~     (all equal)
Phases/ored-preds-100/Simple/OptBuildNorm                                4.08k ± 0%     4.08k ± 0%     ~     (all equal)
Phases/ored-preds-100/Simple/Explore                                     5.52k ± 0%     5.52k ± 0%     ~     (p=0.248 n=9+10)
Phases/ored-preds-100/Simple/ExecBuild                                   5.93k ± 0%     5.93k ± 0%   +0.01%  (p=0.015 n=10+9)
Phases/ored-preds-100/Prepared/ExecBuild                                   415 ± 0%       416 ± 0%   +0.24%  (p=0.000 n=10+10)
Phases/ored-preds-using-params-100/Simple/Parse                            823 ± 0%       823 ± 0%     ~     (all equal)
Phases/ored-preds-using-params-100/Simple/OptBuildNoNorm                 4.08k ± 0%     4.08k ± 0%     ~     (all equal)
Phases/ored-preds-using-params-100/Simple/OptBuildNorm                   4.08k ± 0%     4.08k ± 0%     ~     (all equal)
Phases/ored-preds-using-params-100/Simple/Explore                        5.52k ± 0%     5.52k ± 0%     ~     (p=0.650 n=10+10)
Phases/ored-preds-using-params-100/Simple/ExecBuild                      5.93k ± 0%     5.93k ± 0%   +0.01%  (p=0.008 n=10+8)
Phases/ored-preds-using-params-100/Prepared/AssignPlaceholdersNoNorm     1.44k ± 0%     1.44k ± 0%     ~     (all equal)
Phases/ored-preds-using-params-100/Prepared/AssignPlaceholdersNorm       1.44k ± 0%     1.44k ± 0%     ~     (all equal)
Phases/ored-preds-using-params-100/Prepared/Explore                      2.88k ± 0%     2.88k ± 0%     ~     (all equal)
Phases/ored-preds-using-params-100/Prepared/ExecBuild                    3.29k ± 0%     3.29k ± 0%   +0.03%  (p=0.000 n=10+10)
Chain/chain-1                                                             44.0 ± 0%      44.0 ± 0%     ~     (all equal)
Chain/chain-2                                                              176 ± 0%       176 ± 0%     ~     (all equal)
Chain/chain-3                                                              336 ± 0%       336 ± 0%     ~     (all equal)
Chain/chain-4                                                              487 ± 0%       487 ± 0%     ~     (all equal)
Chain/chain-5                                                              650 ± 0%       650 ± 0%     ~     (all equal)
Chain/chain-6                                                              818 ± 0%       818 ± 0%     ~     (all equal)
Chain/chain-7                                                            0.99k ± 0%     0.99k ± 0%     ~     (all equal)
Chain/chain-8                                                            1.18k ± 0%     1.18k ± 0%     ~     (all equal)
Chain/chain-9                                                            1.38k ± 0%     1.38k ± 0%     ~     (p=1.000 n=10+10)
Chain/chain-10                                                           1.58k ± 0%     1.58k ± 0%     ~     (p=0.108 n=10+9)
Chain/chain-11                                                           1.77k ± 0%     1.78k ± 0%     ~     (p=0.108 n=9+10)
Chain/chain-12                                                           1.98k ± 0%     1.98k ± 0%     ~     (all equal)
Chain/chain-13                                                           2.19k ± 0%     2.19k ± 0%     ~     (all equal)
Chain/chain-14                                                           2.43k ± 0%     2.43k ± 0%     ~     (p=0.294 n=8+10)
Chain/chain-15                                                           2.66k ± 0%     2.66k ± 0%   +0.08%  (p=0.000 n=8+9)
Chain/chain-16                                                           4.20k ± 0%     2.89k ± 0%  -31.16%  (p=0.000 n=10+10)
Chain/chain-17                                                           6.45k ± 0%     3.12k ± 0%  -51.67%  (p=0.000 n=10+10)
Chain/chain-18                                                           8.13k ± 0%     3.35k ± 0%  -58.74%  (p=0.000 n=8+10)
Chain/chain-19                                                           9.83k ± 0%     3.59k ± 0%  -63.44%  (p=0.000 n=9+10)
EndToEnd/kv-read/Simple                                                    295 ± 0%       296 ± 0%   +0.38%  (p=0.001 n=8+8)
EndToEnd/kv-read/Prepared                                                  224 ± 0%       225 ± 0%   +0.50%  (p=0.001 n=9+9)
EndToEnd/kv-read-const/Simple                                              231 ± 1%       232 ± 0%   +0.26%  (p=0.005 n=10+9)
EndToEnd/kv-read-const/Prepared                                            216 ± 1%       216 ± 0%     ~     (p=0.073 n=9+8)
EndToEnd/tpcc-new-order/Simple                                             344 ± 0%       345 ± 0%   +0.36%  (p=0.000 n=8+9)
EndToEnd/tpcc-new-order/Prepared                                           261 ± 0%       261 ± 0%     ~     (p=0.106 n=9+8)
EndToEnd/tpcc-delivery/Simple                                              387 ± 0%       388 ± 0%   +0.26%  (p=0.000 n=9+8)
EndToEnd/tpcc-delivery/Prepared                                            309 ± 0%       310 ± 0%   +0.27%  (p=0.017 n=9+8)
EndToEnd/tpcc-stock-level/Simple                                           984 ± 0%       985 ± 0%   +0.06%  (p=0.026 n=8+8)
EndToEnd/tpcc-stock-level/Prepared                                         877 ± 0%       877 ± 0%   +0.09%  (p=0.036 n=9+9)
EndToEnd/many-columns-and-indexes-a/Simple                                 383 ± 0%       384 ± 0%     ~     (p=0.095 n=9+8)
EndToEnd/many-columns-and-indexes-a/Prepared                               323 ± 4%       321 ± 1%     ~     (p=0.358 n=9+9)
EndToEnd/many-columns-and-indexes-b/Simple                                 434 ± 0%       435 ± 0%     ~     (p=0.052 n=6+10)
EndToEnd/many-columns-and-indexes-b/Prepared                               361 ± 0%       363 ± 1%     ~     (p=0.085 n=9+8)
EndToEnd/ored-preds-100/Simple                                           4.94k ± 0%     4.94k ± 0%   +0.03%  (p=0.002 n=8+10)
EndToEnd/ored-preds-100/Prepared                                         4.12k ± 0%     4.12k ± 0%   +0.02%  (p=0.046 n=9+9)
EndToEnd/ored-preds-using-params-100/Simple                              8.20k ± 0%     8.21k ± 0%   +0.04%  (p=0.004 n=8+8)
EndToEnd/ored-preds-using-params-100/Prepared                            7.31k ± 0%     7.32k ± 0%   +0.03%  (p=0.022 n=9+9)
FKInsert/SingleRow/None                                                    551 ± 0%       551 ± 0%     ~     (p=0.891 n=9+9)
FKInsert/SingleRow/NoFastPath                                              885 ± 0%       885 ± 0%     ~     (p=0.258 n=8+9)
FKInsert/SingleRow/FastPath                                                424 ± 0%       424 ± 0%     ~     (all equal)
FKInsert/MultiRowSingleParent/None                                       1.61k ± 0%     1.61k ± 1%     ~     (p=0.085 n=10+10)
FKInsert/MultiRowSingleParent/NoFastPath                                 1.82k ± 0%     1.82k ± 0%     ~     (p=0.181 n=10+10)
FKInsert/MultiRowSingleParent/FastPath                                     903 ± 0%       902 ± 0%   -0.05%  (p=0.037 n=10+9)
FKInsert/MultiRowMultiParent/None                                        1.58k ± 0%     1.58k ± 0%     ~     (p=0.366 n=9+9)
FKInsert/MultiRowMultiParent/NoFastPath                                  1.95k ± 0%     1.96k ± 0%     ~     (p=0.087 n=8+10)
FKInsert/MultiRowMultiParent/FastPath                                    1.07k ± 0%     1.07k ± 0%     ~     (p=0.838 n=9+10)

@RaduBerinde
Copy link
Member Author

Part of the regression is due to FastIntSet.Encode() which now encodes an extra word. Apparently each call allocates the temporary array (I will investigate fixing this separately).

I updated the change to keep the old encoding (only use 64 bits). What I find baffling is that even benchmarks that don't actually involve that function are improved. I looked at the assembly difference of Encode and it's very small, simply one more function call. Maybe it's simply luck in terms of how the parsing code (which must be sizable) is laid out (eg w.r.t cachelines).

name                         old time/op    new time/op    delta
Phases/kv-read/Simple/Parse    13.1µs ± 3%     9.0µs ± 0%  -31.11%  (p=0.000 n=10+8)

name                         old alloc/op   new alloc/op   delta
Phases/kv-read/Simple/Parse    3.55kB ± 0%    3.55kB ± 0%     ~     (all equal)

name                         old allocs/op  new allocs/op  delta
Phases/kv-read/Simple/Parse      29.0 ± 0%      29.0 ± 0%     ~     (all equal)

@RaduBerinde RaduBerinde force-pushed the fast-int-set-128 branch 2 times, most recently from cf871ea to 3f47291 Compare December 10, 2021 22:43
@RaduBerinde
Copy link
Member Author

I separated out the other changes and fixes and those are already merged. Here are the benchmarks for the current version (on a gceworker). Again, we see some regression in benchmarks that don't even use FastIntSets (like Parse).

name                                                                  old time/op    new time/op    delta
Phases/kv-read/Simple/Parse                                             16.1µs ± 0%    17.2µs ± 2%   +7.01%  (p=0.008 n=5+5)
Phases/kv-read/Simple/OptBuildNoNorm                                    40.7µs ± 2%    43.2µs ± 3%   +6.09%  (p=0.008 n=5+5)
Phases/kv-read/Simple/OptBuildNorm                                      45.1µs ± 1%    47.0µs ± 1%   +4.19%  (p=0.008 n=5+5)
Phases/kv-read/Simple/Explore                                           53.8µs ± 2%    56.4µs ± 1%   +4.93%  (p=0.008 n=5+5)
Phases/kv-read/Simple/ExecBuild                                         56.6µs ± 2%    59.6µs ± 2%   +5.23%  (p=0.008 n=5+5)
Phases/kv-read/Prepared/ExecBuild                                       1.69µs ± 1%    1.79µs ± 5%   +5.48%  (p=0.008 n=5+5)
Phases/kv-read-const/Simple/Parse                                       16.4µs ± 1%    17.1µs ± 1%   +4.67%  (p=0.008 n=5+5)
Phases/kv-read-const/Simple/OptBuildNoNorm                              40.6µs ± 1%    42.8µs ± 3%   +5.37%  (p=0.008 n=5+5)
Phases/kv-read-const/Simple/OptBuildNorm                                45.5µs ± 1%    47.4µs ± 0%   +4.03%  (p=0.008 n=5+5)
Phases/kv-read-const/Simple/Explore                                     55.1µs ± 2%    57.4µs ± 2%   +4.10%  (p=0.008 n=5+5)
Phases/kv-read-const/Simple/ExecBuild                                   57.4µs ± 1%    60.1µs ± 2%   +4.64%  (p=0.008 n=5+5)
Phases/kv-read-const/Prepared/ExecBuild                                 1.57µs ± 5%    1.55µs ± 0%     ~     (p=0.667 n=5+4)
Phases/tpcc-new-order/Simple/Parse                                      31.2µs ± 1%    33.9µs ± 1%   +8.78%  (p=0.008 n=5+5)
Phases/tpcc-new-order/Simple/OptBuildNoNorm                             82.7µs ± 2%    85.4µs ± 1%   +3.30%  (p=0.008 n=5+5)
Phases/tpcc-new-order/Simple/OptBuildNorm                               97.3µs ± 1%   101.4µs ± 1%   +4.23%  (p=0.008 n=5+5)
Phases/tpcc-new-order/Simple/Explore                                     133µs ± 1%     139µs ± 1%   +4.22%  (p=0.008 n=5+5)
Phases/tpcc-new-order/Simple/ExecBuild                                   137µs ± 1%     144µs ± 2%   +4.91%  (p=0.008 n=5+5)
Phases/tpcc-new-order/Prepared/ExecBuild                                2.35µs ± 2%    2.34µs ± 2%     ~     (p=0.690 n=5+5)
Phases/tpcc-delivery/Simple/Parse                                       26.8µs ± 0%    28.2µs ± 1%   +5.04%  (p=0.008 n=5+5)
Phases/tpcc-delivery/Simple/OptBuildNoNorm                              68.4µs ± 1%    71.9µs ± 1%   +5.09%  (p=0.008 n=5+5)
Phases/tpcc-delivery/Simple/OptBuildNorm                                85.3µs ± 1%    90.2µs ± 1%   +5.79%  (p=0.008 n=5+5)
Phases/tpcc-delivery/Simple/Explore                                      114µs ± 1%     121µs ± 0%   +6.19%  (p=0.008 n=5+5)
Phases/tpcc-delivery/Simple/ExecBuild                                    118µs ± 1%     127µs ± 1%   +7.31%  (p=0.008 n=5+5)
Phases/tpcc-delivery/Prepared/AssignPlaceholdersNoNorm                  17.4µs ± 1%    19.1µs ± 1%  +10.01%  (p=0.008 n=5+5)
Phases/tpcc-delivery/Prepared/AssignPlaceholdersNorm                    17.4µs ± 1%    19.2µs ± 1%  +10.42%  (p=0.008 n=5+5)
Phases/tpcc-delivery/Prepared/Explore                                   42.6µs ± 2%    46.3µs ± 0%   +8.58%  (p=0.008 n=5+5)
Phases/tpcc-delivery/Prepared/ExecBuild                                 45.5µs ± 1%    49.6µs ± 2%   +8.84%  (p=0.008 n=5+5)
Phases/tpcc-stock-level/Simple/Parse                                    54.1µs ± 1%    58.8µs ± 1%   +8.80%  (p=0.008 n=5+5)
Phases/tpcc-stock-level/Simple/OptBuildNoNorm                            232µs ± 3%     232µs ± 1%     ~     (p=0.690 n=5+5)
Phases/tpcc-stock-level/Simple/OptBuildNorm                              404µs ± 2%     421µs ± 1%   +4.37%  (p=0.008 n=5+5)
Phases/tpcc-stock-level/Simple/Explore                                   528µs ± 1%     561µs ± 1%   +6.33%  (p=0.008 n=5+5)
Phases/tpcc-stock-level/Simple/ExecBuild                                 567µs ± 3%     582µs ± 2%     ~     (p=0.056 n=5+5)
Phases/tpcc-stock-level/Prepared/AssignPlaceholdersNoNorm               75.2µs ± 3%    78.3µs ± 0%   +4.20%  (p=0.008 n=5+5)
Phases/tpcc-stock-level/Prepared/AssignPlaceholdersNorm                 75.2µs ± 3%    80.1µs ± 1%   +6.60%  (p=0.008 n=5+5)
Phases/tpcc-stock-level/Prepared/Explore                                 183µs ± 1%     197µs ± 1%   +7.76%  (p=0.008 n=5+5)
Phases/tpcc-stock-level/Prepared/ExecBuild                               199µs ± 1%     210µs ± 0%   +5.75%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-a/Simple/Parse                          13.2µs ± 1%    14.2µs ± 1%   +7.46%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-a/Simple/OptBuildNoNorm                  359µs ± 0%     379µs ± 0%   +5.62%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-a/Simple/OptBuildNorm                    365µs ± 0%     386µs ± 0%   +5.62%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-a/Simple/Explore                         535µs ± 0%     550µs ± 1%   +2.88%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-a/Simple/ExecBuild                       542µs ± 0%     557µs ± 0%   +2.86%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-a/Prepared/AssignPlaceholdersNoNorm      322µs ± 0%     340µs ± 0%   +5.32%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-a/Prepared/AssignPlaceholdersNorm        322µs ± 0%     340µs ± 0%   +5.52%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-a/Prepared/Explore                       490µs ± 0%     500µs ± 0%   +2.23%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-a/Prepared/ExecBuild                     494µs ± 0%     505µs ± 0%   +2.26%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-b/Simple/Parse                          24.3µs ± 2%    26.0µs ± 1%   +7.37%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-b/Simple/OptBuildNoNorm                  392µs ± 0%     412µs ± 2%   +5.10%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-b/Simple/OptBuildNorm                    408µs ± 1%     428µs ± 1%   +4.88%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-b/Simple/Explore                         581µs ± 0%     602µs ± 0%   +3.61%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-b/Simple/ExecBuild                       592µs ± 1%     614µs ± 0%   +3.77%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-b/Prepared/AssignPlaceholdersNoNorm      331µs ± 0%     350µs ± 0%   +5.77%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-b/Prepared/AssignPlaceholdersNorm        331µs ± 0%     351µs ± 0%   +6.12%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-b/Prepared/Explore                       504µs ± 0%     515µs ± 0%   +2.18%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-b/Prepared/ExecBuild                     510µs ± 0%     521µs ± 0%   +2.30%  (p=0.008 n=5+5)
Phases/ored-preds-100/Simple/Parse                                      1.12ms ± 0%    1.19ms ± 1%   +6.66%  (p=0.008 n=5+5)
Phases/ored-preds-100/Simple/OptBuildNoNorm                             2.77ms ± 1%    2.83ms ± 0%   +2.18%  (p=0.008 n=5+5)
Phases/ored-preds-100/Simple/OptBuildNorm                               2.76ms ± 1%    2.87ms ± 1%   +4.08%  (p=0.008 n=5+5)
Phases/ored-preds-100/Simple/Explore                                    3.82ms ± 1%    3.96ms ± 0%   +3.47%  (p=0.008 n=5+5)
Phases/ored-preds-100/Simple/ExecBuild                                  4.00ms ± 2%    4.12ms ± 1%   +3.02%  (p=0.008 n=5+5)
Phases/ored-preds-100/Prepared/ExecBuild                                 126µs ± 1%     126µs ± 0%     ~     (p=0.151 n=5+5)
Phases/ored-preds-using-params-100/Simple/Parse                         1.08ms ± 1%    1.15ms ± 1%   +6.70%  (p=0.008 n=5+5)
Phases/ored-preds-using-params-100/Simple/OptBuildNoNorm                2.48ms ± 0%    2.58ms ± 1%   +4.21%  (p=0.008 n=5+5)
Phases/ored-preds-using-params-100/Simple/OptBuildNorm                  2.54ms ± 2%    2.60ms ± 1%   +2.32%  (p=0.032 n=5+5)
Phases/ored-preds-using-params-100/Simple/Explore                       3.73ms ± 2%    3.68ms ± 1%     ~     (p=0.095 n=5+5)
Phases/ored-preds-using-params-100/Simple/ExecBuild                     3.92ms ± 3%    3.84ms ± 2%     ~     (p=0.056 n=5+5)
Phases/ored-preds-using-params-100/Prepared/AssignPlaceholdersNoNorm     803µs ± 3%     801µs ± 2%     ~     (p=1.000 n=5+5)
Phases/ored-preds-using-params-100/Prepared/AssignPlaceholdersNorm       800µs ± 4%     790µs ± 2%     ~     (p=0.421 n=5+5)
Phases/ored-preds-using-params-100/Prepared/Explore                     1.87ms ± 1%    1.86ms ± 2%     ~     (p=0.421 n=5+5)
Phases/ored-preds-using-params-100/Prepared/ExecBuild                   2.01ms ± 1%    1.93ms ± 0%   -3.61%  (p=0.008 n=5+5)
Chain/chain-1                                                           21.4µs ± 1%    22.0µs ± 2%   +2.99%  (p=0.016 n=5+5)
Chain/chain-2                                                            125µs ± 1%     129µs ± 0%   +3.80%  (p=0.008 n=5+5)
Chain/chain-3                                                            247µs ± 1%     264µs ± 1%   +6.69%  (p=0.008 n=5+5)
Chain/chain-4                                                            368µs ± 1%     390µs ± 1%   +5.79%  (p=0.008 n=5+5)
Chain/chain-5                                                            500µs ± 0%     537µs ± 2%   +7.35%  (p=0.008 n=5+5)
Chain/chain-6                                                            660µs ± 1%     685µs ± 1%   +3.80%  (p=0.008 n=5+5)
Chain/chain-7                                                            826µs ± 2%     872µs ± 1%   +5.62%  (p=0.008 n=5+5)
Chain/chain-8                                                           1.02ms ± 1%    1.06ms ± 1%   +3.95%  (p=0.008 n=5+5)
Chain/chain-9                                                           1.25ms ± 1%    1.32ms ± 2%   +5.10%  (p=0.008 n=5+5)
Chain/chain-10                                                          1.49ms ± 1%    1.54ms ± 0%   +3.61%  (p=0.008 n=5+5)
Chain/chain-11                                                          1.71ms ± 1%    1.82ms ± 1%   +6.21%  (p=0.008 n=5+5)
Chain/chain-12                                                          2.01ms ± 1%    2.12ms ± 1%   +5.33%  (p=0.008 n=5+5)
Chain/chain-13                                                          2.33ms ± 1%    2.48ms ± 1%   +6.40%  (p=0.008 n=5+5)
Chain/chain-14                                                          2.72ms ± 2%    2.89ms ± 1%   +6.33%  (p=0.008 n=5+5)
Chain/chain-15                                                          3.14ms ± 1%    3.32ms ± 1%   +5.44%  (p=0.008 n=5+5)
Chain/chain-16                                                          3.61ms ± 1%    3.77ms ± 1%   +4.43%  (p=0.008 n=5+5)
Chain/chain-17                                                          5.26ms ± 2%    4.27ms ± 1%  -18.94%  (p=0.008 n=5+5)
Chain/chain-18                                                          6.64ms ± 1%    4.91ms ± 1%  -26.17%  (p=0.008 n=5+5)
Chain/chain-19                                                          8.06ms ± 1%    5.50ms ± 1%  -31.80%  (p=0.008 n=5+5)
EndToEnd/kv-read/Simple                                                  317µs ± 5%     322µs ± 4%     ~     (p=0.310 n=5+5)
EndToEnd/kv-read/Prepared                                                207µs ± 4%     214µs ± 3%     ~     (p=0.095 n=5+5)
EndToEnd/kv-read-const/Simple                                            236µs ± 2%     240µs ± 2%     ~     (p=0.095 n=5+5)
EndToEnd/kv-read-const/Prepared                                          209µs ± 1%     211µs ± 2%     ~     (p=0.310 n=5+5)
EndToEnd/tpcc-new-order/Simple                                           369µs ± 1%     380µs ± 2%   +2.86%  (p=0.008 n=5+5)
EndToEnd/tpcc-new-order/Prepared                                         239µs ± 6%     240µs ± 1%     ~     (p=0.421 n=5+5)
EndToEnd/tpcc-delivery/Simple                                            454µs ± 2%     461µs ± 1%     ~     (p=0.056 n=5+5)
EndToEnd/tpcc-delivery/Prepared                                          328µs ± 2%     343µs ± 3%   +4.66%  (p=0.008 n=5+5)
EndToEnd/tpcc-stock-level/Simple                                         895µs ± 1%     914µs ± 1%   +2.14%  (p=0.016 n=4+5)
EndToEnd/tpcc-stock-level/Prepared                                       721µs ± 0%     819µs ±19%  +13.69%  (p=0.008 n=5+5)
EndToEnd/many-columns-and-indexes-a/Simple                              1.09ms ± 2%    1.16ms ± 4%   +6.00%  (p=0.008 n=5+5)
EndToEnd/many-columns-and-indexes-a/Prepared                            1.00ms ± 3%    1.03ms ± 2%   +3.40%  (p=0.032 n=5+5)
EndToEnd/many-columns-and-indexes-b/Simple                              1.22ms ± 1%    1.24ms ± 0%   +1.25%  (p=0.008 n=5+5)
EndToEnd/many-columns-and-indexes-b/Prepared                            1.12ms ± 2%    1.13ms ± 2%     ~     (p=0.310 n=5+5)
EndToEnd/ored-preds-100/Simple                                          2.61ms ± 2%    2.62ms ± 1%     ~     (p=0.310 n=5+5)
EndToEnd/ored-preds-100/Prepared                                        1.43ms ± 2%    1.45ms ± 2%     ~     (p=0.310 n=5+5)
EndToEnd/ored-preds-using-params-100/Simple                             4.42ms ± 1%    4.51ms ± 3%   +2.11%  (p=0.008 n=5+5)
EndToEnd/ored-preds-using-params-100/Prepared                           3.22ms ± 2%    3.19ms ± 4%     ~     (p=0.222 n=5+5)
FKInsert/SingleRow/None                                                  916µs ± 2%     884µs ± 2%   -3.40%  (p=0.008 n=5+5)
FKInsert/SingleRow/NoFastPath                                           1.11ms ± 1%    1.10ms ± 4%     ~     (p=0.421 n=5+5)
FKInsert/SingleRow/FastPath                                              543µs ± 2%     547µs ± 2%     ~     (p=0.548 n=5+5)
FKInsert/MultiRowSingleParent/None                                      1.83ms ± 3%    1.82ms ± 3%     ~     (p=0.548 n=5+5)
FKInsert/MultiRowSingleParent/NoFastPath                                1.79ms ± 5%    1.82ms ± 9%     ~     (p=0.690 n=5+5)
FKInsert/MultiRowSingleParent/FastPath                                   823µs ± 3%     799µs ± 3%     ~     (p=0.056 n=5+5)
FKInsert/MultiRowMultiParent/None                                       1.97ms ± 4%    1.93ms ± 3%     ~     (p=0.310 n=5+5)
FKInsert/MultiRowMultiParent/NoFastPath                                 1.92ms ± 2%    1.99ms ± 8%     ~     (p=0.056 n=5+5)
FKInsert/MultiRowMultiParent/FastPath                                    962µs ± 3%    1015µs ± 6%     ~     (p=0.151 n=5+5)

name                                                                  old alloc/op   new alloc/op   delta
Phases/kv-read/Simple/Parse                                             3.55kB ± 0%    3.55kB ± 0%     ~     (all equal)
Phases/kv-read/Simple/OptBuildNoNorm                                    10.4kB ± 0%    10.9kB ± 0%   +5.08%  (p=0.008 n=5+5)
Phases/kv-read/Simple/OptBuildNorm                                      11.5kB ± 0%    12.2kB ± 0%   +6.13%  (p=0.008 n=5+5)
Phases/kv-read/Simple/Explore                                           13.4kB ± 0%    14.2kB ± 0%   +6.33%  (p=0.008 n=5+5)
Phases/kv-read/Simple/ExecBuild                                         13.8kB ± 0%    14.7kB ± 0%   +6.14%  (p=0.008 n=5+5)
Phases/kv-read/Prepared/ExecBuild                                         656B ± 0%      656B ± 0%     ~     (all equal)
Phases/kv-read-const/Simple/Parse                                       3.65kB ± 0%    3.65kB ± 0%     ~     (all equal)
Phases/kv-read-const/Simple/OptBuildNoNorm                              10.5kB ± 0%    11.0kB ± 0%   +5.04%  (p=0.008 n=5+5)
Phases/kv-read-const/Simple/OptBuildNorm                                11.6kB ± 0%    12.3kB ± 0%   +6.09%  (p=0.008 n=5+5)
Phases/kv-read-const/Simple/Explore                                     13.5kB ± 0%    14.3kB ± 0%   +6.29%  (p=0.016 n=4+5)
Phases/kv-read-const/Simple/ExecBuild                                   13.9kB ± 0%    14.8kB ± 0%   +6.10%  (p=0.008 n=5+5)
Phases/kv-read-const/Prepared/ExecBuild                                   472B ± 0%      472B ± 0%     ~     (all equal)
Phases/tpcc-new-order/Simple/Parse                                      5.76kB ± 0%    5.76kB ± 0%     ~     (all equal)
Phases/tpcc-new-order/Simple/OptBuildNoNorm                             20.1kB ± 0%    20.7kB ± 0%   +2.78%  (p=0.008 n=5+5)
Phases/tpcc-new-order/Simple/OptBuildNorm                               22.9kB ± 0%    23.9kB ± 0%   +4.19%  (p=0.016 n=5+4)
Phases/tpcc-new-order/Simple/Explore                                    28.2kB ± 0%    29.6kB ± 0%   +5.17%  (p=0.008 n=5+5)
Phases/tpcc-new-order/Simple/ExecBuild                                  28.6kB ± 0%    30.1kB ± 0%   +5.08%  (p=0.008 n=5+5)
Phases/tpcc-new-order/Prepared/ExecBuild                                  720B ± 0%      720B ± 0%     ~     (all equal)
Phases/tpcc-delivery/Simple/Parse                                       5.52kB ± 0%    5.52kB ± 0%     ~     (all equal)
Phases/tpcc-delivery/Simple/OptBuildNoNorm                              14.6kB ± 0%    15.2kB ± 0%   +4.39%  (p=0.008 n=5+5)
Phases/tpcc-delivery/Simple/OptBuildNorm                                18.6kB ± 0%    19.7kB ± 0%   +5.62%  (p=0.008 n=5+5)
Phases/tpcc-delivery/Simple/Explore                                     23.3kB ± 0%    24.8kB ± 0%   +6.21%  (p=0.008 n=5+5)
Phases/tpcc-delivery/Simple/ExecBuild                                   23.7kB ± 0%    25.2kB ± 0%   +6.10%  (p=0.008 n=5+5)
Phases/tpcc-delivery/Prepared/AssignPlaceholdersNoNorm                  4.85kB ± 0%    5.39kB ± 0%  +11.22%  (p=0.016 n=5+4)
Phases/tpcc-delivery/Prepared/AssignPlaceholdersNorm                    4.85kB ± 0%    5.39kB ± 0%  +11.22%  (p=0.008 n=5+5)
Phases/tpcc-delivery/Prepared/Explore                                   10.7kB ± 0%    11.6kB ± 0%   +8.86%  (p=0.008 n=5+5)
Phases/tpcc-delivery/Prepared/ExecBuild                                 11.1kB ± 0%    12.0kB ± 0%   +8.53%  (p=0.008 n=5+5)
Phases/tpcc-stock-level/Simple/Parse                                    10.3kB ± 0%    10.3kB ± 0%     ~     (all equal)
Phases/tpcc-stock-level/Simple/OptBuildNoNorm                           48.6kB ± 0%    49.8kB ± 0%   +2.44%  (p=0.008 n=5+5)
Phases/tpcc-stock-level/Simple/OptBuildNorm                             80.2kB ± 0%    87.9kB ± 0%   +9.59%  (p=0.008 n=5+5)
Phases/tpcc-stock-level/Simple/Explore                                   102kB ± 0%     112kB ± 0%   +9.43%  (p=0.008 n=5+5)
Phases/tpcc-stock-level/Simple/ExecBuild                                 106kB ± 0%     115kB ± 0%   +9.11%  (p=0.008 n=5+5)
Phases/tpcc-stock-level/Prepared/AssignPlaceholdersNoNorm               17.0kB ± 0%    18.9kB ± 0%  +11.52%  (p=0.008 n=5+5)
Phases/tpcc-stock-level/Prepared/AssignPlaceholdersNorm                 16.6kB ± 0%    18.6kB ± 0%  +12.05%  (p=0.008 n=5+5)
Phases/tpcc-stock-level/Prepared/Explore                                35.9kB ± 0%    39.8kB ± 0%  +10.93%  (p=0.008 n=5+5)
Phases/tpcc-stock-level/Prepared/ExecBuild                              39.5kB ± 0%    43.4kB ± 0%   +9.94%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-a/Simple/Parse                          2.48kB ± 0%    2.48kB ± 0%     ~     (all equal)
Phases/many-columns-and-indexes-a/Simple/OptBuildNoNorm                 13.6kB ± 0%    14.2kB ± 0%   +4.00%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-a/Simple/OptBuildNorm                   15.5kB ± 0%    16.3kB ± 0%   +5.06%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-a/Simple/Explore                        16.6kB ± 0%    17.5kB ± 0%   +5.51%  (p=0.016 n=4+5)
Phases/many-columns-and-indexes-a/Simple/ExecBuild                      17.2kB ± 0%    18.1kB ± 0%   +5.31%  (p=0.016 n=4+5)
Phases/many-columns-and-indexes-a/Prepared/AssignPlaceholdersNoNorm     3.30kB ± 0%    3.76kB ± 0%  +14.08%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-a/Prepared/AssignPlaceholdersNorm       3.30kB ± 0%    3.76kB ± 0%  +14.08%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-a/Prepared/Explore                      4.35kB ± 0%    4.94kB ± 0%  +13.60%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-a/Prepared/ExecBuild                    4.98kB ± 0%    5.58kB ± 0%  +11.88%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-b/Simple/Parse                          3.71kB ± 0%    3.71kB ± 0%     ~     (all equal)
Phases/many-columns-and-indexes-b/Simple/OptBuildNoNorm                 19.5kB ± 0%    20.0kB ± 0%   +2.96%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-b/Simple/OptBuildNorm                   22.5kB ± 0%    23.5kB ± 0%   +4.28%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-b/Simple/Explore                        23.6kB ± 0%    24.6kB ± 0%   +4.60%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-b/Simple/ExecBuild                      24.5kB ± 0%    25.6kB ± 0%   +4.44%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-b/Prepared/AssignPlaceholdersNoNorm     5.40kB ± 0%    5.94kB ± 0%  +10.07%  (p=0.016 n=4+5)
Phases/many-columns-and-indexes-b/Prepared/AssignPlaceholdersNorm       5.40kB ± 0%    5.94kB ± 0%  +10.06%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-b/Prepared/Explore                      6.45kB ± 0%    7.13kB ± 0%  +10.41%  (p=0.008 n=5+5)
Phases/many-columns-and-indexes-b/Prepared/ExecBuild                    7.42kB ± 0%    8.09kB ± 0%   +9.05%  (p=0.016 n=4+5)
Phases/ored-preds-100/Simple/Parse                                       168kB ± 0%     168kB ± 0%     ~     (all equal)
Phases/ored-preds-100/Simple/OptBuildNoNorm                              592kB ± 0%     593kB ± 0%   +0.14%  (p=0.008 n=5+5)
Phases/ored-preds-100/Simple/OptBuildNorm                                592kB ± 0%     593kB ± 0%   +0.16%  (p=0.008 n=5+5)
Phases/ored-preds-100/Simple/Explore                                     980kB ± 0%     983kB ± 0%   +0.29%  (p=0.008 n=5+5)
Phases/ored-preds-100/Simple/ExecBuild                                  1.01MB ± 0%    1.01MB ± 0%   +0.28%  (p=0.008 n=5+5)
Phases/ored-preds-100/Prepared/ExecBuild                                29.6kB ± 0%    29.6kB ± 0%     ~     (all equal)
Phases/ored-preds-using-params-100/Simple/Parse                          149kB ± 0%     149kB ± 0%     ~     (all equal)
Phases/ored-preds-using-params-100/Simple/OptBuildNoNorm                 574kB ± 0%     575kB ± 0%   +0.15%  (p=0.008 n=5+5)
Phases/ored-preds-using-params-100/Simple/OptBuildNorm                   575kB ± 0%     576kB ± 0%   +0.17%  (p=0.008 n=5+5)
Phases/ored-preds-using-params-100/Simple/Explore                        963kB ± 0%     965kB ± 0%   +0.29%  (p=0.008 n=5+5)
Phases/ored-preds-using-params-100/Simple/ExecBuild                      992kB ± 0%     995kB ± 0%   +0.28%  (p=0.008 n=5+5)
Phases/ored-preds-using-params-100/Prepared/AssignPlaceholdersNoNorm     348kB ± 0%     348kB ± 0%   +0.09%  (p=0.008 n=5+5)
Phases/ored-preds-using-params-100/Prepared/AssignPlaceholdersNorm       348kB ± 0%     348kB ± 0%   +0.09%  (p=0.008 n=5+5)
Phases/ored-preds-using-params-100/Prepared/Explore                      736kB ± 0%     738kB ± 0%   +0.29%  (p=0.008 n=5+5)
Phases/ored-preds-using-params-100/Prepared/ExecBuild                    765kB ± 0%     767kB ± 0%   +0.29%  (p=0.008 n=5+5)
Chain/chain-1                                                           8.53kB ± 0%    8.94kB ± 0%   +4.88%  (p=0.008 n=5+5)
Chain/chain-2                                                           27.7kB ± 0%    29.8kB ± 0%   +7.72%  (p=0.008 n=5+5)
Chain/chain-3                                                           54.0kB ± 0%    59.1kB ± 0%   +9.49%  (p=0.008 n=5+5)
Chain/chain-4                                                           80.8kB ± 0%    88.9kB ± 0%  +10.00%  (p=0.008 n=5+5)
Chain/chain-5                                                            115kB ± 0%     128kB ± 0%  +10.99%  (p=0.008 n=5+5)
Chain/chain-6                                                            154kB ± 0%     172kB ± 0%  +11.43%  (p=0.008 n=5+5)
Chain/chain-7                                                            197kB ± 0%     222kB ± 0%  +12.59%  (p=0.008 n=5+5)
Chain/chain-8                                                            240kB ± 0%     272kB ± 0%  +13.37%  (p=0.008 n=5+5)
Chain/chain-9                                                            316kB ± 0%     357kB ± 0%  +12.99%  (p=0.008 n=5+5)
Chain/chain-10                                                           370kB ± 0%     421kB ± 0%  +13.67%  (p=0.008 n=5+5)
Chain/chain-11                                                           430kB ± 0%     490kB ± 0%  +13.92%  (p=0.008 n=5+5)
Chain/chain-12                                                           502kB ± 0%     573kB ± 0%  +14.08%  (p=0.008 n=5+5)
Chain/chain-13                                                           578kB ± 0%     664kB ± 0%  +14.95%  (p=0.008 n=5+5)
Chain/chain-14                                                           711kB ± 0%     812kB ± 0%  +14.23%  (p=0.008 n=5+5)
Chain/chain-15                                                           798kB ± 0%     921kB ± 0%  +15.40%  (p=0.008 n=5+5)
Chain/chain-16                                                           909kB ± 0%    1050kB ± 0%  +15.50%  (p=0.008 n=5+5)
Chain/chain-17                                                          1.22MB ± 0%    1.17MB ± 0%   -4.12%  (p=0.008 n=5+5)
Chain/chain-18                                                          1.41MB ± 0%    1.29MB ± 0%   -8.66%  (p=0.008 n=5+5)
Chain/chain-19                                                          1.61MB ± 0%    1.41MB ± 0%  -12.05%  (p=0.008 n=5+5)
EndToEnd/kv-read/Simple                                                 25.5kB ± 2%    25.5kB ± 1%     ~     (p=0.841 n=5+5)
EndToEnd/kv-read/Prepared                                               19.3kB ± 1%    19.3kB ± 1%     ~     (p=0.886 n=4+4)
EndToEnd/kv-read-const/Simple                                           18.8kB ± 1%    18.9kB ± 3%     ~     (p=0.841 n=5+5)
EndToEnd/kv-read-const/Prepared                                         19.0kB ± 0%    19.0kB ± 0%     ~     (p=0.730 n=5+4)
EndToEnd/tpcc-new-order/Simple                                          34.2kB ± 6%    34.6kB ± 6%     ~     (p=1.000 n=5+5)
EndToEnd/tpcc-new-order/Prepared                                        24.8kB ± 0%    25.0kB ± 3%     ~     (p=0.365 n=4+5)
EndToEnd/tpcc-delivery/Simple                                           39.3kB ± 0%    40.1kB ± 0%   +2.11%  (p=0.016 n=5+4)
EndToEnd/tpcc-delivery/Prepared                                         31.4kB ± 6%    31.9kB ± 1%     ~     (p=0.190 n=5+4)
EndToEnd/tpcc-stock-level/Simple                                         135kB ± 0%     141kB ± 0%   +4.27%  (p=0.016 n=4+5)
EndToEnd/tpcc-stock-level/Prepared                                       124kB ± 0%     130kB ± 0%   +4.87%  (p=0.016 n=5+4)
EndToEnd/many-columns-and-indexes-a/Simple                              60.4kB ± 0%    61.6kB ± 0%   +2.04%  (p=0.029 n=4+4)
EndToEnd/many-columns-and-indexes-a/Prepared                            55.9kB ± 1%    59.9kB ± 8%   +7.28%  (p=0.016 n=4+5)
EndToEnd/many-columns-and-indexes-b/Simple                              66.2kB ± 0%    67.5kB ± 0%   +2.02%  (p=0.008 n=5+5)
EndToEnd/many-columns-and-indexes-b/Prepared                            60.1kB ± 1%    61.5kB ± 1%   +2.32%  (p=0.029 n=4+4)
EndToEnd/ored-preds-100/Simple                                          1.21MB ± 0%    1.21MB ± 0%     ~     (p=0.686 n=4+4)
EndToEnd/ored-preds-100/Prepared                                        1.03MB ± 0%    1.03MB ± 0%     ~     (p=0.548 n=5+5)
EndToEnd/ored-preds-using-params-100/Simple                             1.96MB ± 0%    1.96MB ± 0%   +0.15%  (p=0.016 n=5+4)
EndToEnd/ored-preds-using-params-100/Prepared                           1.79MB ± 0%    1.79MB ± 0%   +0.12%  (p=0.029 n=4+4)
FKInsert/SingleRow/None                                                 75.6kB ± 1%    76.0kB ± 1%     ~     (p=0.421 n=5+5)
FKInsert/SingleRow/NoFastPath                                            125kB ± 0%     127kB ± 0%   +1.36%  (p=0.008 n=5+5)
FKInsert/SingleRow/FastPath                                             55.8kB ± 0%    57.7kB ± 0%   +3.40%  (p=0.008 n=5+5)
FKInsert/MultiRowSingleParent/None                                       386kB ± 0%     385kB ± 1%     ~     (p=0.841 n=5+5)
FKInsert/MultiRowSingleParent/NoFastPath                                 325kB ± 1%     327kB ± 0%   +0.64%  (p=0.032 n=5+5)
FKInsert/MultiRowSingleParent/FastPath                                   129kB ± 2%     130kB ± 0%     ~     (p=0.151 n=5+5)
FKInsert/MultiRowMultiParent/None                                        389kB ± 1%     388kB ± 1%     ~     (p=1.000 n=5+5)
FKInsert/MultiRowMultiParent/NoFastPath                                  346kB ± 0%     348kB ± 0%   +0.62%  (p=0.032 n=5+5)
FKInsert/MultiRowMultiParent/FastPath                                    147kB ± 0%     148kB ± 0%   +1.30%  (p=0.029 n=4+4)

name                                                                  old allocs/op  new allocs/op  delta
Phases/kv-read/Simple/Parse                                               29.0 ± 0%      29.0 ± 0%     ~     (all equal)
Phases/kv-read/Simple/OptBuildNoNorm                                      74.0 ± 0%      74.0 ± 0%     ~     (all equal)
Phases/kv-read/Simple/OptBuildNorm                                        77.0 ± 0%      77.0 ± 0%     ~     (all equal)
Phases/kv-read/Simple/Explore                                             84.0 ± 0%      84.0 ± 0%     ~     (all equal)
Phases/kv-read/Simple/ExecBuild                                           89.0 ± 0%      89.0 ± 0%     ~     (all equal)
Phases/kv-read/Prepared/ExecBuild                                         9.00 ± 0%      9.00 ± 0%     ~     (all equal)
Phases/kv-read-const/Simple/Parse                                         29.0 ± 0%      29.0 ± 0%     ~     (all equal)
Phases/kv-read-const/Simple/OptBuildNoNorm                                74.0 ± 0%      74.0 ± 0%     ~     (all equal)
Phases/kv-read-const/Simple/OptBuildNorm                                  77.0 ± 0%      77.0 ± 0%     ~     (all equal)
Phases/kv-read-const/Simple/Explore                                       84.0 ± 0%      84.0 ± 0%     ~     (all equal)
Phases/kv-read-const/Simple/ExecBuild                                     89.0 ± 0%      89.0 ± 0%     ~     (all equal)
Phases/kv-read-const/Prepared/ExecBuild                                   6.00 ± 0%      6.00 ± 0%     ~     (all equal)
Phases/tpcc-new-order/Simple/Parse                                        39.0 ± 0%      39.0 ± 0%     ~     (all equal)
Phases/tpcc-new-order/Simple/OptBuildNoNorm                                112 ± 0%       112 ± 0%     ~     (all equal)
Phases/tpcc-new-order/Simple/OptBuildNorm                                  128 ± 0%       128 ± 0%     ~     (all equal)
Phases/tpcc-new-order/Simple/Explore                                       156 ± 0%       156 ± 0%     ~     (all equal)
Phases/tpcc-new-order/Simple/ExecBuild                                     162 ± 0%       162 ± 0%     ~     (all equal)
Phases/tpcc-new-order/Prepared/ExecBuild                                  9.00 ± 0%      9.00 ± 0%     ~     (all equal)
Phases/tpcc-delivery/Simple/Parse                                         35.0 ± 0%      35.0 ± 0%     ~     (all equal)
Phases/tpcc-delivery/Simple/OptBuildNoNorm                                 102 ± 0%       102 ± 0%     ~     (all equal)
Phases/tpcc-delivery/Simple/OptBuildNorm                                   119 ± 0%       119 ± 0%     ~     (all equal)
Phases/tpcc-delivery/Simple/Explore                                        158 ± 0%       158 ± 0%     ~     (all equal)
Phases/tpcc-delivery/Simple/ExecBuild                                      164 ± 0%       164 ± 0%     ~     (all equal)
Phases/tpcc-delivery/Prepared/AssignPlaceholdersNoNorm                    27.0 ± 0%      27.0 ± 0%     ~     (all equal)
Phases/tpcc-delivery/Prepared/AssignPlaceholdersNorm                      27.0 ± 0%      27.0 ± 0%     ~     (all equal)
Phases/tpcc-delivery/Prepared/Explore                                     67.0 ± 0%      67.0 ± 0%     ~     (all equal)
Phases/tpcc-delivery/Prepared/ExecBuild                                   73.0 ± 0%      73.0 ± 0%     ~     (all equal)
Phases/tpcc-stock-level/Simple/Parse                                      59.0 ± 0%      59.0 ± 0%     ~     (all equal)
Phases/tpcc-stock-level/Simple/OptBuildNoNorm                              291 ± 0%       291 ± 0%     ~     (all equal)
Phases/tpcc-stock-level/Simple/OptBuildNorm                                493 ± 0%       493 ± 0%     ~     (all equal)
Phases/tpcc-stock-level/Simple/Explore                                     617 ± 0%       617 ± 0%     ~     (all equal)
Phases/tpcc-stock-level/Simple/ExecBuild                                   635 ± 0%       635 ± 0%     ~     (all equal)
Phases/tpcc-stock-level/Prepared/AssignPlaceholdersNoNorm                  106 ± 0%       106 ± 0%     ~     (all equal)
Phases/tpcc-stock-level/Prepared/AssignPlaceholdersNorm                    105 ± 0%       105 ± 0%     ~     (all equal)
Phases/tpcc-stock-level/Prepared/Explore                                   229 ± 0%       229 ± 0%     ~     (all equal)
Phases/tpcc-stock-level/Prepared/ExecBuild                                 247 ± 0%       247 ± 0%     ~     (all equal)
Phases/many-columns-and-indexes-a/Simple/Parse                            21.0 ± 0%      21.0 ± 0%     ~     (all equal)
Phases/many-columns-and-indexes-a/Simple/OptBuildNoNorm                   62.0 ± 0%      62.0 ± 0%     ~     (all equal)
Phases/many-columns-and-indexes-a/Simple/OptBuildNorm                     69.0 ± 0%      69.0 ± 0%     ~     (all equal)
Phases/many-columns-and-indexes-a/Simple/Explore                          71.0 ± 0%      71.0 ± 0%     ~     (all equal)
Phases/many-columns-and-indexes-a/Simple/ExecBuild                        80.0 ± 0%      80.0 ± 0%     ~     (all equal)
Phases/many-columns-and-indexes-a/Prepared/AssignPlaceholdersNoNorm       21.0 ± 0%      21.0 ± 0%     ~     (all equal)
Phases/many-columns-and-indexes-a/Prepared/AssignPlaceholdersNorm         21.0 ± 0%      21.0 ± 0%     ~     (all equal)
Phases/many-columns-and-indexes-a/Prepared/Explore                        23.0 ± 0%      23.0 ± 0%     ~     (all equal)
Phases/many-columns-and-indexes-a/Prepared/ExecBuild                      32.0 ± 0%      32.0 ± 0%     ~     (all equal)
Phases/many-columns-and-indexes-b/Simple/Parse                            30.0 ± 0%      30.0 ± 0%     ~     (all equal)
Phases/many-columns-and-indexes-b/Simple/OptBuildNoNorm                    109 ± 0%       109 ± 0%     ~     (all equal)
Phases/many-columns-and-indexes-b/Simple/OptBuildNorm                      128 ± 0%       128 ± 0%     ~     (all equal)
Phases/many-columns-and-indexes-b/Simple/Explore                           130 ± 0%       130 ± 0%     ~     (all equal)
Phases/many-columns-and-indexes-b/Simple/ExecBuild                         143 ± 0%       143 ± 0%     ~     (all equal)
Phases/many-columns-and-indexes-b/Prepared/AssignPlaceholdersNoNorm       36.0 ± 0%      36.0 ± 0%     ~     (all equal)
Phases/many-columns-and-indexes-b/Prepared/AssignPlaceholdersNorm         36.0 ± 0%      36.0 ± 0%     ~     (all equal)
Phases/many-columns-and-indexes-b/Prepared/Explore                        38.0 ± 0%      38.0 ± 0%     ~     (all equal)
Phases/many-columns-and-indexes-b/Prepared/ExecBuild                      51.0 ± 0%      51.0 ± 0%     ~     (all equal)
Phases/ored-preds-100/Simple/Parse                                         823 ± 0%       823 ± 0%     ~     (all equal)
Phases/ored-preds-100/Simple/OptBuildNoNorm                              4.08k ± 0%     4.08k ± 0%     ~     (all equal)
Phases/ored-preds-100/Simple/OptBuildNorm                                4.08k ± 0%     4.08k ± 0%     ~     (all equal)
Phases/ored-preds-100/Simple/Explore                                     5.52k ± 0%     5.52k ± 0%     ~     (p=1.000 n=5+5)
Phases/ored-preds-100/Simple/ExecBuild                                   5.93k ± 0%     5.93k ± 0%     ~     (p=0.333 n=5+4)
Phases/ored-preds-100/Prepared/ExecBuild                                   413 ± 0%       413 ± 0%     ~     (all equal)
Phases/ored-preds-using-params-100/Simple/Parse                            823 ± 0%       823 ± 0%     ~     (all equal)
Phases/ored-preds-using-params-100/Simple/OptBuildNoNorm                 4.08k ± 0%     4.08k ± 0%     ~     (p=0.444 n=5+5)
Phases/ored-preds-using-params-100/Simple/OptBuildNorm                   4.08k ± 0%     4.08k ± 0%     ~     (all equal)
Phases/ored-preds-using-params-100/Simple/Explore                        5.52k ± 0%     5.52k ± 0%     ~     (p=0.095 n=5+4)
Phases/ored-preds-using-params-100/Simple/ExecBuild                      5.93k ± 0%     5.93k ± 0%     ~     (all equal)
Phases/ored-preds-using-params-100/Prepared/AssignPlaceholdersNoNorm     1.44k ± 0%     1.44k ± 0%     ~     (all equal)
Phases/ored-preds-using-params-100/Prepared/AssignPlaceholdersNorm       1.44k ± 0%     1.44k ± 0%     ~     (all equal)
Phases/ored-preds-using-params-100/Prepared/Explore                      2.88k ± 0%     2.88k ± 0%     ~     (all equal)
Phases/ored-preds-using-params-100/Prepared/ExecBuild                    3.29k ± 0%     3.29k ± 0%     ~     (all equal)
Chain/chain-1                                                             44.0 ± 0%      44.0 ± 0%     ~     (all equal)
Chain/chain-2                                                              176 ± 0%       176 ± 0%     ~     (all equal)
Chain/chain-3                                                              336 ± 0%       336 ± 0%     ~     (all equal)
Chain/chain-4                                                              487 ± 0%       487 ± 0%     ~     (all equal)
Chain/chain-5                                                              650 ± 0%       650 ± 0%     ~     (p=0.333 n=5+4)
Chain/chain-6                                                              818 ± 0%       818 ± 0%     ~     (all equal)
Chain/chain-7                                                            0.99k ± 0%     0.99k ± 0%     ~     (all equal)
Chain/chain-8                                                            1.18k ± 0%     1.18k ± 0%     ~     (all equal)
Chain/chain-9                                                            1.38k ± 0%     1.38k ± 0%     ~     (p=1.000 n=5+5)
Chain/chain-10                                                           1.58k ± 0%     1.58k ± 0%     ~     (all equal)
Chain/chain-11                                                           1.77k ± 0%     1.77k ± 0%     ~     (all equal)
Chain/chain-12                                                           1.98k ± 0%     1.98k ± 0%     ~     (p=1.000 n=4+5)
Chain/chain-13                                                           2.19k ± 0%     2.19k ± 0%     ~     (all equal)
Chain/chain-14                                                           2.43k ± 0%     2.43k ± 0%     ~     (p=0.444 n=5+5)
Chain/chain-15                                                           2.66k ± 0%     2.66k ± 0%     ~     (p=0.079 n=4+5)
Chain/chain-16                                                           2.89k ± 0%     2.89k ± 0%   +0.07%  (p=0.024 n=5+5)
Chain/chain-17                                                           6.41k ± 0%     3.12k ± 0%  -51.34%  (p=0.008 n=5+5)
Chain/chain-18                                                           8.08k ± 0%     3.35k ± 0%  -58.50%  (p=0.000 n=4+5)
Chain/chain-19                                                           9.78k ± 0%     3.59k ± 0%  -63.25%  (p=0.008 n=5+5)
EndToEnd/kv-read/Simple                                                    292 ± 0%       292 ± 1%     ~     (p=1.000 n=4+5)
EndToEnd/kv-read/Prepared                                                  221 ± 2%       221 ± 1%     ~     (p=0.921 n=5+5)
EndToEnd/kv-read-const/Simple                                              227 ± 0%       227 ± 0%     ~     (p=1.000 n=5+5)
EndToEnd/kv-read-const/Prepared                                            211 ± 0%       212 ± 1%     ~     (p=1.000 n=5+5)
EndToEnd/tpcc-new-order/Simple                                             342 ± 2%       349 ± 7%     ~     (p=0.643 n=5+5)
EndToEnd/tpcc-new-order/Prepared                                           257 ± 0%       257 ± 0%     ~     (p=1.000 n=4+4)
EndToEnd/tpcc-delivery/Simple                                              384 ± 0%       386 ± 2%     ~     (p=1.000 n=5+5)
EndToEnd/tpcc-delivery/Prepared                                            306 ± 0%       306 ± 0%     ~     (p=1.000 n=4+4)
EndToEnd/tpcc-stock-level/Simple                                           977 ± 0%       977 ± 0%     ~     (p=0.825 n=4+5)
EndToEnd/tpcc-stock-level/Prepared                                         872 ± 0%       873 ± 0%     ~     (p=0.556 n=5+4)
EndToEnd/many-columns-and-indexes-a/Simple                                 378 ± 0%       379 ± 0%     ~     (p=0.486 n=4+4)
EndToEnd/many-columns-and-indexes-a/Prepared                               319 ± 4%       315 ± 0%     ~     (p=0.317 n=5+4)
EndToEnd/many-columns-and-indexes-b/Simple                                 429 ± 0%       430 ± 0%     ~     (p=0.119 n=5+5)
EndToEnd/many-columns-and-indexes-b/Prepared                               360 ± 4%       361 ± 5%     ~     (p=0.587 n=5+5)
EndToEnd/ored-preds-100/Simple                                           4.93k ± 0%     4.93k ± 0%     ~     (p=0.914 n=4+4)
EndToEnd/ored-preds-100/Prepared                                         4.12k ± 0%     4.12k ± 0%     ~     (p=0.730 n=5+5)
EndToEnd/ored-preds-using-params-100/Simple                              8.20k ± 0%     8.20k ± 0%     ~     (p=0.143 n=5+4)
EndToEnd/ored-preds-using-params-100/Prepared                            7.33k ± 1%     7.31k ± 0%     ~     (p=0.381 n=5+4)
FKInsert/SingleRow/None                                                    566 ± 0%       567 ± 0%     ~     (p=0.365 n=5+5)
FKInsert/SingleRow/NoFastPath                                              896 ± 0%       894 ± 0%     ~     (p=0.397 n=5+5)
FKInsert/SingleRow/FastPath                                                440 ± 0%       441 ± 0%     ~     (p=0.167 n=5+5)
FKInsert/MultiRowSingleParent/None                                       1.69k ± 0%     1.69k ± 0%     ~     (p=0.556 n=5+4)
FKInsert/MultiRowSingleParent/NoFastPath                                 1.90k ± 0%     1.90k ± 0%     ~     (p=0.810 n=5+5)
FKInsert/MultiRowSingleParent/FastPath                                     993 ± 0%       994 ± 0%     ~     (p=0.429 n=4+4)
FKInsert/MultiRowMultiParent/None                                        1.67k ± 0%     1.67k ± 0%     ~     (p=0.841 n=5+5)
FKInsert/MultiRowMultiParent/NoFastPath                                  2.04k ± 0%     2.04k ± 0%     ~     (p=0.286 n=5+5)
FKInsert/MultiRowMultiParent/FastPath                                    1.17k ± 0%     1.17k ± 0%     ~     (p=0.667 n=5+4)

@RaduBerinde RaduBerinde changed the title util: support 128 FastIntSet elements without allocation + misc fixes util: support 128 FastIntSet elements without allocation Dec 10, 2021
@mgartner
Copy link
Collaborator

Again, we see some regression in benchmarks that don't even use FastIntSets (like Parse).

The worst latency regressions are ops that take < 1ms. And the tests that use between 64 and 128 column IDs show a nice improvement:

name                                                                  old time/op    new time/op    delta
Chain/chain-19                                                          8.06ms ± 1%    5.50ms ± 1%  -31.80%

name                                                                  old alloc/op   new alloc/op   delta
Chain/chain-19                                                          1.61MB ± 0%    1.41MB ± 0%  -12.05%

name                                                                  old allocs/op  new allocs/op  delta
Chain/chain-19                                                           9.78k ± 0%     3.59k ± 0%  -63.25%

Maybe the regressions are acceptable?

@RaduBerinde
Copy link
Member Author

Yes, I agree, the regressions seem more like a benchmarking artifact rather than something concerning. I would like to merge this if folks agree.

@RaduBerinde RaduBerinde removed the do-not-merge bors won't merge a PR with this label. label Dec 14, 2021
Copy link
Collaborator

@mgartner mgartner left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:lgtm:

Reviewed 8 of 17 files at r13, 5 of 10 files at r15, 1 of 1 files at r16, all commit messages.
Reviewable status: :shipit: complete! 1 of 0 LGTMs obtained (and 1 stale) (waiting on @cucaroach, @nvanbenschoten, and @RaduBerinde)


pkg/util/fast_int_set.go, line 181 at r16 (raw file):

		f(64 + i)
		v &^= 1 << uint(i)
	}

nit: You've abstracted all the bit manipulation into bitmap methods elsewhere, so to follow that pattern you could move these loops into a bitmap.ForEach method.


pkg/util/fast_int_set_testonly.go, line 34 at r16 (raw file):

type FastIntSet struct {
	// Used to keep the size of the struct the same.
	_ [2]uint64

nit: Doesn't make a difference in the size, but using _ struct{ lo, hi uint64 } instead might be more clear to someone who comes along in the future.

This commit increases the size of the "small set" bitmap from 64 bits
to 128 bits. The main goal is to avoid the slow path in optimizer
ColSets for more queries.

Fixes cockroachdb#72733.

Release note: None
Copy link
Member Author

@RaduBerinde RaduBerinde left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewable status: :shipit: complete! 1 of 0 LGTMs obtained (and 1 stale) (waiting on @cucaroach and @nvanbenschoten)


pkg/util/fast_int_set.go, line 181 at r16 (raw file):

Previously, mgartner (Marcus Gartner) wrote…

nit: You've abstracted all the bit manipulation into bitmap methods elsewhere, so to follow that pattern you could move these loops into a bitmap.ForEach method.

I'm mildly worried that it might reduce inlining, I'd want to run all the benchmarks again so I'd rather keep it as is.

Copy link
Collaborator

@mgartner mgartner left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed 3 of 3 files at r17, all commit messages.
Reviewable status: :shipit: complete! 0 of 0 LGTMs obtained (and 2 stale) (waiting on @cucaroach and @nvanbenschoten)


pkg/util/fast_int_set.go, line 181 at r16 (raw file):

Previously, RaduBerinde wrote…

I'm mildly worried that it might reduce inlining, I'd want to run all the benchmarks again so I'd rather keep it as is.

Make sense. No need to go through the trouble of re-running benchmarks.

@RaduBerinde
Copy link
Member Author

TFTR!

bors r+

@craig
Copy link
Contributor

craig bot commented Dec 14, 2021

Build succeeded:

@craig craig bot merged commit a60e8d7 into cockroachdb:master Dec 14, 2021
@RaduBerinde RaduBerinde deleted the fast-int-set-128 branch December 16, 2021 01:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[experiment] sql: increase size of FastIntSet's stack-allocated segment
4 participants