| Commit message (Collapse) | Author | Age | Files | Lines |
|\ |
|
| | |
|
| |
| |
| |
| | |
MTR still uses JSON_HB as the default.
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
In Histogram_json_hb::point_selectivity(), do return selectivity of 0.0
when the histogram says so.
The logic of "Do not return 0.0 estimate as it causes a multiply-by-zero
meltdown in cost and cardinality calculations" is moved into
records_in_column_ranges() where it is one *once* per column pair (as
opposed to doing once per range, which can cause the error to add-up
to large number when there are many ranges)
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Followup: remove this line from get_column_range_cardinality()
set_if_bigger(res, col_stats->get_avg_frequency());
and make sure it is only used with the binary histograms.
For JSON histograms, it makes the estimates unnecessarily imprecise.
|
| |
| |
| |
| | |
Added a testcase
|
| |
| |
| |
| | |
Fix special handling for values that are right next to buckets with ndv=1.
|
| | |
|
| |
| |
| |
| |
| | |
Fix the code in Histogram_json_hb::range_selectivity that handles
special cases: a non-inclusive endpoint hitting a bucket boundary...
|
| |
| |
| |
| | |
In read_bucket_endpoint(), handle all possible parser states.
|
| |
| |
| |
| | |
Encode such characters in hex.
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| | |
Save extra information in the histogram:
"target_histogram_size": nnn,
"collected_at": "(date and time)",
"collected_by": "(server version)",
|
| |
| |
| |
| |
| |
| |
| |
| | |
Also report JSON histogram load errors into error log, like it is already
done with other histogram/statistics load errors.
Add test coverage to see what happens if one upgrades but does NOT run
mysql_upgrade.
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| | |
Previous JSON parser was using an API which made the parsing
inefficient: the same JSON contents was parsed again and again.
Switch to using a lower-level parsing API which allows to do
parsing in an efficient way.
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| | |
- Make Histogram_json_hb::range_selectivity handle singleton buckets
specially when computing selectivity of the max. endpoint bound.
(for min. endpoint, we already do that).
- Also, fixed comments for Histogram_json_hb::find_bucket
|
| |
| |
| |
| |
| |
| |
| |
| | |
When loading the histogram, use table->field[N], not table->s->field[N].
When we used the latter we would corrupt the fields's default value. One
of the consequences of that would be that AUTO_INCREMENT fields would
stop working correctly.
|
| |
| |
| |
| |
| | |
Handle the case where the last value in the table cannot be represented
in utf8mb4.
|
| |
| |
| |
| |
| |
| | |
.. for non-existent values.
Handle this special case.
|
| |
| |
| |
| |
| | |
Fix a bug in position_in_interval(). Do not overwrite one interval endpoint
with another.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The problem was introduced in fix for MDEV-26724. That patch has made it
possible for histogram collection to fail. In particular, it fails for
non-assigned characters.
When histogram construction fails, we also abort the computation of
COUNT(DISTINCT). When we try to use the value, we get valgrind failures.
Switched the code to abort the statistics collection in this case.
|
| |
| |
| |
| |
| | |
When computing bucket_capacity= records/histogram->get_width(), round
the value UP, not down.
|
| |
| |
| |
| |
| |
| |
| | |
Part#3:
- make json_escape() return different errors on conversion error
and on out-of-space condition.
- Make histogram code handle conversion errors.
|
| | |
|
| |
| |
| |
| | |
Fix the description
|
| |
| |
| |
| |
| |
| | |
Change it to LONGBLOB.
Also, update_statistics_for_table() should not "swallow" an error
from open_stat_tables.
|
| |
| |
| |
| | |
.. part#2: correctly pass the charset to JSON [un]escape functions
|
| |
| |
| |
| |
| |
| | |
Histogram_json_hb::range_selectivity
Add testcase
|
| |
| |
| |
| |
| | |
Item_func_decode_histogram::val_str should correctly set null_value
when "decoding" JSON histogram.
|
| |
| |
| |
| | |
Correctly handle empty string when [un]escaping JSON
|
| |
| |
| |
| | |
Escape values when serializing to JSON. Un-escape when reading back.
|
| | |
|
| |
| |
| |
| | |
Do not put Histogram objects on MEM_ROOT at all
|
| | |
|
| |
| |
| |
| | |
Provide buffer of sufficient size.
|
| | |
|
| | |
|
| | |
|
| |
| |
| |
| | |
Aslo add more test coverage
|
| |
| |
| |
| |
| |
| |
| | |
- Use String::c_ptr_safe() instead of String::c_ptr
- Do proper datatype conversions in Histogram_json_hb::parse
- Remove Histogram_json_hb::Bucket::end_value. Introduce
get_end_value() instead.
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Basic ideas:
1. Store "popular" values in their own buckets.
2. Also store ndv (Number of Distinct Values) in each bucket.
Because of #1, the buckets are now variable-size, so store the size in
each bucket.
Adjust selectivity estimation functions accordingly.
|
| | |
|
| | |
|
| |
| |
| |
| |
| |
| | |
- Fix bad tests in statistics_json test: make them meaningful and make them
work on windows
- Fix analyze_debug.test: correctly handle errors during ANALYZE
|
| | |
|
| | |
|