Commit c167501b authored by unknown's avatar unknown

Fix for Bug#35074: max_used_connections is not correct.

The problem was that number of threads was used to calculate
max_used_connections.

The fix is to use number of active connections.


mysql-test/r/connect.result:
  Update result file.
mysql-test/t/connect.test:
  - Add a test case for Bug#35074: max_used_connections is not correct;
  - Make a test case for Bug#33507 more stable.
sql/mysqld.cc:
  Use number of connections insetad of threads
  to calculate max_used_connections.
parent b279be38
......@@ -162,14 +162,48 @@ root
# -- Resetting variables...
SET GLOBAL max_connections = 151;
# -- Stopping Event Scheduler...
SET GLOBAL event_scheduler = OFF;
# -- Waiting for Event Scheduler to stop...
# -- That's it. Closing connections...
# -- Restoring default connection...
# -- Waiting for connections to close...
DROP USER mysqltest_u1@localhost;
# -- End of Bug#33507.
# -- Bug#35074: max_used_connections is not correct.
FLUSH STATUS;
SHOW STATUS LIKE 'max_used_connections';
Variable_name Value
Max_used_connections 1
# -- Starting Event Scheduler...
SET GLOBAL event_scheduler = ON;
# -- Waiting for Event Scheduler to start...
# -- Opening a new connection to check max_used_connections...
# -- Check that max_used_connections hasn't changed.
SHOW STATUS LIKE 'max_used_connections';
Variable_name Value
Max_used_connections 2
# -- Closing new connection...
# -- Stopping Event Scheduler...
SET GLOBAL event_scheduler = OFF;
# -- Waiting for Event Scheduler to stop...
# -- End of Bug#35074.
# ------------------------------------------------------------------
# -- End of 5.1 tests
# ------------------------------------------------------------------
......@@ -209,22 +209,97 @@ SELECT user FROM information_schema.processlist ORDER BY id;
--echo # -- Resetting variables...
--eval SET GLOBAL max_connections = $saved_max_connections
--echo
--echo # -- Stopping Event Scheduler...
SET GLOBAL event_scheduler = OFF;
--echo # -- Waiting for Event Scheduler to stop...
let $wait_condition =
SELECT COUNT(*) = 0
FROM information_schema.processlist
WHERE user = 'event_scheduler';
--source include/wait_condition.inc
--echo
--echo # -- That's it. Closing connections...
--disconnect con_1
--disconnect con_2
--disconnect con_3
--disconnect con_super_1
--echo
--echo # -- Restoring default connection...
--connect (default,localhost,root,,test)
--echo
--echo # -- Waiting for connections to close...
let $wait_condition =
SELECT COUNT(*) = 1
FROM information_schema.processlist
WHERE db = 'test';
--source include/wait_condition.inc
--echo
DROP USER mysqltest_u1@localhost;
--echo
--echo # -- End of Bug#33507.
--echo
###########################################################################
--echo # -- Bug#35074: max_used_connections is not correct.
--echo
FLUSH STATUS;
--echo
SHOW STATUS LIKE 'max_used_connections';
--echo
--echo # -- Starting Event Scheduler...
SET GLOBAL event_scheduler = ON;
--echo # -- Waiting for Event Scheduler to start...
let $wait_condition =
SELECT COUNT(*) = 1
FROM information_schema.processlist
WHERE user = 'event_scheduler';
--source include/wait_condition.inc
# NOTE: We should use a new connection here instead of reconnect in order to
# avoid races (we can not for sure when the connection being disconnected is
# actually disconnected on the server).
--echo
--echo # -- Opening a new connection to check max_used_connections...
--connect (con_1,localhost,root)
--echo
--echo # -- Check that max_used_connections hasn't changed.
SHOW STATUS LIKE 'max_used_connections';
--echo
--echo # -- Closing new connection...
--disconnect con_1
--connection default
--echo
--echo # -- Stopping Event Scheduler...
SET GLOBAL event_scheduler = OFF;
--echo # -- Waiting for Event Scheduler to stop...
let $wait_condition =
SELECT COUNT(*) = 0
FROM information_schema.processlist
WHERE user = 'event_scheduler';
--source include/wait_condition.inc
--echo
--echo # -- End of Bug#35074.
--echo
--echo # ------------------------------------------------------------------
--echo # -- End of 5.1 tests
--echo # ------------------------------------------------------------------
......@@ -4776,6 +4776,9 @@ static void create_new_thread(THD *thd)
++connection_count;
if (connection_count > max_used_connections)
max_used_connections= connection_count;
pthread_mutex_unlock(&LOCK_connection_count);
/* Start a new thread to handle connection. */
......@@ -4791,9 +4794,6 @@ static void create_new_thread(THD *thd)
thread_count++;
if (thread_count - delayed_insert_threads > max_used_connections)
max_used_connections= thread_count - delayed_insert_threads;
thread_scheduler.add_connection(thd);
DBUG_VOID_RETURN;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment