Merged PRs
dolt
- 8162: Better error message when attempting to push from a shallow clone
Push from a shallow clone is possible, but we should message better when it's not possible. In order to do this we need to error better from the Generational Chunk Store with a custom error.
Fixes: #8156 - 8158: fix no-op merge msg in cli
Fixes: #8148 - 8154: When removing from a secondary index during merging, use the pre-merge ordinal mapping, not the merged mapping, to identify the secondary key to be removed.
Basically, we have a bug where dropping a column on the remote side of a merge can interfere with updating secondary indexes.
Example:
Base Schema: (pk INT PRIMARY KEY, a TINYINT, b INT, UNIQUE KEY b_idx (b))
"theirs" drops column a
Merged Schema: (pk INT PRIMARY KEY, b INT, UNIQUE KEY b_idx (b))
In effect, the merger would see that in the final table,b
is the second column. Then, when updatingb_idx
for each resolved row, it would use the second column of "ours" to find the index entry to remove. But this is incorrect, because the second column of "ours" isa
.
If the user is lucky, these two columns will be different sizes and the merger will panic. But if the two columns are the same size, merge proceeds with an incorrect value. This will cause it to either fail to remove the old row from the secondary index, or remove a different row. Either way, the secondary index is now incorrect. - 8150: fix warnings in dolt sql shell
This PR fixes a bug where warnings were incorrectly being suppressed in the dolt sql shell.
The bug is caused by the shell making queries to check if the working set is dirty, what database we're on, and what branch we're on. The fix is to set a special flag in the session to not clear the warnings for those specific queries.
companion pr: dolthub/go-mysql-server#2605
fixes: #8016 - 8124: [stats] limit stats boostrap to server start
fixes: #8123
go-mysql-server
- 2606: [memo] assume self-join stats cardinality continuity
Self-join stats estimation is particularly expensive because all of the buckets exactly overlap. If the index is unique, the cardinality distribution will not change. If the index is non-unique, the cardinality will expand proportional torowCount/distinctCount
.
sysbench perf here: #8159before BenchmarkOltpJoinScan-12 1766 694524 ns/op 462834 B/op 8240 allocs/op after BenchmarkOltpJoinScan-12 2460 481166 ns/op 193569 B/op 7129 allocs/op
- 2605: add lock to prevent warnings from being cleared
This PR adds two functions to BaseSession that toggle a boolean, so integrators can prevent warnings from being cleared.
This is mostly useful fordolt sql shell
.
addresses #8016
Closed Issues
- 8123: stats refresh warning a little too zealous
- 8156: Unknown push Error When Pushing Large DB to Remote
- 8016:
dolt sql
suppresses warnings. - 8148: Ghost Commit Error On Empty Merge
- 7638: Syntax Error Occurs When Using AS Clause with ON DUPLICATE KEY UPDATE
Performance
Read Tests | MySQL | Dolt | Multiple |
---|---|---|---|
covering_index_scan | 2.11 | 2.97 | 1.4 |
groupby_scan | 13.46 | 17.32 | 1.3 |
index_join | 1.37 | 2.81 | 2.1 |
index_join_scan | 1.3 | 2.22 | 1.7 |
index_scan | 34.33 | 53.85 | 1.6 |
oltp_point_select | 0.18 | 0.46 | 2.6 |
oltp_read_only | 3.49 | 7.7 | 2.2 |
select_random_points | 0.34 | 0.77 | 2.3 |
select_random_ranges | 0.39 | 0.89 | 2.3 |
table_scan | 34.33 | 54.83 | 1.6 |
types_table_scan | 74.46 | 142.39 | 1.9 |
reads_mean_multiplier | 1.9 |
Write Tests | MySQL | Dolt | Multiple |
---|---|---|---|
oltp_delete_insert | 8.13 | 6.09 | 0.7 |
oltp_insert | 3.82 | 3.02 | 0.8 |
oltp_read_write | 8.58 | 13.95 | 1.6 |
oltp_update_index | 3.82 | 3.07 | 0.8 |
oltp_update_non_index | 3.89 | 3.02 | 0.8 |
oltp_write_only | 5.37 | 6.43 | 1.2 |
types_delete_insert | 7.7 | 6.67 | 0.9 |
writes_mean_multiplier | 1.0 |
TPC-C TPS Tests | MySQL | Dolt | Multiple |
---|---|---|---|
tpcc-scale-factor-1 | 99.43 | 34.46 | 2.9 |
tpcc_tps_multiplier | 2.9 |
Overall Mean Multiple | 1.93 |
---|