summaryrefslogtreecommitdiff
path: root/storage/xtradb
diff options
context:
space:
mode:
authorJan Lindström <jplindst@mariadb.org>2014-11-25 08:31:03 +0200
committerJan Lindström <jplindst@mariadb.org>2014-11-25 08:31:03 +0200
commitb62c4c6586435ed0b1428145acac5e648d63f8bb (patch)
tree7eb78c1d4511083a9f15557bec001ead3991b901 /storage/xtradb
parent77a6abf31141f227202c78e88c7989e5946fa470 (diff)
parente5802c38f9fc9329276ac9096c10a8176a283cf9 (diff)
downloadmariadb-git-b62c4c6586435ed0b1428145acac5e648d63f8bb.tar.gz
Better comments and add a test case.
Diffstat (limited to 'storage/xtradb')
-rw-r--r--storage/xtradb/btr/btr0cur.cc20
1 files changed, 14 insertions, 6 deletions
diff --git a/storage/xtradb/btr/btr0cur.cc b/storage/xtradb/btr/btr0cur.cc
index 64f813f282d..2bc1a7de13c 100644
--- a/storage/xtradb/btr/btr0cur.cc
+++ b/storage/xtradb/btr/btr0cur.cc
@@ -4095,18 +4095,26 @@ btr_estimate_number_of_different_key_vals(
n_sample_pages = srv_stats_transient_sample_pages;
}
} else {
- /* New logaritmic number of pages that are estimated. We
- first pick minimun from srv_stats_transient_sample_pages and number of
- pages on index. Then we pick maximum from previous number of
- pages and log2(number of index pages) * srv_stats_transient_sample_pages. */
+ /* New logaritmic number of pages that are estimated.
+ Number of pages estimated should be between 1 and
+ index->stat_index_size. We pick index->stat_index_size
+ as maximum and log2(index->stat_index_size)*sr_stats_transient_sample_pages
+ if between range as minimum.*/
+
if (index->stat_index_size > 0) {
- n_sample_pages = ut_max(ut_min(srv_stats_transient_sample_pages, index->stat_index_size),
- log2(index->stat_index_size)*srv_stats_transient_sample_pages);
+ n_sample_pages = ut_min(index->stat_index_size,
+ ut_max(ut_min(srv_stats_transient_sample_pages,
+ index->stat_index_size),
+ log2(index->stat_index_size)
+ *srv_stats_transient_sample_pages));
} else {
n_sample_pages = 1;
}
}
+ /* Sanity check */
+ ut_ad(n_sample_pages > 0 && n_sample_pages <= (index->stat_index_size < 1 ? 1 : index->stat_index_size));
+
/* We sample some pages in the index to get an estimate */
for (i = 0; i < n_sample_pages; i++) {