diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc
index d26a8ca734c..167ca7685bd 100644
--- a/storage/innobase/handler/ha_innodb.cc
+++ b/storage/innobase/handler/ha_innodb.cc
@@ -220,6 +220,27 @@ enum default_row_format_enum {
 	DEFAULT_ROW_FORMAT_DYNAMIC = 2,
 };
 
+/************ GROUP CHECKING OF SYSVARS *****************************/
+struct group_sysvar {
+	ulonglong innodb_log_file_size;
+	uint innodb_max_purge_lag_wait;
+};
+struct group_set_sysvar {
+	ulonglong query_id;
+	struct group_sysvar *vars;
+};
+simple_thread_local group_set_sysvar sysvar_group_set={0,0};
+
+static void start_group_sysvar_check(THD *thd)
+{
+  if (thd_query_id(thd) != sysvar_group_set.query_id)
+  {
+    sysvar_group_set.vars= (group_sysvar*)thd_calloc(thd, sizeof(group_sysvar));
+    sysvar_group_set.query_id= thd_query_id(thd);
+  }
+}
+/************ GROUP CHECKING OF SYSVARS END *************************/
+
 static my_bool innodb_truncate_temporary_tablespace_now;
 
 /** Whether ROW_FORMAT=COMPRESSED tables are read-only */
@@ -228,13 +249,24 @@ static my_bool innodb_read_only_compressed;
 /** A dummy variable */
 static uint innodb_max_purge_lag_wait;
 
+static int innodb_max_purge_lag_wait_validate(THD *thd,
+              struct st_mysql_sys_var *var, void* save,
+              struct st_mysql_value* value)
+{
+  start_group_sysvar_check(thd);
+  long long val;
+  value->val_int(value, &val);
+  sysvar_group_set.vars->innodb_max_purge_lag_wait= uint(val);
+  return sysvar_group_set.vars->innodb_log_file_size != 0;
+}
+
 /** Wait for trx_sys.history_size() to be below a limit. */
 static void innodb_max_purge_lag_wait_update(THD *thd, st_mysql_sys_var *,
-                                             void *, const void *limit)
+                                             void *, const void *)
 {
   if (high_level_read_only)
     return;
-  const uint l= *static_cast<const uint*>(limit);
+  const uint l= sysvar_group_set.vars->innodb_max_purge_lag_wait;
   if (!trx_sys.history_exceeds(l))
     return;
   mysql_mutex_unlock(&LOCK_global_system_variables);
@@ -18632,25 +18664,39 @@ static void innodb_doublewrite_update(THD *, st_mysql_sys_var*,
     fil_system.set_use_doublewrite(*static_cast<const ulong*>(save));
 }
 
+static int innodb_log_file_size_validate(THD *thd,
+              struct st_mysql_sys_var *var, void* save,
+              struct st_mysql_value* value)
+{
+  start_group_sysvar_check(thd);
+  long long val;
+  value->val_int(value, &val);
+  sysvar_group_set.vars->innodb_log_file_size= val;
+  if (high_level_read_only)
+    ib_senderrf(thd, IB_LOG_LEVEL_ERROR, ER_READ_ONLY_MODE);
+
+  return high_level_read_only ||
+         sysvar_group_set.vars->innodb_max_purge_lag_wait;
+}
+
 static void innodb_log_file_size_update(THD *thd, st_mysql_sys_var*,
-                                        void *var, const void *save)
+                                        void *var, const void *)
 {
   ut_ad(var == &srv_log_file_size);
   mysql_mutex_unlock(&LOCK_global_system_variables);
+  ulonglong l= sysvar_group_set.vars->innodb_log_file_size;
 
-  if (high_level_read_only)
-    ib_senderrf(thd, IB_LOG_LEVEL_ERROR, ER_READ_ONLY_MODE);
-  else if (
+  if (
 #ifdef HAVE_PMEM
           !log_sys.is_mmap() &&
 #endif
-           *static_cast<const ulonglong*>(save) < log_sys.buf_size)
+           l < log_sys.buf_size)
     my_printf_error(ER_WRONG_ARGUMENTS,
                     "innodb_log_file_size must be at least"
                     " innodb_log_buffer_size=%u", MYF(0), log_sys.buf_size);
   else
   {
-    switch (log_sys.resize_start(*static_cast<const ulonglong*>(save), thd)) {
+    switch (log_sys.resize_start(l, thd)) {
     case log_t::RESIZE_NO_CHANGE:
       break;
     case log_t::RESIZE_IN_PROGRESS:
@@ -19200,7 +19246,8 @@ static MYSQL_SYSVAR_ULONG(max_purge_lag_delay, srv_max_purge_lag_delay,
 static MYSQL_SYSVAR_UINT(max_purge_lag_wait, innodb_max_purge_lag_wait,
   PLUGIN_VAR_RQCMDARG,
   "Wait until History list length is below the specified limit",
-  NULL, innodb_max_purge_lag_wait_update, UINT_MAX, 0, UINT_MAX, 0);
+  innodb_max_purge_lag_wait_validate, innodb_max_purge_lag_wait_update,
+  UINT_MAX, 0, UINT_MAX, 0);
 
 static MYSQL_SYSVAR_BOOL(rollback_on_timeout, innobase_rollback_on_timeout,
   PLUGIN_VAR_OPCMDARG | PLUGIN_VAR_READONLY,
@@ -19542,7 +19589,7 @@ static MYSQL_SYSVAR_BOOL(data_file_write_through, fil_system.write_through,
 static MYSQL_SYSVAR_ULONGLONG(log_file_size, srv_log_file_size,
   PLUGIN_VAR_RQCMDARG,
   "Redo log size in bytes",
-  nullptr, innodb_log_file_size_update,
+  innodb_log_file_size_validate, innodb_log_file_size_update,
   96 << 20, 4 << 20, std::numeric_limits<ulonglong>::max(), 4096);
 
 static MYSQL_SYSVAR_UINT(log_spin_wait_delay, mtr_t::spin_wait_delay,
