From 09b03ed23ca3c269e8fdc6e1792fa8e67cd69419 Mon Sep 17 00:00:00 2001
From: unknown <peter@mysql.com>
Date: Sun, 4 May 2003 14:41:21 +0400
Subject: [PATCH] Added innodb_max_dirty_pages_pct parameter to limit amount   
  of dirty pages in the buffer pool (can be changed online)

sql/mysql_priv.h:
  Added innodb_max_dirty_pages_pct parameter to limit amount
  of dirty pages in the buffer pool (can be changed online)
sql/mysqld.cc:
  Added new option
sql/set_var.cc:
  Added new variable handling
---
 sql/mysql_priv.h | 1 +
 sql/mysqld.cc    | 5 +++++
 sql/set_var.cc   | 9 +++++++++
 3 files changed, 15 insertions(+)

diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h
index 9617d19caae..c184b09974d 100644
--- a/sql/mysql_priv.h
+++ b/sql/mysql_priv.h
@@ -657,6 +657,7 @@ extern ulong binlog_cache_size, max_binlog_cache_size, open_files_limit;
 extern ulong max_binlog_size, rpl_recovery_rank, thread_cache_size;
 extern ulong com_stat[(uint) SQLCOM_END], com_other, back_log;
 extern ulong specialflag, current_pid;
+extern ulong srv_max_buf_pool_modified_pct;
 
 extern uint test_flags,select_errors,ha_open_options;
 extern uint protocol_version,dropping_tables;
diff --git a/sql/mysqld.cc b/sql/mysqld.cc
index 33724c7100e..e2f9fff36c5 100644
--- a/sql/mysqld.cc
+++ b/sql/mysqld.cc
@@ -3156,6 +3156,7 @@ enum options {
   OPT_INNODB_LOCK_WAIT_TIMEOUT,
   OPT_INNODB_THREAD_CONCURRENCY,
   OPT_INNODB_FORCE_RECOVERY,
+  OPT_INNODB_MAX_DIRTY_PAGES_PCT,
   OPT_BDB_CACHE_SIZE,
   OPT_BDB_LOG_BUFFER_SIZE,
   OPT_BDB_MAX_LOCK,
@@ -3304,6 +3305,10 @@ struct my_option my_long_options[] =
   {"innodb_fast_shutdown", OPT_INNODB_FAST_SHUTDOWN,
    "Speeds up server shutdown process", (gptr*) &innobase_fast_shutdown,
    (gptr*) &innobase_fast_shutdown, 0, GET_BOOL, NO_ARG, 1, 0, 0, 0, 0, 0},
+  {"innodb_max_dirty_pages_pct", OPT_INNODB_MAX_DIRTY_PAGES_PCT,
+   "Percentage of dirty pages allowed in bufferpool", (gptr*) &srv_max_buf_pool_modified_pct,
+   (gptr*) &srv_max_buf_pool_modified_pct, 0, GET_ULONG, REQUIRED_ARG, 90, 0, 100, 0, 0, 0},
+   
 #endif /* End HAVE_INNOBASE_DB */
   {"help", '?', "Display this help and exit", 0, 0, 0, GET_NO_ARG, NO_ARG, 0,
    0, 0, 0, 0, 0},
diff --git a/sql/set_var.cc b/sql/set_var.cc
index 172939ce981..697ebbe6edb 100644
--- a/sql/set_var.cc
+++ b/sql/set_var.cc
@@ -219,6 +219,11 @@ sys_var_thd_ulong	sys_tmp_table_size("tmp_table_size",
 					   &SV::tmp_table_size);
 sys_var_thd_ulong	sys_net_wait_timeout("wait_timeout",
 					     &SV::net_wait_timeout);
+					     
+#ifdef HAVE_INNOBASE_DB
+sys_var_long_ptr        sys_innodb_max_dirty_pages_pct("innodb_max_dirty_pages_pct",
+                                                        &srv_max_buf_pool_modified_pct);
+#endif 					     
 
 
 /*
@@ -378,6 +383,9 @@ sys_var *sys_variables[]=
   &sys_timestamp,
   &sys_tmp_table_size,
   &sys_tx_isolation,
+#ifdef HAVE_INNOBASE_DB
+  &sys_innodb_max_dirty_pages_pct,
+#endif    
   &sys_unique_checks
 };
 
@@ -446,6 +454,7 @@ struct show_var_st init_vars[]= {
   {"innodb_log_files_in_group", (char*) &innobase_log_files_in_group,	SHOW_LONG},
   {"innodb_log_group_home_dir", (char*) &innobase_log_group_home_dir, SHOW_CHAR_PTR},
   {"innodb_mirrored_log_groups", (char*) &innobase_mirrored_log_groups, SHOW_LONG},
+  {sys_innodb_max_dirty_pages_pct.name, (char*) &sys_innodb_max_dirty_pages_pct, SHOW_SYS},
 #endif
   {sys_interactive_timeout.name,(char*) &sys_interactive_timeout,   SHOW_SYS},
   {sys_join_buffer_size.name,   (char*) &sys_join_buffer_size,	    SHOW_SYS},
-- 
2.30.9