diff --git a/extra/mariadb/0008-MDEV-18577-Indexes-problem-on-import-dump-SQL.patch b/extra/mariadb/0008-MDEV-18577-Indexes-problem-on-import-dump-SQL.patch new file mode 100644 index 000000000..b276c5575 --- /dev/null +++ b/extra/mariadb/0008-MDEV-18577-Indexes-problem-on-import-dump-SQL.patch @@ -0,0 +1,121 @@ +commit e73060b6c9b3655cadcd34c66fc7811d214c1673 +Author: Jan Lindström <jan.lindstrom@mariadb.com> +Date: Tue Mar 12 15:44:10 2019 +0200 + + MDEV-18577: Indexes problem on import dump SQL + + Problem was that we skipped background persistent statistics calculation + on applier nodes if thread is marked as high priority (a.k.a BF). + However, on applier nodes all DDL which is replicate will be executed + as high priority i.e BF. + + Fixed by allowing background persistent statistics calculation on + applier nodes even when thread is marked as BF. This could lead + BF lock waits but for queries on that node needs that statistics. + +diff --git a/include/mysql/service_wsrep.h b/include/mysql/service_wsrep.h +index 267c8cb4e90..ee28856ac73 100644 +--- a/include/mysql/service_wsrep.h ++++ b/include/mysql/service_wsrep.h +@@ -112,6 +112,7 @@ extern struct wsrep_service_st { + int (*wsrep_trx_order_before_func)(MYSQL_THD, MYSQL_THD); + void (*wsrep_unlock_rollback_func)(); + void (*wsrep_set_data_home_dir_func)(const char *data_dir); ++ my_bool (*wsrep_thd_is_applier_func)(MYSQL_THD); + } *wsrep_service; + + #ifdef MYSQL_DYNAMIC_PLUGIN +@@ -155,6 +156,7 @@ extern struct wsrep_service_st { + #define wsrep_trx_order_before(T1,T2) wsrep_service->wsrep_trx_order_before_func(T1,T2) + #define wsrep_unlock_rollback() wsrep_service->wsrep_unlock_rollback_func() + #define wsrep_set_data_home_dir(A) wsrep_service->wsrep_set_data_home_dir_func(A) ++#define wsrep_thd_is_applier(T) wsrep_service->wsrep_thd_is_applier(T) + + #define wsrep_debug get_wsrep_debug() + #define wsrep_log_conflicts get_wsrep_log_conflicts() +@@ -214,7 +216,7 @@ void wsrep_thd_set_conflict_state(THD *thd, enum wsrep_conflict_state state); + bool wsrep_thd_ignore_table(THD *thd); + void wsrep_unlock_rollback(); + void wsrep_set_data_home_dir(const char *data_dir); +- ++my_bool wsrep_thd_is_applier(MYSQL_THD thd); + #endif + + #ifdef __cplusplus +diff --git a/sql/sql_plugin_services.ic b/sql/sql_plugin_services.ic +index 7fb5524016a..3d6cf0a0723 100644 +--- a/sql/sql_plugin_services.ic ++++ b/sql/sql_plugin_services.ic +@@ -181,7 +181,8 @@ static struct wsrep_service_st wsrep_handler = { + wsrep_trx_is_aborting, + wsrep_trx_order_before, + wsrep_unlock_rollback, +- wsrep_set_data_home_dir ++ wsrep_set_data_home_dir, ++ wsrep_thd_is_applier + }; + + static struct thd_specifics_service_st thd_specifics_handler= +diff --git a/sql/wsrep_dummy.cc b/sql/wsrep_dummy.cc +index 795e2d19252..7297dbfe0fd 100644 +--- a/sql/wsrep_dummy.cc ++++ b/sql/wsrep_dummy.cc +@@ -141,3 +141,6 @@ void wsrep_unlock_rollback() + + void wsrep_set_data_home_dir(const char *) + { } ++ ++my_bool wsrep_thd_is_applier(MYSQL_THD thd) ++{ return false; } +diff --git a/sql/wsrep_thd.cc b/sql/wsrep_thd.cc +index a3d1961ade2..dab9f91b381 100644 +--- a/sql/wsrep_thd.cc ++++ b/sql/wsrep_thd.cc +@@ -698,3 +698,13 @@ void wsrep_thd_auto_increment_variables(THD* thd, + *increment= thd->variables.auto_increment_increment; + } + } ++ ++my_bool wsrep_thd_is_applier(MYSQL_THD thd) ++{ ++ my_bool is_applier= false; ++ ++ if (thd && thd->wsrep_applier) ++ is_applier= true; ++ ++ return (is_applier); ++} +diff --git a/storage/innobase/dict/dict0stats_bg.cc b/storage/innobase/dict/dict0stats_bg.cc +index 55bcafddc70..7d30555748c 100644 +--- a/storage/innobase/dict/dict0stats_bg.cc ++++ b/storage/innobase/dict/dict0stats_bg.cc +@@ -164,10 +164,26 @@ void dict_stats_update_if_needed_func(dict_table_t* table) + && dict_stats_auto_recalc_is_enabled(table)) { + + #ifdef WITH_WSREP +- if (thd && wsrep_on(thd) && wsrep_thd_is_BF(thd, 0)) { ++ /* Do not add table to background ++ statistic calculation if this thread is not a ++ applier (as all DDL, which is replicated (i.e ++ is binlogged in master node), will be executed ++ with high priority (a.k.a BF) in slave nodes) ++ and is BF. This could again lead BF lock ++ waits in applier node but it is better than ++ no persistent index/table statistics at ++ applier nodes. TODO: allow BF threads ++ wait for these InnoDB internal SQL-parser ++ generated row locks and allow BF thread ++ lock waits to be enqueued at head of waiting ++ queue. */ ++ if (thd ++ && !wsrep_thd_is_applier(thd) ++ && wsrep_on(thd) ++ && wsrep_thd_is_BF(thd, 0)) { + WSREP_DEBUG("Avoiding background statistics" +- " calculation for table %s", +- table->name.m_name); ++ " calculation for table %s.", ++ table->name.m_name); + return; + } + #endif /* WITH_WSREP */ diff --git a/extra/mariadb/PKGBUILD b/extra/mariadb/PKGBUILD index 8d9e21cd2..2fd401319 100644 --- a/extra/mariadb/PKGBUILD +++ b/extra/mariadb/PKGBUILD @@ -9,7 +9,7 @@ pkgbase=mariadb pkgname=('mariadb-libs' 'mariadb-clients' 'mariadb' 'mytop') pkgdesc='Fast SQL database server, derived from MySQL' pkgver=10.3.13 -pkgrel=3 +pkgrel=4 arch=('x86_64') license=('GPL') url='https://mariadb.org/' @@ -22,6 +22,7 @@ source=("https://mirrors.n-ix.net/mariadb/mariadb-$pkgver/source/mariadb-$pkgver '0004-do-not-break-main-configuration-with-instantiated-one.patch' '0005-fix-galera_recovery-with-fs.protected_regular-enabled.patch' '0007-MDEV-18605-Loss-of-column-aliases-by-using-view-and-.patch' + '0008-MDEV-18577-Indexes-problem-on-import-dump-SQL.patch' 'atomic.patch') sha256sums=('b2aa857ef5b84f85a7ea60a1eac7b34c0ca5151c71a0d44ce2d7fb028d71459a' 'SKIP' @@ -30,6 +31,7 @@ sha256sums=('b2aa857ef5b84f85a7ea60a1eac7b34c0ca5151c71a0d44ce2d7fb028d71459a' 'd12806e4f90cc0fc081205dd4c0a5e0e7c455844f04276811b61b57fd24f5545' '66e0acac7436fd8925710ef5cc66ba1a8f63a385ce374f01ae83096cc33d97a0' '98f0bd85e1729133d236831e934a3dd0c9bc6deebbff6aebe8a4bda17e457ac4' + '9862b64ea29d3d94434e6b8f422df97e7528b331b793d7a50f22f176d4886325' '7769fd8eb2bb3a6644a2200d01918ff887be25638d79dbec25897fe0d87badc4') prepare() { @@ -59,6 +61,10 @@ prepare() { # https://jira.mariadb.org/browse/MDEV-18605 patch -Np1 < ../0007-MDEV-18605-Loss-of-column-aliases-by-using-view-and-.patch + # MDEV-18577: Indexes problem on import dump SQL + # https://jira.mariadb.org/browse/MDEV-18577 + patch -Np1 < ../0008-MDEV-18577-Indexes-problem-on-import-dump-SQL.patch + if [[ $CARCH == arm || $CARCH == armv6h ]]; then patch -p0 -i ../atomic.patch fi