mirror of
https://github.com/MariaDB/server.git
synced 2025-02-01 11:31:51 +01:00
branches/innodb+:
Fix Bug#25640: Introduce an user visible parameter innodb_stats_sample (default 8, min 1, max 1000) and use that parameter instead of the BTR_KEY_VAL_ESTIMATE_N_PAGES macro. Remove this macro. Approved by: Heikki
This commit is contained in:
parent
0ee3946c84
commit
70684a3dc8
4 changed files with 25 additions and 13 deletions
|
@ -55,10 +55,6 @@ can be released by page reorganize, then it is reorganized */
|
||||||
|
|
||||||
#define BTR_CUR_PAGE_REORGANIZE_LIMIT (UNIV_PAGE_SIZE / 32)
|
#define BTR_CUR_PAGE_REORGANIZE_LIMIT (UNIV_PAGE_SIZE / 32)
|
||||||
|
|
||||||
/* When estimating number of different key values in an index, sample
|
|
||||||
this many index pages */
|
|
||||||
#define BTR_KEY_VAL_ESTIMATE_N_PAGES 8
|
|
||||||
|
|
||||||
/* The structure of a BLOB part header */
|
/* The structure of a BLOB part header */
|
||||||
/*--------------------------------------*/
|
/*--------------------------------------*/
|
||||||
#define BTR_BLOB_HDR_PART_LEN 0 /* BLOB part len on this
|
#define BTR_BLOB_HDR_PART_LEN 0 /* BLOB part len on this
|
||||||
|
@ -3174,7 +3170,7 @@ btr_estimate_number_of_different_key_vals(
|
||||||
|
|
||||||
/* We sample some pages in the index to get an estimate */
|
/* We sample some pages in the index to get an estimate */
|
||||||
|
|
||||||
for (i = 0; i < BTR_KEY_VAL_ESTIMATE_N_PAGES; i++) {
|
for (i = 0; i < srv_stats_sample; i++) {
|
||||||
rec_t* supremum;
|
rec_t* supremum;
|
||||||
mtr_start(&mtr);
|
mtr_start(&mtr);
|
||||||
|
|
||||||
|
@ -3263,7 +3259,7 @@ btr_estimate_number_of_different_key_vals(
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If we saw k borders between different key values on
|
/* If we saw k borders between different key values on
|
||||||
BTR_KEY_VAL_ESTIMATE_N_PAGES leaf pages, we can estimate how many
|
srv_stats_sample leaf pages, we can estimate how many
|
||||||
there will be in index->stat_n_leaf_pages */
|
there will be in index->stat_n_leaf_pages */
|
||||||
|
|
||||||
/* We must take into account that our sample actually represents
|
/* We must take into account that our sample actually represents
|
||||||
|
@ -3274,26 +3270,26 @@ btr_estimate_number_of_different_key_vals(
|
||||||
index->stat_n_diff_key_vals[j]
|
index->stat_n_diff_key_vals[j]
|
||||||
= ((n_diff[j]
|
= ((n_diff[j]
|
||||||
* (ib_longlong)index->stat_n_leaf_pages
|
* (ib_longlong)index->stat_n_leaf_pages
|
||||||
+ BTR_KEY_VAL_ESTIMATE_N_PAGES - 1
|
+ srv_stats_sample - 1
|
||||||
+ total_external_size
|
+ total_external_size
|
||||||
+ not_empty_flag)
|
+ not_empty_flag)
|
||||||
/ (BTR_KEY_VAL_ESTIMATE_N_PAGES
|
/ (srv_stats_sample
|
||||||
+ total_external_size));
|
+ total_external_size));
|
||||||
|
|
||||||
/* If the tree is small, smaller than
|
/* If the tree is small, smaller than
|
||||||
10 * BTR_KEY_VAL_ESTIMATE_N_PAGES + total_external_size, then
|
10 * srv_stats_sample + total_external_size, then
|
||||||
the above estimate is ok. For bigger trees it is common that we
|
the above estimate is ok. For bigger trees it is common that we
|
||||||
do not see any borders between key values in the few pages
|
do not see any borders between key values in the few pages
|
||||||
we pick. But still there may be BTR_KEY_VAL_ESTIMATE_N_PAGES
|
we pick. But still there may be srv_stats_sample
|
||||||
different key values, or even more. Let us try to approximate
|
different key values, or even more. Let us try to approximate
|
||||||
that: */
|
that: */
|
||||||
|
|
||||||
add_on = index->stat_n_leaf_pages
|
add_on = index->stat_n_leaf_pages
|
||||||
/ (10 * (BTR_KEY_VAL_ESTIMATE_N_PAGES
|
/ (10 * (srv_stats_sample
|
||||||
+ total_external_size));
|
+ total_external_size));
|
||||||
|
|
||||||
if (add_on > BTR_KEY_VAL_ESTIMATE_N_PAGES) {
|
if (add_on > srv_stats_sample) {
|
||||||
add_on = BTR_KEY_VAL_ESTIMATE_N_PAGES;
|
add_on = srv_stats_sample;
|
||||||
}
|
}
|
||||||
|
|
||||||
index->stat_n_diff_key_vals[j] += add_on;
|
index->stat_n_diff_key_vals[j] += add_on;
|
||||||
|
|
|
@ -8420,6 +8420,12 @@ static MYSQL_SYSVAR_LONG(open_files, innobase_open_files,
|
||||||
"How many files at the maximum InnoDB keeps open at the same time.",
|
"How many files at the maximum InnoDB keeps open at the same time.",
|
||||||
NULL, NULL, 300L, 10L, ~0L, 0);
|
NULL, NULL, 300L, 10L, ~0L, 0);
|
||||||
|
|
||||||
|
static MYSQL_SYSVAR_ULONG(stats_sample, srv_stats_sample,
|
||||||
|
PLUGIN_VAR_OPCMDARG,
|
||||||
|
"When estimating number of different key values in an index, sample "
|
||||||
|
"this many index pages",
|
||||||
|
NULL, NULL, SRV_STATS_SAMPLE_DEFAULT, 1, 1000, 0);
|
||||||
|
|
||||||
static MYSQL_SYSVAR_ULONG(sync_spin_loops, srv_n_spin_wait_rounds,
|
static MYSQL_SYSVAR_ULONG(sync_spin_loops, srv_n_spin_wait_rounds,
|
||||||
PLUGIN_VAR_RQCMDARG,
|
PLUGIN_VAR_RQCMDARG,
|
||||||
"Count of spin-loop rounds in InnoDB mutexes",
|
"Count of spin-loop rounds in InnoDB mutexes",
|
||||||
|
@ -8486,6 +8492,7 @@ static struct st_mysql_sys_var* innobase_system_variables[]= {
|
||||||
MYSQL_SYSVAR(stats_on_metadata),
|
MYSQL_SYSVAR(stats_on_metadata),
|
||||||
MYSQL_SYSVAR(adaptive_hash_index),
|
MYSQL_SYSVAR(adaptive_hash_index),
|
||||||
MYSQL_SYSVAR(replication_delay),
|
MYSQL_SYSVAR(replication_delay),
|
||||||
|
MYSQL_SYSVAR(stats_sample),
|
||||||
MYSQL_SYSVAR(status_file),
|
MYSQL_SYSVAR(status_file),
|
||||||
MYSQL_SYSVAR(support_xa),
|
MYSQL_SYSVAR(support_xa),
|
||||||
MYSQL_SYSVAR(sync_spin_loops),
|
MYSQL_SYSVAR(sync_spin_loops),
|
||||||
|
|
|
@ -128,6 +128,11 @@ extern ibool srv_innodb_status;
|
||||||
|
|
||||||
extern ibool srv_stats_on_metadata;
|
extern ibool srv_stats_on_metadata;
|
||||||
|
|
||||||
|
/* When estimating number of different key values in an index, sample
|
||||||
|
this many index pages */
|
||||||
|
#define SRV_STATS_SAMPLE_DEFAULT 8
|
||||||
|
extern ulong srv_stats_sample;
|
||||||
|
|
||||||
extern ibool srv_use_doublewrite_buf;
|
extern ibool srv_use_doublewrite_buf;
|
||||||
extern ibool srv_use_checksums;
|
extern ibool srv_use_checksums;
|
||||||
|
|
||||||
|
|
|
@ -291,6 +291,10 @@ UNIV_INTERN ibool srv_innodb_status = FALSE;
|
||||||
|
|
||||||
UNIV_INTERN ibool srv_stats_on_metadata = TRUE;
|
UNIV_INTERN ibool srv_stats_on_metadata = TRUE;
|
||||||
|
|
||||||
|
/* When estimating number of different key values in an index, sample
|
||||||
|
this many index pages */
|
||||||
|
UNIV_INTERN ulong srv_stats_sample = SRV_STATS_SAMPLE_DEFAULT;
|
||||||
|
|
||||||
UNIV_INTERN ibool srv_use_doublewrite_buf = TRUE;
|
UNIV_INTERN ibool srv_use_doublewrite_buf = TRUE;
|
||||||
UNIV_INTERN ibool srv_use_checksums = TRUE;
|
UNIV_INTERN ibool srv_use_checksums = TRUE;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue