Auto-merged.
This commit is contained in:
commit
cd8710fe8a
@ -1335,15 +1335,11 @@ void _db_doprnt_(const char *format,...)
|
|||||||
* This function is intended as a
|
* This function is intended as a
|
||||||
* vfprintf clone with consistent, platform independent output for
|
* vfprintf clone with consistent, platform independent output for
|
||||||
* problematic formats like %p, %zd and %lld.
|
* problematic formats like %p, %zd and %lld.
|
||||||
* However: full functionality for my_vsnprintf has not been backported yet,
|
|
||||||
* so code using "%g" or "%f" will have undefined behaviour.
|
|
||||||
*/
|
*/
|
||||||
static void DbugVfprintf(FILE *stream, const char* format, va_list args)
|
static void DbugVfprintf(FILE *stream, const char* format, va_list args)
|
||||||
{
|
{
|
||||||
char cvtbuf[1024];
|
char cvtbuf[1024];
|
||||||
size_t len;
|
(void) my_vsnprintf(cvtbuf, sizeof(cvtbuf), format, args);
|
||||||
/* Do not use my_vsnprintf, it does not support "%g". */
|
|
||||||
len = vsnprintf(cvtbuf, sizeof(cvtbuf), format, args);
|
|
||||||
(void) fprintf(stream, "%s\n", cvtbuf);
|
(void) fprintf(stream, "%s\n", cvtbuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,7 +53,7 @@
|
|||||||
<length modifier> can be 'l', 'll', or 'z'.
|
<length modifier> can be 'l', 'll', or 'z'.
|
||||||
|
|
||||||
Supported formats are 's' (null pointer is accepted, printed as
|
Supported formats are 's' (null pointer is accepted, printed as
|
||||||
"(null)"), 'b' (extension, see below), 'c', 'd', 'u', 'x', 'o',
|
"(null)"), 'b' (extension, see below), 'c', 'd', 'i', 'u', 'x', 'o',
|
||||||
'X', 'p' (works as 0x%x).
|
'X', 'p' (works as 0x%x).
|
||||||
|
|
||||||
Standard syntax for positional arguments $n is supported.
|
Standard syntax for positional arguments $n is supported.
|
||||||
|
@ -43,5 +43,11 @@ log-bin=mysqld-bin
|
|||||||
|
|
||||||
# Run tests with the performance schema instrumentation
|
# Run tests with the performance schema instrumentation
|
||||||
loose-enable-performance-schema
|
loose-enable-performance-schema
|
||||||
|
# Run tests with a small number of instrumented objects
|
||||||
|
# to limit memory consumption with MTR
|
||||||
|
loose-performance-schema-max-mutex-instances=10000
|
||||||
|
loose-performance-schema-max-rwlock-instances=10000
|
||||||
|
loose-performance-schema-max-table-instances=500
|
||||||
|
loose-performance-schema-max-table-handles=1000
|
||||||
|
|
||||||
binlog-direct-non-transactional-updates
|
binlog-direct-non-transactional-updates
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
--error 1
|
--error 1
|
||||||
--exec $MYSQL_UPGRADE --skip-verbose > $out_file 2> $err_file
|
--exec $MYSQL_UPGRADE --skip-verbose --force > $out_file 2> $err_file
|
||||||
|
|
||||||
# Verify that mysql_upgrade complained about the performance_schema
|
# Verify that mysql_upgrade complained about the performance_schema
|
||||||
--cat_file $err_file
|
--cat_file $err_file
|
||||||
|
34
mysql-test/suite/perfschema/r/checksum.result
Normal file
34
mysql-test/suite/perfschema/r/checksum.result
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
checksum table performance_schema.COND_INSTANCES;
|
||||||
|
checksum table performance_schema.EVENTS_WAITS_CURRENT;
|
||||||
|
checksum table performance_schema.EVENTS_WAITS_HISTORY;
|
||||||
|
checksum table performance_schema.EVENTS_WAITS_HISTORY_LONG;
|
||||||
|
checksum table performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE;
|
||||||
|
checksum table performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME;
|
||||||
|
checksum table performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME;
|
||||||
|
checksum table performance_schema.FILE_INSTANCES;
|
||||||
|
checksum table performance_schema.FILE_SUMMARY_BY_EVENT_NAME;
|
||||||
|
checksum table performance_schema.FILE_SUMMARY_BY_INSTANCE;
|
||||||
|
checksum table performance_schema.MUTEX_INSTANCES;
|
||||||
|
checksum table performance_schema.PERFORMANCE_TIMERS;
|
||||||
|
checksum table performance_schema.RWLOCK_INSTANCES;
|
||||||
|
checksum table performance_schema.SETUP_CONSUMERS;
|
||||||
|
checksum table performance_schema.SETUP_INSTRUMENTS;
|
||||||
|
checksum table performance_schema.SETUP_TIMERS;
|
||||||
|
checksum table performance_schema.THREADS;
|
||||||
|
checksum table performance_schema.COND_INSTANCES extended;
|
||||||
|
checksum table performance_schema.EVENTS_WAITS_CURRENT extended;
|
||||||
|
checksum table performance_schema.EVENTS_WAITS_HISTORY extended;
|
||||||
|
checksum table performance_schema.EVENTS_WAITS_HISTORY_LONG extended;
|
||||||
|
checksum table performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE extended;
|
||||||
|
checksum table performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME extended;
|
||||||
|
checksum table performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME extended;
|
||||||
|
checksum table performance_schema.FILE_INSTANCES extended;
|
||||||
|
checksum table performance_schema.FILE_SUMMARY_BY_EVENT_NAME extended;
|
||||||
|
checksum table performance_schema.FILE_SUMMARY_BY_INSTANCE extended;
|
||||||
|
checksum table performance_schema.MUTEX_INSTANCES extended;
|
||||||
|
checksum table performance_schema.PERFORMANCE_TIMERS extended;
|
||||||
|
checksum table performance_schema.RWLOCK_INSTANCES extended;
|
||||||
|
checksum table performance_schema.SETUP_CONSUMERS extended;
|
||||||
|
checksum table performance_schema.SETUP_INSTRUMENTS extended;
|
||||||
|
checksum table performance_schema.SETUP_TIMERS extended;
|
||||||
|
checksum table performance_schema.THREADS extended;
|
@ -116,18 +116,10 @@ where name like "wait/synch/mutex/sql/LOCK_rpl_status";
|
|||||||
count(name)
|
count(name)
|
||||||
1
|
1
|
||||||
select count(name) from MUTEX_INSTANCES
|
select count(name) from MUTEX_INSTANCES
|
||||||
where name like "wait/synch/mutex/sql/LOG_INFO::lock";
|
|
||||||
count(name)
|
|
||||||
1
|
|
||||||
select count(name) from MUTEX_INSTANCES
|
|
||||||
where name like "wait/synch/mutex/sql/Query_cache::structure_guard_mutex";
|
where name like "wait/synch/mutex/sql/Query_cache::structure_guard_mutex";
|
||||||
count(name)
|
count(name)
|
||||||
1
|
1
|
||||||
select count(name) from MUTEX_INSTANCES
|
select count(name) from MUTEX_INSTANCES
|
||||||
where name like "wait/synch/mutex/sql/Event_scheduler::LOCK_scheduler_state";
|
|
||||||
count(name)
|
|
||||||
1
|
|
||||||
select count(name) from MUTEX_INSTANCES
|
|
||||||
where name like "wait/synch/mutex/sql/LOCK_event_metadata";
|
where name like "wait/synch/mutex/sql/LOCK_event_metadata";
|
||||||
count(name)
|
count(name)
|
||||||
1
|
1
|
||||||
@ -144,6 +136,10 @@ where name like "wait/synch/mutex/sql/Cversion_lock";
|
|||||||
count(name)
|
count(name)
|
||||||
1
|
1
|
||||||
select count(name) from MUTEX_INSTANCES
|
select count(name) from MUTEX_INSTANCES
|
||||||
|
where name like "wait/synch/mutex/sql/LOCK_audit_mask";
|
||||||
|
count(name)
|
||||||
|
1
|
||||||
|
select count(name) from MUTEX_INSTANCES
|
||||||
where name like "wait/synch/mutex/sql/LOCK_xid_cache";
|
where name like "wait/synch/mutex/sql/LOCK_xid_cache";
|
||||||
count(name)
|
count(name)
|
||||||
1
|
1
|
||||||
@ -152,10 +148,6 @@ where name like "wait/synch/mutex/sql/LOCK_plugin";
|
|||||||
count(name)
|
count(name)
|
||||||
1
|
1
|
||||||
select count(name) from MUTEX_INSTANCES
|
select count(name) from MUTEX_INSTANCES
|
||||||
where name like "wait/synch/mutex/sql/LOCK_gdl";
|
|
||||||
count(name)
|
|
||||||
1
|
|
||||||
select count(name) from MUTEX_INSTANCES
|
|
||||||
where name like "wait/synch/mutex/sql/tz_LOCK";
|
where name like "wait/synch/mutex/sql/tz_LOCK";
|
||||||
count(name)
|
count(name)
|
||||||
1
|
1
|
||||||
@ -212,10 +204,6 @@ where name like "wait/synch/cond/sql/Query_cache::COND_cache_status_changed";
|
|||||||
count(name)
|
count(name)
|
||||||
1
|
1
|
||||||
select count(name) from COND_INSTANCES
|
select count(name) from COND_INSTANCES
|
||||||
where name like "wait/synch/cond/sql/Event_scheduler::COND_state";
|
|
||||||
count(name)
|
|
||||||
1
|
|
||||||
select count(name) from COND_INSTANCES
|
|
||||||
where name like "wait/synch/cond/sql/COND_queue_state";
|
where name like "wait/synch/cond/sql/COND_queue_state";
|
||||||
count(name)
|
count(name)
|
||||||
1
|
1
|
||||||
|
@ -45,11 +45,11 @@ performance_schema_max_file_classes 50
|
|||||||
performance_schema_max_file_handles 32768
|
performance_schema_max_file_handles 32768
|
||||||
performance_schema_max_file_instances 10000
|
performance_schema_max_file_instances 10000
|
||||||
performance_schema_max_mutex_classes 200
|
performance_schema_max_mutex_classes 200
|
||||||
performance_schema_max_mutex_instances 1000000
|
performance_schema_max_mutex_instances 10000
|
||||||
performance_schema_max_rwlock_classes 30
|
performance_schema_max_rwlock_classes 30
|
||||||
performance_schema_max_rwlock_instances 1000000
|
performance_schema_max_rwlock_instances 10000
|
||||||
performance_schema_max_table_handles 100000
|
performance_schema_max_table_handles 1000
|
||||||
performance_schema_max_table_instances 50000
|
performance_schema_max_table_instances 500
|
||||||
performance_schema_max_thread_classes 50
|
performance_schema_max_thread_classes 50
|
||||||
performance_schema_max_thread_instances 1000
|
performance_schema_max_thread_instances 1000
|
||||||
show engine PERFORMANCE_SCHEMA status;
|
show engine PERFORMANCE_SCHEMA status;
|
||||||
|
@ -45,11 +45,11 @@ performance_schema_max_file_classes 50
|
|||||||
performance_schema_max_file_handles 32768
|
performance_schema_max_file_handles 32768
|
||||||
performance_schema_max_file_instances 10000
|
performance_schema_max_file_instances 10000
|
||||||
performance_schema_max_mutex_classes 200
|
performance_schema_max_mutex_classes 200
|
||||||
performance_schema_max_mutex_instances 1000000
|
performance_schema_max_mutex_instances 10000
|
||||||
performance_schema_max_rwlock_classes 30
|
performance_schema_max_rwlock_classes 30
|
||||||
performance_schema_max_rwlock_instances 1000000
|
performance_schema_max_rwlock_instances 10000
|
||||||
performance_schema_max_table_handles 100000
|
performance_schema_max_table_handles 1000
|
||||||
performance_schema_max_table_instances 50000
|
performance_schema_max_table_instances 500
|
||||||
performance_schema_max_thread_classes 50
|
performance_schema_max_thread_classes 50
|
||||||
performance_schema_max_thread_instances 1000
|
performance_schema_max_thread_instances 1000
|
||||||
show engine PERFORMANCE_SCHEMA status;
|
show engine PERFORMANCE_SCHEMA status;
|
||||||
|
@ -45,11 +45,11 @@ performance_schema_max_file_classes 0
|
|||||||
performance_schema_max_file_handles 32768
|
performance_schema_max_file_handles 32768
|
||||||
performance_schema_max_file_instances 10000
|
performance_schema_max_file_instances 10000
|
||||||
performance_schema_max_mutex_classes 200
|
performance_schema_max_mutex_classes 200
|
||||||
performance_schema_max_mutex_instances 1000000
|
performance_schema_max_mutex_instances 10000
|
||||||
performance_schema_max_rwlock_classes 30
|
performance_schema_max_rwlock_classes 30
|
||||||
performance_schema_max_rwlock_instances 1000000
|
performance_schema_max_rwlock_instances 10000
|
||||||
performance_schema_max_table_handles 100000
|
performance_schema_max_table_handles 1000
|
||||||
performance_schema_max_table_instances 50000
|
performance_schema_max_table_instances 500
|
||||||
performance_schema_max_thread_classes 50
|
performance_schema_max_thread_classes 50
|
||||||
performance_schema_max_thread_instances 1000
|
performance_schema_max_thread_instances 1000
|
||||||
show engine PERFORMANCE_SCHEMA status;
|
show engine PERFORMANCE_SCHEMA status;
|
||||||
|
@ -45,11 +45,11 @@ performance_schema_max_file_classes 50
|
|||||||
performance_schema_max_file_handles 32768
|
performance_schema_max_file_handles 32768
|
||||||
performance_schema_max_file_instances 0
|
performance_schema_max_file_instances 0
|
||||||
performance_schema_max_mutex_classes 200
|
performance_schema_max_mutex_classes 200
|
||||||
performance_schema_max_mutex_instances 1000000
|
performance_schema_max_mutex_instances 10000
|
||||||
performance_schema_max_rwlock_classes 30
|
performance_schema_max_rwlock_classes 30
|
||||||
performance_schema_max_rwlock_instances 1000000
|
performance_schema_max_rwlock_instances 10000
|
||||||
performance_schema_max_table_handles 100000
|
performance_schema_max_table_handles 1000
|
||||||
performance_schema_max_table_instances 50000
|
performance_schema_max_table_instances 500
|
||||||
performance_schema_max_thread_classes 50
|
performance_schema_max_thread_classes 50
|
||||||
performance_schema_max_thread_instances 1000
|
performance_schema_max_thread_instances 1000
|
||||||
show engine PERFORMANCE_SCHEMA status;
|
show engine PERFORMANCE_SCHEMA status;
|
||||||
|
@ -45,11 +45,11 @@ performance_schema_max_file_classes 50
|
|||||||
performance_schema_max_file_handles 32768
|
performance_schema_max_file_handles 32768
|
||||||
performance_schema_max_file_instances 10000
|
performance_schema_max_file_instances 10000
|
||||||
performance_schema_max_mutex_classes 0
|
performance_schema_max_mutex_classes 0
|
||||||
performance_schema_max_mutex_instances 1000000
|
performance_schema_max_mutex_instances 10000
|
||||||
performance_schema_max_rwlock_classes 30
|
performance_schema_max_rwlock_classes 30
|
||||||
performance_schema_max_rwlock_instances 1000000
|
performance_schema_max_rwlock_instances 10000
|
||||||
performance_schema_max_table_handles 100000
|
performance_schema_max_table_handles 1000
|
||||||
performance_schema_max_table_instances 50000
|
performance_schema_max_table_instances 500
|
||||||
performance_schema_max_thread_classes 50
|
performance_schema_max_thread_classes 50
|
||||||
performance_schema_max_thread_instances 1000
|
performance_schema_max_thread_instances 1000
|
||||||
show engine PERFORMANCE_SCHEMA status;
|
show engine PERFORMANCE_SCHEMA status;
|
||||||
|
@ -47,9 +47,9 @@ performance_schema_max_file_instances 10000
|
|||||||
performance_schema_max_mutex_classes 200
|
performance_schema_max_mutex_classes 200
|
||||||
performance_schema_max_mutex_instances 0
|
performance_schema_max_mutex_instances 0
|
||||||
performance_schema_max_rwlock_classes 30
|
performance_schema_max_rwlock_classes 30
|
||||||
performance_schema_max_rwlock_instances 1000000
|
performance_schema_max_rwlock_instances 10000
|
||||||
performance_schema_max_table_handles 100000
|
performance_schema_max_table_handles 1000
|
||||||
performance_schema_max_table_instances 50000
|
performance_schema_max_table_instances 500
|
||||||
performance_schema_max_thread_classes 50
|
performance_schema_max_thread_classes 50
|
||||||
performance_schema_max_thread_instances 1000
|
performance_schema_max_thread_instances 1000
|
||||||
show engine PERFORMANCE_SCHEMA status;
|
show engine PERFORMANCE_SCHEMA status;
|
||||||
|
@ -45,11 +45,11 @@ performance_schema_max_file_classes 50
|
|||||||
performance_schema_max_file_handles 32768
|
performance_schema_max_file_handles 32768
|
||||||
performance_schema_max_file_instances 10000
|
performance_schema_max_file_instances 10000
|
||||||
performance_schema_max_mutex_classes 200
|
performance_schema_max_mutex_classes 200
|
||||||
performance_schema_max_mutex_instances 1000000
|
performance_schema_max_mutex_instances 10000
|
||||||
performance_schema_max_rwlock_classes 0
|
performance_schema_max_rwlock_classes 0
|
||||||
performance_schema_max_rwlock_instances 1000000
|
performance_schema_max_rwlock_instances 10000
|
||||||
performance_schema_max_table_handles 100000
|
performance_schema_max_table_handles 1000
|
||||||
performance_schema_max_table_instances 50000
|
performance_schema_max_table_instances 500
|
||||||
performance_schema_max_thread_classes 50
|
performance_schema_max_thread_classes 50
|
||||||
performance_schema_max_thread_instances 1000
|
performance_schema_max_thread_instances 1000
|
||||||
show engine PERFORMANCE_SCHEMA status;
|
show engine PERFORMANCE_SCHEMA status;
|
||||||
|
@ -45,11 +45,11 @@ performance_schema_max_file_classes 50
|
|||||||
performance_schema_max_file_handles 32768
|
performance_schema_max_file_handles 32768
|
||||||
performance_schema_max_file_instances 10000
|
performance_schema_max_file_instances 10000
|
||||||
performance_schema_max_mutex_classes 200
|
performance_schema_max_mutex_classes 200
|
||||||
performance_schema_max_mutex_instances 1000000
|
performance_schema_max_mutex_instances 10000
|
||||||
performance_schema_max_rwlock_classes 30
|
performance_schema_max_rwlock_classes 30
|
||||||
performance_schema_max_rwlock_instances 0
|
performance_schema_max_rwlock_instances 0
|
||||||
performance_schema_max_table_handles 100000
|
performance_schema_max_table_handles 1000
|
||||||
performance_schema_max_table_instances 50000
|
performance_schema_max_table_instances 500
|
||||||
performance_schema_max_thread_classes 50
|
performance_schema_max_thread_classes 50
|
||||||
performance_schema_max_thread_instances 1000
|
performance_schema_max_thread_instances 1000
|
||||||
show engine PERFORMANCE_SCHEMA status;
|
show engine PERFORMANCE_SCHEMA status;
|
||||||
|
@ -45,11 +45,11 @@ performance_schema_max_file_classes 50
|
|||||||
performance_schema_max_file_handles 32768
|
performance_schema_max_file_handles 32768
|
||||||
performance_schema_max_file_instances 10000
|
performance_schema_max_file_instances 10000
|
||||||
performance_schema_max_mutex_classes 200
|
performance_schema_max_mutex_classes 200
|
||||||
performance_schema_max_mutex_instances 1000000
|
performance_schema_max_mutex_instances 10000
|
||||||
performance_schema_max_rwlock_classes 30
|
performance_schema_max_rwlock_classes 30
|
||||||
performance_schema_max_rwlock_instances 1000000
|
performance_schema_max_rwlock_instances 10000
|
||||||
performance_schema_max_table_handles 100000
|
performance_schema_max_table_handles 1000
|
||||||
performance_schema_max_table_instances 50000
|
performance_schema_max_table_instances 500
|
||||||
performance_schema_max_thread_classes 0
|
performance_schema_max_thread_classes 0
|
||||||
performance_schema_max_thread_instances 1000
|
performance_schema_max_thread_instances 1000
|
||||||
show engine PERFORMANCE_SCHEMA status;
|
show engine PERFORMANCE_SCHEMA status;
|
||||||
|
@ -45,11 +45,11 @@ performance_schema_max_file_classes 50
|
|||||||
performance_schema_max_file_handles 32768
|
performance_schema_max_file_handles 32768
|
||||||
performance_schema_max_file_instances 10000
|
performance_schema_max_file_instances 10000
|
||||||
performance_schema_max_mutex_classes 200
|
performance_schema_max_mutex_classes 200
|
||||||
performance_schema_max_mutex_instances 1000000
|
performance_schema_max_mutex_instances 10000
|
||||||
performance_schema_max_rwlock_classes 30
|
performance_schema_max_rwlock_classes 30
|
||||||
performance_schema_max_rwlock_instances 1000000
|
performance_schema_max_rwlock_instances 10000
|
||||||
performance_schema_max_table_handles 100000
|
performance_schema_max_table_handles 1000
|
||||||
performance_schema_max_table_instances 50000
|
performance_schema_max_table_instances 500
|
||||||
performance_schema_max_thread_classes 50
|
performance_schema_max_thread_classes 50
|
||||||
performance_schema_max_thread_instances 0
|
performance_schema_max_thread_instances 0
|
||||||
show engine PERFORMANCE_SCHEMA status;
|
show engine PERFORMANCE_SCHEMA status;
|
||||||
|
@ -45,11 +45,11 @@ performance_schema_max_file_classes 50
|
|||||||
performance_schema_max_file_handles 32768
|
performance_schema_max_file_handles 32768
|
||||||
performance_schema_max_file_instances 10000
|
performance_schema_max_file_instances 10000
|
||||||
performance_schema_max_mutex_classes 200
|
performance_schema_max_mutex_classes 200
|
||||||
performance_schema_max_mutex_instances 1000000
|
performance_schema_max_mutex_instances 10000
|
||||||
performance_schema_max_rwlock_classes 30
|
performance_schema_max_rwlock_classes 30
|
||||||
performance_schema_max_rwlock_instances 1000000
|
performance_schema_max_rwlock_instances 10000
|
||||||
performance_schema_max_table_handles 100000
|
performance_schema_max_table_handles 1000
|
||||||
performance_schema_max_table_instances 50000
|
performance_schema_max_table_instances 500
|
||||||
performance_schema_max_thread_classes 50
|
performance_schema_max_thread_classes 50
|
||||||
performance_schema_max_thread_instances 1000
|
performance_schema_max_thread_instances 1000
|
||||||
show engine PERFORMANCE_SCHEMA status;
|
show engine PERFORMANCE_SCHEMA status;
|
||||||
|
@ -45,11 +45,11 @@ performance_schema_max_file_classes 50
|
|||||||
performance_schema_max_file_handles 32768
|
performance_schema_max_file_handles 32768
|
||||||
performance_schema_max_file_instances 10000
|
performance_schema_max_file_instances 10000
|
||||||
performance_schema_max_mutex_classes 200
|
performance_schema_max_mutex_classes 200
|
||||||
performance_schema_max_mutex_instances 1000000
|
performance_schema_max_mutex_instances 10000
|
||||||
performance_schema_max_rwlock_classes 30
|
performance_schema_max_rwlock_classes 30
|
||||||
performance_schema_max_rwlock_instances 1000000
|
performance_schema_max_rwlock_instances 10000
|
||||||
performance_schema_max_table_handles 100000
|
performance_schema_max_table_handles 1000
|
||||||
performance_schema_max_table_instances 50000
|
performance_schema_max_table_instances 500
|
||||||
performance_schema_max_thread_classes 50
|
performance_schema_max_thread_classes 50
|
||||||
performance_schema_max_thread_instances 1000
|
performance_schema_max_thread_instances 1000
|
||||||
show engine PERFORMANCE_SCHEMA status;
|
show engine PERFORMANCE_SCHEMA status;
|
||||||
|
64
mysql-test/suite/perfschema/t/checksum.test
Normal file
64
mysql-test/suite/perfschema/t/checksum.test
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; version 2 of the License.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software Foundation,
|
||||||
|
# 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */
|
||||||
|
|
||||||
|
# Tests for PERFORMANCE_SCHEMA
|
||||||
|
|
||||||
|
--source include/not_embedded.inc
|
||||||
|
--source include/have_perfschema.inc
|
||||||
|
|
||||||
|
#
|
||||||
|
# The checksum value itself is random (data is volatile),
|
||||||
|
# just testing that this does not crash
|
||||||
|
#
|
||||||
|
--disable_result_log
|
||||||
|
|
||||||
|
checksum table performance_schema.COND_INSTANCES;
|
||||||
|
checksum table performance_schema.EVENTS_WAITS_CURRENT;
|
||||||
|
checksum table performance_schema.EVENTS_WAITS_HISTORY;
|
||||||
|
checksum table performance_schema.EVENTS_WAITS_HISTORY_LONG;
|
||||||
|
checksum table performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE;
|
||||||
|
checksum table performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME;
|
||||||
|
checksum table performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME;
|
||||||
|
checksum table performance_schema.FILE_INSTANCES;
|
||||||
|
checksum table performance_schema.FILE_SUMMARY_BY_EVENT_NAME;
|
||||||
|
checksum table performance_schema.FILE_SUMMARY_BY_INSTANCE;
|
||||||
|
checksum table performance_schema.MUTEX_INSTANCES;
|
||||||
|
checksum table performance_schema.PERFORMANCE_TIMERS;
|
||||||
|
checksum table performance_schema.RWLOCK_INSTANCES;
|
||||||
|
checksum table performance_schema.SETUP_CONSUMERS;
|
||||||
|
checksum table performance_schema.SETUP_INSTRUMENTS;
|
||||||
|
checksum table performance_schema.SETUP_TIMERS;
|
||||||
|
checksum table performance_schema.THREADS;
|
||||||
|
|
||||||
|
checksum table performance_schema.COND_INSTANCES extended;
|
||||||
|
checksum table performance_schema.EVENTS_WAITS_CURRENT extended;
|
||||||
|
checksum table performance_schema.EVENTS_WAITS_HISTORY extended;
|
||||||
|
checksum table performance_schema.EVENTS_WAITS_HISTORY_LONG extended;
|
||||||
|
checksum table performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE extended;
|
||||||
|
checksum table performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME extended;
|
||||||
|
checksum table performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME extended;
|
||||||
|
checksum table performance_schema.FILE_INSTANCES extended;
|
||||||
|
checksum table performance_schema.FILE_SUMMARY_BY_EVENT_NAME extended;
|
||||||
|
checksum table performance_schema.FILE_SUMMARY_BY_INSTANCE extended;
|
||||||
|
checksum table performance_schema.MUTEX_INSTANCES extended;
|
||||||
|
checksum table performance_schema.PERFORMANCE_TIMERS extended;
|
||||||
|
checksum table performance_schema.RWLOCK_INSTANCES extended;
|
||||||
|
checksum table performance_schema.SETUP_CONSUMERS extended;
|
||||||
|
checksum table performance_schema.SETUP_INSTRUMENTS extended;
|
||||||
|
checksum table performance_schema.SETUP_TIMERS extended;
|
||||||
|
checksum table performance_schema.THREADS extended;
|
||||||
|
|
||||||
|
--enable_result_log
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
# Copyright (C) 2009 Sun Microsystems, Inc
|
# Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License as published by
|
# it under the terms of the GNU General Public License as published by
|
||||||
@ -10,8 +10,8 @@
|
|||||||
# GNU General Public License for more details.
|
# GNU General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software Foundation,
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA
|
||||||
|
|
||||||
# Tests for PERFORMANCE_SCHEMA
|
# Tests for PERFORMANCE_SCHEMA
|
||||||
|
|
||||||
@ -43,10 +43,6 @@ select count(name) from MUTEX_INSTANCES
|
|||||||
select count(name) from MUTEX_INSTANCES
|
select count(name) from MUTEX_INSTANCES
|
||||||
where name like "wait/synch/mutex/mysys/THR_LOCK_myisam";
|
where name like "wait/synch/mutex/mysys/THR_LOCK_myisam";
|
||||||
|
|
||||||
# Does not exist in mysql 5.5, 6.0 only
|
|
||||||
# select count(name) from MUTEX_INSTANCES
|
|
||||||
# where name like "wait/synch/mutex/mysys/THR_LOCK_myisam_log";
|
|
||||||
|
|
||||||
select count(name) from MUTEX_INSTANCES
|
select count(name) from MUTEX_INSTANCES
|
||||||
where name like "wait/synch/mutex/mysys/THR_LOCK_heap";
|
where name like "wait/synch/mutex/mysys/THR_LOCK_heap";
|
||||||
|
|
||||||
@ -83,11 +79,6 @@ select count(name) from MUTEX_INSTANCES
|
|||||||
select count(name) from MUTEX_INSTANCES
|
select count(name) from MUTEX_INSTANCES
|
||||||
where name like "wait/synch/mutex/sql/LOCK_delayed_insert";
|
where name like "wait/synch/mutex/sql/LOCK_delayed_insert";
|
||||||
|
|
||||||
# Named LOCK_uuid_short in 6.0 only
|
|
||||||
# select count(name) from MUTEX_INSTANCES
|
|
||||||
# where name like "wait/synch/mutex/sql/LOCK_uuid_short";
|
|
||||||
|
|
||||||
# Named LOCK_uuid_generator in 5.5, LOCK_uuid_short in 6.0
|
|
||||||
select count(name) from MUTEX_INSTANCES
|
select count(name) from MUTEX_INSTANCES
|
||||||
where name like "wait/synch/mutex/sql/LOCK_uuid_generator";
|
where name like "wait/synch/mutex/sql/LOCK_uuid_generator";
|
||||||
|
|
||||||
@ -130,14 +121,16 @@ select count(name) from MUTEX_INSTANCES
|
|||||||
select count(name) from MUTEX_INSTANCES
|
select count(name) from MUTEX_INSTANCES
|
||||||
where name like "wait/synch/mutex/sql/LOCK_rpl_status";
|
where name like "wait/synch/mutex/sql/LOCK_rpl_status";
|
||||||
|
|
||||||
select count(name) from MUTEX_INSTANCES
|
# LOG_INFO object are created on demand, and are not global.
|
||||||
where name like "wait/synch/mutex/sql/LOG_INFO::lock";
|
# select count(name) from MUTEX_INSTANCES
|
||||||
|
# where name like "wait/synch/mutex/sql/LOG_INFO::lock";
|
||||||
|
|
||||||
select count(name) from MUTEX_INSTANCES
|
select count(name) from MUTEX_INSTANCES
|
||||||
where name like "wait/synch/mutex/sql/Query_cache::structure_guard_mutex";
|
where name like "wait/synch/mutex/sql/Query_cache::structure_guard_mutex";
|
||||||
|
|
||||||
select count(name) from MUTEX_INSTANCES
|
# The event scheduler may be disabled
|
||||||
where name like "wait/synch/mutex/sql/Event_scheduler::LOCK_scheduler_state";
|
# select count(name) from MUTEX_INSTANCES
|
||||||
|
# where name like "wait/synch/mutex/sql/Event_scheduler::LOCK_scheduler_state";
|
||||||
|
|
||||||
select count(name) from MUTEX_INSTANCES
|
select count(name) from MUTEX_INSTANCES
|
||||||
where name like "wait/synch/mutex/sql/LOCK_event_metadata";
|
where name like "wait/synch/mutex/sql/LOCK_event_metadata";
|
||||||
@ -148,16 +141,11 @@ select count(name) from MUTEX_INSTANCES
|
|||||||
select count(name) from MUTEX_INSTANCES
|
select count(name) from MUTEX_INSTANCES
|
||||||
where name like "wait/synch/mutex/sql/LOCK_user_locks";
|
where name like "wait/synch/mutex/sql/LOCK_user_locks";
|
||||||
|
|
||||||
# Does not exist in mysql 5.5, 6.0 only
|
|
||||||
# select count(name) from MUTEX_INSTANCES
|
|
||||||
# where name like "wait/synch/mutex/sql/LOCK_mdl";
|
|
||||||
|
|
||||||
select count(name) from MUTEX_INSTANCES
|
select count(name) from MUTEX_INSTANCES
|
||||||
where name like "wait/synch/mutex/sql/Cversion_lock";
|
where name like "wait/synch/mutex/sql/Cversion_lock";
|
||||||
|
|
||||||
# Does not exist in mysql 5.5, 6.0 only
|
select count(name) from MUTEX_INSTANCES
|
||||||
# select count(name) from MUTEX_INSTANCES
|
where name like "wait/synch/mutex/sql/LOCK_audit_mask";
|
||||||
# where name like "wait/synch/mutex/sql/LOCK_audit_mask";
|
|
||||||
|
|
||||||
select count(name) from MUTEX_INSTANCES
|
select count(name) from MUTEX_INSTANCES
|
||||||
where name like "wait/synch/mutex/sql/LOCK_xid_cache";
|
where name like "wait/synch/mutex/sql/LOCK_xid_cache";
|
||||||
@ -165,28 +153,13 @@ select count(name) from MUTEX_INSTANCES
|
|||||||
select count(name) from MUTEX_INSTANCES
|
select count(name) from MUTEX_INSTANCES
|
||||||
where name like "wait/synch/mutex/sql/LOCK_plugin";
|
where name like "wait/synch/mutex/sql/LOCK_plugin";
|
||||||
|
|
||||||
select count(name) from MUTEX_INSTANCES
|
# Not a global variable, may be destroyed already.
|
||||||
where name like "wait/synch/mutex/sql/LOCK_gdl";
|
# select count(name) from MUTEX_INSTANCES
|
||||||
|
# where name like "wait/synch/mutex/sql/LOCK_gdl";
|
||||||
|
|
||||||
select count(name) from MUTEX_INSTANCES
|
select count(name) from MUTEX_INSTANCES
|
||||||
where name like "wait/synch/mutex/sql/tz_LOCK";
|
where name like "wait/synch/mutex/sql/tz_LOCK";
|
||||||
|
|
||||||
# Does not exist in mysql 5.5, 6.0 only
|
|
||||||
# select count(name) from MUTEX_INSTANCES
|
|
||||||
# where name like "wait/synch/mutex/sql/slave_start";
|
|
||||||
|
|
||||||
# Does not exist in mysql 5.5, 6.0 only
|
|
||||||
# select count(name) from MUTEX_INSTANCES
|
|
||||||
# where name like "wait/synch/mutex/sql/BML_class::THR_LOCK_BML";
|
|
||||||
|
|
||||||
# Does not exist in mysql 5.5, 6.0 only
|
|
||||||
# select count(name) from MUTEX_INSTANCES
|
|
||||||
# where name like "wait/synch/mutex/sql/BML_class::THR_LOCK_BML_active";
|
|
||||||
|
|
||||||
# Does not exist in mysql 5.5, 6.0 only
|
|
||||||
# select count(name) from MUTEX_INSTANCES
|
|
||||||
# where name like "wait/synch/mutex/sql/BML_class::THR_LOCK_BML_get";
|
|
||||||
|
|
||||||
# Verify that these global rwlocks have been properly initilized in sql
|
# Verify that these global rwlocks have been properly initilized in sql
|
||||||
|
|
||||||
select count(name) from RWLOCK_INSTANCES
|
select count(name) from RWLOCK_INSTANCES
|
||||||
@ -230,25 +203,10 @@ select count(name) from COND_INSTANCES
|
|||||||
select count(name) from COND_INSTANCES
|
select count(name) from COND_INSTANCES
|
||||||
where name like "wait/synch/cond/sql/Query_cache::COND_cache_status_changed";
|
where name like "wait/synch/cond/sql/Query_cache::COND_cache_status_changed";
|
||||||
|
|
||||||
select count(name) from COND_INSTANCES
|
# The event scheduler may be disabled
|
||||||
where name like "wait/synch/cond/sql/Event_scheduler::COND_state";
|
# select count(name) from COND_INSTANCES
|
||||||
|
# where name like "wait/synch/cond/sql/Event_scheduler::COND_state";
|
||||||
|
|
||||||
select count(name) from COND_INSTANCES
|
select count(name) from COND_INSTANCES
|
||||||
where name like "wait/synch/cond/sql/COND_queue_state";
|
where name like "wait/synch/cond/sql/COND_queue_state";
|
||||||
|
|
||||||
# Does not exist in mysql 5.5, 6.0 only
|
|
||||||
# select count(name) from COND_INSTANCES
|
|
||||||
# where name like "wait/synch/cond/sql/COND_mdl";
|
|
||||||
|
|
||||||
# Does not exist in mysql 5.5, 6.0 only
|
|
||||||
# select count(name) from COND_INSTANCES
|
|
||||||
# where name like "wait/synch/cond/sql/BML_class::COND_BML";
|
|
||||||
|
|
||||||
# Does not exist in mysql 5.5, 6.0 only
|
|
||||||
# select count(name) from COND_INSTANCES
|
|
||||||
# where name like "wait/synch/cond/sql/BML_class::COND_BML_registered";
|
|
||||||
|
|
||||||
# Does not exist in mysql 5.5, 6.0 only
|
|
||||||
# select count(name) from COND_INSTANCES
|
|
||||||
# where name like "wait/synch/cond/sql/BML_class::COND_BML_release";
|
|
||||||
|
|
||||||
|
@ -745,3 +745,28 @@
|
|||||||
Memcheck:Addr1
|
Memcheck:Addr1
|
||||||
fun:buf_buddy_relocate
|
fun:buf_buddy_relocate
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# See related Bug#56666
|
||||||
|
# Race condition between the server main thread and the kill server thread.
|
||||||
|
#
|
||||||
|
# Because of this race condition, the call to shutdown_performance_schema()
|
||||||
|
# was commented in sql/mysqld.cc, causing the reported leaks.
|
||||||
|
#
|
||||||
|
|
||||||
|
{
|
||||||
|
missing shutdown_performance_schema 1
|
||||||
|
Memcheck:Leak
|
||||||
|
fun:malloc
|
||||||
|
fun:_Z10pfs_mallocmi
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
missing shutdown_performance_schema 2
|
||||||
|
Memcheck:Leak
|
||||||
|
fun:malloc
|
||||||
|
fun:my_malloc
|
||||||
|
fun:_lf_alloc_new
|
||||||
|
fun:lf_hash_insert
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -64,7 +64,7 @@ my_bool my_gethwaddr(uchar *to)
|
|||||||
if (ifm->ifm_type == RTM_IFINFO)
|
if (ifm->ifm_type == RTM_IFINFO)
|
||||||
{
|
{
|
||||||
sdl = (struct sockaddr_dl *)(ifm + 1);
|
sdl = (struct sockaddr_dl *)(ifm + 1);
|
||||||
addr=LLADDR(sdl);
|
addr=(uchar *)LLADDR(sdl);
|
||||||
res=memcpy_and_test(to, addr, ETHER_ADDR_LEN);
|
res=memcpy_and_test(to, addr, ETHER_ADDR_LEN);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -100,9 +100,9 @@ static const char cur_dir_name[]= {FN_CURLIB, 0};
|
|||||||
RETURN
|
RETURN
|
||||||
0 if ok, !=0 if error
|
0 if ok, !=0 if error
|
||||||
*/
|
*/
|
||||||
|
#ifdef NEED_EXPLICIT_SYNC_DIR
|
||||||
int my_sync_dir(const char *dir_name, myf my_flags)
|
int my_sync_dir(const char *dir_name, myf my_flags)
|
||||||
{
|
{
|
||||||
#ifdef NEED_EXPLICIT_SYNC_DIR
|
|
||||||
File dir_fd;
|
File dir_fd;
|
||||||
int res= 0;
|
int res= 0;
|
||||||
const char *correct_dir_name;
|
const char *correct_dir_name;
|
||||||
@ -124,10 +124,14 @@ int my_sync_dir(const char *dir_name, myf my_flags)
|
|||||||
else
|
else
|
||||||
res= 1;
|
res= 1;
|
||||||
DBUG_RETURN(res);
|
DBUG_RETURN(res);
|
||||||
#else
|
|
||||||
return 0;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
#else /* NEED_EXPLICIT_SYNC_DIR */
|
||||||
|
int my_sync_dir(const char *dir_name __attribute__((unused)),
|
||||||
|
myf my_flags __attribute__((unused)))
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif /* NEED_EXPLICIT_SYNC_DIR */
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -141,15 +145,18 @@ int my_sync_dir(const char *dir_name, myf my_flags)
|
|||||||
RETURN
|
RETURN
|
||||||
0 if ok, !=0 if error
|
0 if ok, !=0 if error
|
||||||
*/
|
*/
|
||||||
|
#ifdef NEED_EXPLICIT_SYNC_DIR
|
||||||
int my_sync_dir_by_file(const char *file_name, myf my_flags)
|
int my_sync_dir_by_file(const char *file_name, myf my_flags)
|
||||||
{
|
{
|
||||||
#ifdef NEED_EXPLICIT_SYNC_DIR
|
|
||||||
char dir_name[FN_REFLEN];
|
char dir_name[FN_REFLEN];
|
||||||
size_t dir_name_length;
|
size_t dir_name_length;
|
||||||
dirname_part(dir_name, file_name, &dir_name_length);
|
dirname_part(dir_name, file_name, &dir_name_length);
|
||||||
return my_sync_dir(dir_name, my_flags);
|
return my_sync_dir(dir_name, my_flags);
|
||||||
#else
|
|
||||||
return 0;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
#else /* NEED_EXPLICIT_SYNC_DIR */
|
||||||
|
int my_sync_dir_by_file(const char *file_name __attribute__((unused)),
|
||||||
|
myf my_flags __attribute__((unused)))
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif /* NEED_EXPLICIT_SYNC_DIR */
|
||||||
|
@ -5284,11 +5284,8 @@ int MYSQL_BIN_LOG::wait_for_update_bin_log(THD* thd,
|
|||||||
const struct timespec *timeout)
|
const struct timespec *timeout)
|
||||||
{
|
{
|
||||||
int ret= 0;
|
int ret= 0;
|
||||||
const char* old_msg = thd->proc_info;
|
|
||||||
DBUG_ENTER("wait_for_update_bin_log");
|
DBUG_ENTER("wait_for_update_bin_log");
|
||||||
old_msg= thd->enter_cond(&update_cond, &LOCK_log,
|
|
||||||
"Master has sent all binlog to slave; "
|
|
||||||
"waiting for binlog to be updated");
|
|
||||||
if (!timeout)
|
if (!timeout)
|
||||||
mysql_cond_wait(&update_cond, &LOCK_log);
|
mysql_cond_wait(&update_cond, &LOCK_log);
|
||||||
else
|
else
|
||||||
|
@ -460,6 +460,7 @@ public:
|
|||||||
inline char* get_log_fname() { return log_file_name; }
|
inline char* get_log_fname() { return log_file_name; }
|
||||||
inline char* get_name() { return name; }
|
inline char* get_name() { return name; }
|
||||||
inline mysql_mutex_t* get_log_lock() { return &LOCK_log; }
|
inline mysql_mutex_t* get_log_lock() { return &LOCK_log; }
|
||||||
|
inline mysql_cond_t* get_log_cond() { return &update_cond; }
|
||||||
inline IO_CACHE* get_log_file() { return &log_file; }
|
inline IO_CACHE* get_log_file() { return &log_file; }
|
||||||
|
|
||||||
inline void lock_index() { mysql_mutex_lock(&LOCK_index);}
|
inline void lock_index() { mysql_mutex_lock(&LOCK_index);}
|
||||||
|
@ -1395,6 +1395,12 @@ static void mysqld_exit(int exit_code)
|
|||||||
mysql_audit_finalize();
|
mysql_audit_finalize();
|
||||||
clean_up_mutexes();
|
clean_up_mutexes();
|
||||||
clean_up_error_log_mutex();
|
clean_up_error_log_mutex();
|
||||||
|
#ifdef WITH_PERFSCHEMA_STORAGE_ENGINE
|
||||||
|
/*
|
||||||
|
Bug#56666 needs to be fixed before calling:
|
||||||
|
shutdown_performance_schema();
|
||||||
|
*/
|
||||||
|
#endif
|
||||||
my_end(opt_endinfo ? MY_CHECK_ERROR | MY_GIVE_INFO : 0);
|
my_end(opt_endinfo ? MY_CHECK_ERROR | MY_GIVE_INFO : 0);
|
||||||
exit(exit_code); /* purecov: inspected */
|
exit(exit_code); /* purecov: inspected */
|
||||||
}
|
}
|
||||||
@ -2733,6 +2739,11 @@ pthread_handler_t signal_hand(void *arg __attribute__((unused)))
|
|||||||
if (!abort_loop)
|
if (!abort_loop)
|
||||||
{
|
{
|
||||||
abort_loop=1; // mark abort for threads
|
abort_loop=1; // mark abort for threads
|
||||||
|
#ifdef HAVE_PSI_INTERFACE
|
||||||
|
/* Delete the instrumentation for the signal thread */
|
||||||
|
if (likely(PSI_server != NULL))
|
||||||
|
PSI_server->delete_current_thread();
|
||||||
|
#endif
|
||||||
#ifdef USE_ONE_SIGNAL_HAND
|
#ifdef USE_ONE_SIGNAL_HAND
|
||||||
pthread_t tmp;
|
pthread_t tmp;
|
||||||
if (mysql_thread_create(0, /* Not instrumented */
|
if (mysql_thread_create(0, /* Not instrumented */
|
||||||
@ -4588,6 +4599,15 @@ int mysqld_main(int argc, char **argv)
|
|||||||
#endif
|
#endif
|
||||||
#endif /* __WIN__ */
|
#endif /* __WIN__ */
|
||||||
|
|
||||||
|
#ifdef HAVE_PSI_INTERFACE
|
||||||
|
/*
|
||||||
|
Disable the main thread instrumentation,
|
||||||
|
to avoid recording events during the shutdown.
|
||||||
|
*/
|
||||||
|
if (PSI_server)
|
||||||
|
PSI_server->delete_current_thread();
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Wait until cleanup is done */
|
/* Wait until cleanup is done */
|
||||||
mysql_mutex_lock(&LOCK_thread_count);
|
mysql_mutex_lock(&LOCK_thread_count);
|
||||||
while (!ready_to_exit)
|
while (!ready_to_exit)
|
||||||
@ -4605,18 +4625,6 @@ int mysqld_main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
clean_up(1);
|
clean_up(1);
|
||||||
#ifdef HAVE_PSI_INTERFACE
|
|
||||||
/*
|
|
||||||
Disable the instrumentation, to avoid recording events
|
|
||||||
during the shutdown.
|
|
||||||
*/
|
|
||||||
if (PSI_server)
|
|
||||||
{
|
|
||||||
PSI_server->delete_current_thread();
|
|
||||||
PSI_server= NULL;
|
|
||||||
}
|
|
||||||
shutdown_performance_schema();
|
|
||||||
#endif
|
|
||||||
mysqld_exit(0);
|
mysqld_exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,6 +91,9 @@ public:
|
|||||||
longlong def_val, PolyLock *lock, enum binlog_status_enum binlog_status_arg,
|
longlong def_val, PolyLock *lock, enum binlog_status_enum binlog_status_arg,
|
||||||
on_check_function on_check_func, on_update_function on_update_func,
|
on_check_function on_check_func, on_update_function on_update_func,
|
||||||
uint deprecated_version, const char *substitute, int parse_flag);
|
uint deprecated_version, const char *substitute, int parse_flag);
|
||||||
|
|
||||||
|
virtual ~sys_var() {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
All the cleanup procedures should be performed here
|
All the cleanup procedures should be performed here
|
||||||
*/
|
*/
|
||||||
|
@ -448,6 +448,8 @@ void mysql_binlog_send(THD* thd, char* log_ident, my_off_t pos,
|
|||||||
const char *errmsg = "Unknown error";
|
const char *errmsg = "Unknown error";
|
||||||
NET* net = &thd->net;
|
NET* net = &thd->net;
|
||||||
mysql_mutex_t *log_lock;
|
mysql_mutex_t *log_lock;
|
||||||
|
mysql_cond_t *log_cond;
|
||||||
|
|
||||||
bool binlog_can_be_corrupted= FALSE;
|
bool binlog_can_be_corrupted= FALSE;
|
||||||
#ifndef DBUG_OFF
|
#ifndef DBUG_OFF
|
||||||
int left_events = max_binlog_dump_events;
|
int left_events = max_binlog_dump_events;
|
||||||
@ -592,6 +594,7 @@ impossible position";
|
|||||||
only at shutdown).
|
only at shutdown).
|
||||||
*/
|
*/
|
||||||
log_lock= mysql_bin_log.get_log_lock();
|
log_lock= mysql_bin_log.get_log_lock();
|
||||||
|
log_cond= mysql_bin_log.get_log_cond();
|
||||||
if (pos > BIN_LOG_HEADER_SIZE)
|
if (pos > BIN_LOG_HEADER_SIZE)
|
||||||
{
|
{
|
||||||
/* reset transmit packet for the event read from binary log
|
/* reset transmit packet for the event read from binary log
|
||||||
@ -826,6 +829,7 @@ impossible position";
|
|||||||
#ifndef DBUG_OFF
|
#ifndef DBUG_OFF
|
||||||
ulong hb_info_counter= 0;
|
ulong hb_info_counter= 0;
|
||||||
#endif
|
#endif
|
||||||
|
const char* old_msg= thd->proc_info;
|
||||||
signal_cnt= mysql_bin_log.signal_cnt;
|
signal_cnt= mysql_bin_log.signal_cnt;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
@ -834,6 +838,9 @@ impossible position";
|
|||||||
DBUG_ASSERT(heartbeat_ts && heartbeat_period != 0);
|
DBUG_ASSERT(heartbeat_ts && heartbeat_period != 0);
|
||||||
set_timespec_nsec(*heartbeat_ts, heartbeat_period);
|
set_timespec_nsec(*heartbeat_ts, heartbeat_period);
|
||||||
}
|
}
|
||||||
|
thd->enter_cond(log_cond, log_lock,
|
||||||
|
"Master has sent all binlog to slave; "
|
||||||
|
"waiting for binlog to be updated");
|
||||||
ret= mysql_bin_log.wait_for_update_bin_log(thd, heartbeat_ts);
|
ret= mysql_bin_log.wait_for_update_bin_log(thd, heartbeat_ts);
|
||||||
DBUG_ASSERT(ret == 0 || (heartbeat_period != 0 && coord != NULL));
|
DBUG_ASSERT(ret == 0 || (heartbeat_period != 0 && coord != NULL));
|
||||||
if (ret == ETIMEDOUT || ret == ETIME)
|
if (ret == ETIMEDOUT || ret == ETIME)
|
||||||
@ -849,12 +856,15 @@ impossible position";
|
|||||||
#endif
|
#endif
|
||||||
/* reset transmit packet for the heartbeat event */
|
/* reset transmit packet for the heartbeat event */
|
||||||
if (reset_transmit_packet(thd, flags, &ev_offset, &errmsg))
|
if (reset_transmit_packet(thd, flags, &ev_offset, &errmsg))
|
||||||
|
{
|
||||||
|
thd->exit_cond(old_msg);
|
||||||
goto err;
|
goto err;
|
||||||
|
}
|
||||||
if (send_heartbeat_event(net, packet, coord))
|
if (send_heartbeat_event(net, packet, coord))
|
||||||
{
|
{
|
||||||
errmsg = "Failed on my_net_write()";
|
errmsg = "Failed on my_net_write()";
|
||||||
my_errno= ER_UNKNOWN_ERROR;
|
my_errno= ER_UNKNOWN_ERROR;
|
||||||
mysql_mutex_unlock(log_lock);
|
thd->exit_cond(old_msg);
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -863,7 +873,7 @@ impossible position";
|
|||||||
DBUG_PRINT("wait",("binary log received update or a broadcast signal caught"));
|
DBUG_PRINT("wait",("binary log received update or a broadcast signal caught"));
|
||||||
}
|
}
|
||||||
} while (signal_cnt == mysql_bin_log.signal_cnt && !thd->killed);
|
} while (signal_cnt == mysql_bin_log.signal_cnt && !thd->killed);
|
||||||
mysql_mutex_unlock(log_lock);
|
thd->exit_cond(old_msg);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
|
|
||||||
#include "my_global.h"
|
#include "my_global.h"
|
||||||
#include "my_pthread.h"
|
#include "my_pthread.h"
|
||||||
|
#include "my_atomic.h"
|
||||||
#include "sql_plugin.h"
|
#include "sql_plugin.h"
|
||||||
#include "mysql/plugin.h"
|
#include "mysql/plugin.h"
|
||||||
#include "ha_perfschema.h"
|
#include "ha_perfschema.h"
|
||||||
@ -28,6 +29,17 @@
|
|||||||
#include "pfs_instr_class.h"
|
#include "pfs_instr_class.h"
|
||||||
#include "pfs_instr.h"
|
#include "pfs_instr.h"
|
||||||
|
|
||||||
|
#ifdef MY_ATOMIC_MODE_DUMMY
|
||||||
|
/*
|
||||||
|
The performance schema can can not function with MY_ATOMIC_MODE_DUMMY,
|
||||||
|
a fully functional implementation of MY_ATOMIC should be used instead.
|
||||||
|
If the build fails with this error message:
|
||||||
|
- either use a different ./configure --with-atomic-ops option
|
||||||
|
- or do not build with the performance schema.
|
||||||
|
*/
|
||||||
|
#error "The performance schema needs a functional MY_ATOMIC implementation."
|
||||||
|
#endif
|
||||||
|
|
||||||
handlerton *pfs_hton= NULL;
|
handlerton *pfs_hton= NULL;
|
||||||
|
|
||||||
static handler* pfs_create_handler(handlerton *hton,
|
static handler* pfs_create_handler(handlerton *hton,
|
||||||
|
@ -223,6 +223,8 @@ int PFS_engine_table::read_row(TABLE *table,
|
|||||||
Field **fields)
|
Field **fields)
|
||||||
{
|
{
|
||||||
my_bitmap_map *org_bitmap;
|
my_bitmap_map *org_bitmap;
|
||||||
|
Field *f;
|
||||||
|
Field **fields_reset;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Make sure the table structure is as expected before mapping
|
Make sure the table structure is as expected before mapping
|
||||||
@ -240,6 +242,16 @@ int PFS_engine_table::read_row(TABLE *table,
|
|||||||
|
|
||||||
/* We internally write to Fields to support the read interface */
|
/* We internally write to Fields to support the read interface */
|
||||||
org_bitmap= dbug_tmp_use_all_columns(table, table->write_set);
|
org_bitmap= dbug_tmp_use_all_columns(table, table->write_set);
|
||||||
|
|
||||||
|
/*
|
||||||
|
Some callers of the storage engine interface do not honor the
|
||||||
|
f->is_null() flag, and will attempt to read the data itself.
|
||||||
|
A known offender is mysql_checksum_table().
|
||||||
|
For robustness, reset every field.
|
||||||
|
*/
|
||||||
|
for (fields_reset= fields; (f= *fields_reset) ; fields_reset++)
|
||||||
|
f->reset();
|
||||||
|
|
||||||
int result= read_row_values(table, buf, fields, read_all);
|
int result= read_row_values(table, buf, fields, read_all);
|
||||||
dbug_tmp_restore_column_map(table->write_set, org_bitmap);
|
dbug_tmp_restore_column_map(table->write_set, org_bitmap);
|
||||||
|
|
||||||
|
@ -187,7 +187,7 @@ void table_events_waits_common::clear_object_columns()
|
|||||||
*/
|
*/
|
||||||
void table_events_waits_common::make_row(bool thread_own_wait,
|
void table_events_waits_common::make_row(bool thread_own_wait,
|
||||||
PFS_thread *pfs_thread,
|
PFS_thread *pfs_thread,
|
||||||
PFS_events_waits *wait)
|
volatile PFS_events_waits *wait)
|
||||||
{
|
{
|
||||||
pfs_lock lock;
|
pfs_lock lock;
|
||||||
PFS_thread *safe_thread;
|
PFS_thread *safe_thread;
|
||||||
@ -251,21 +251,27 @@ void table_events_waits_common::make_row(bool thread_own_wait,
|
|||||||
case WAIT_CLASS_TABLE:
|
case WAIT_CLASS_TABLE:
|
||||||
m_row.m_object_type= "TABLE";
|
m_row.m_object_type= "TABLE";
|
||||||
m_row.m_object_type_length= 5;
|
m_row.m_object_type_length= 5;
|
||||||
memcpy(m_row.m_object_schema, wait->m_schema_name,
|
|
||||||
wait->m_schema_name_length);
|
|
||||||
m_row.m_object_schema_length= wait->m_schema_name_length;
|
m_row.m_object_schema_length= wait->m_schema_name_length;
|
||||||
memcpy(m_row.m_object_name, wait->m_object_name,
|
if (unlikely((m_row.m_object_schema_length == 0) ||
|
||||||
wait->m_object_name_length);
|
(m_row.m_object_schema_length > sizeof(m_row.m_object_schema))))
|
||||||
|
return;
|
||||||
|
memcpy(m_row.m_object_schema, wait->m_schema_name, m_row.m_object_schema_length);
|
||||||
m_row.m_object_name_length= wait->m_object_name_length;
|
m_row.m_object_name_length= wait->m_object_name_length;
|
||||||
|
if (unlikely((m_row.m_object_name_length == 0) ||
|
||||||
|
(m_row.m_object_name_length > sizeof(m_row.m_object_name))))
|
||||||
|
return;
|
||||||
|
memcpy(m_row.m_object_name, wait->m_object_name, m_row.m_object_name_length);
|
||||||
safe_class= &global_table_class;
|
safe_class= &global_table_class;
|
||||||
break;
|
break;
|
||||||
case WAIT_CLASS_FILE:
|
case WAIT_CLASS_FILE:
|
||||||
m_row.m_object_type= "FILE";
|
m_row.m_object_type= "FILE";
|
||||||
m_row.m_object_type_length= 4;
|
m_row.m_object_type_length= 4;
|
||||||
m_row.m_object_schema_length= 0;
|
m_row.m_object_schema_length= 0;
|
||||||
memcpy(m_row.m_object_name, wait->m_object_name,
|
|
||||||
wait->m_object_name_length);
|
|
||||||
m_row.m_object_name_length= wait->m_object_name_length;
|
m_row.m_object_name_length= wait->m_object_name_length;
|
||||||
|
if (unlikely((m_row.m_object_name_length == 0) ||
|
||||||
|
(m_row.m_object_name_length > sizeof(m_row.m_object_name))))
|
||||||
|
return;
|
||||||
|
memcpy(m_row.m_object_name, wait->m_object_name, m_row.m_object_name_length);
|
||||||
safe_class= sanitize_file_class((PFS_file_class*) wait->m_class);
|
safe_class= sanitize_file_class((PFS_file_class*) wait->m_class);
|
||||||
break;
|
break;
|
||||||
case NO_WAIT_CLASS:
|
case NO_WAIT_CLASS:
|
||||||
|
@ -137,7 +137,7 @@ protected:
|
|||||||
void clear_object_columns();
|
void clear_object_columns();
|
||||||
|
|
||||||
void make_row(bool thread_own_wait, PFS_thread *pfs_thread,
|
void make_row(bool thread_own_wait, PFS_thread *pfs_thread,
|
||||||
PFS_events_waits *wait);
|
volatile PFS_events_waits *wait);
|
||||||
|
|
||||||
/** Current row. */
|
/** Current row. */
|
||||||
row_events_waits m_row;
|
row_events_waits m_row;
|
||||||
|
@ -255,7 +255,7 @@ static char *process_int_arg(char *to, char *end, size_t length,
|
|||||||
if ((to_length= (size_t) (end-to)) < 16 || length)
|
if ((to_length= (size_t) (end-to)) < 16 || length)
|
||||||
store_start= buff;
|
store_start= buff;
|
||||||
|
|
||||||
if (arg_type == 'd')
|
if (arg_type == 'd' || arg_type == 'i')
|
||||||
store_end= longlong10_to_str(par, store_start, -10);
|
store_end= longlong10_to_str(par, store_start, -10);
|
||||||
else if (arg_type == 'u')
|
else if (arg_type == 'u')
|
||||||
store_end= longlong10_to_str(par, store_start, 10);
|
store_end= longlong10_to_str(par, store_start, 10);
|
||||||
@ -399,6 +399,7 @@ start:
|
|||||||
args_arr[i].double_arg= va_arg(ap, double);
|
args_arr[i].double_arg= va_arg(ap, double);
|
||||||
break;
|
break;
|
||||||
case 'd':
|
case 'd':
|
||||||
|
case 'i':
|
||||||
case 'u':
|
case 'u':
|
||||||
case 'x':
|
case 'x':
|
||||||
case 'X':
|
case 'X':
|
||||||
@ -406,7 +407,7 @@ start:
|
|||||||
case 'p':
|
case 'p':
|
||||||
if (args_arr[i].have_longlong)
|
if (args_arr[i].have_longlong)
|
||||||
args_arr[i].longlong_arg= va_arg(ap,longlong);
|
args_arr[i].longlong_arg= va_arg(ap,longlong);
|
||||||
else if (args_arr[i].arg_type == 'd')
|
else if (args_arr[i].arg_type == 'd' || args_arr[i].arg_type == 'i')
|
||||||
args_arr[i].longlong_arg= va_arg(ap, int);
|
args_arr[i].longlong_arg= va_arg(ap, int);
|
||||||
else
|
else
|
||||||
args_arr[i].longlong_arg= va_arg(ap, uint);
|
args_arr[i].longlong_arg= va_arg(ap, uint);
|
||||||
@ -458,6 +459,7 @@ start:
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'd':
|
case 'd':
|
||||||
|
case 'i':
|
||||||
case 'u':
|
case 'u':
|
||||||
case 'x':
|
case 'x':
|
||||||
case 'X':
|
case 'X':
|
||||||
@ -472,7 +474,7 @@ start:
|
|||||||
|
|
||||||
if (args_arr[print_arr[i].arg_idx].have_longlong)
|
if (args_arr[print_arr[i].arg_idx].have_longlong)
|
||||||
larg = args_arr[print_arr[i].arg_idx].longlong_arg;
|
larg = args_arr[print_arr[i].arg_idx].longlong_arg;
|
||||||
else if (print_arr[i].arg_type == 'd')
|
else if (print_arr[i].arg_type == 'd' || print_arr[i].arg_type == 'i' )
|
||||||
larg = (int) args_arr[print_arr[i].arg_idx].longlong_arg;
|
larg = (int) args_arr[print_arr[i].arg_idx].longlong_arg;
|
||||||
else
|
else
|
||||||
larg= (uint) args_arr[print_arr[i].arg_idx].longlong_arg;
|
larg= (uint) args_arr[print_arr[i].arg_idx].longlong_arg;
|
||||||
@ -615,8 +617,8 @@ size_t my_vsnprintf_ex(CHARSET_INFO *cs, char *to, size_t n,
|
|||||||
to= process_dbl_arg(to, end, width, d, *fmt);
|
to= process_dbl_arg(to, end, width, d, *fmt);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else if (*fmt == 'd' || *fmt == 'u' || *fmt == 'x' || *fmt == 'X' ||
|
else if (*fmt == 'd' || *fmt == 'i' || *fmt == 'u' || *fmt == 'x' ||
|
||||||
*fmt == 'p' || *fmt == 'o')
|
*fmt == 'X' || *fmt == 'p' || *fmt == 'o')
|
||||||
{
|
{
|
||||||
/* Integer parameter */
|
/* Integer parameter */
|
||||||
longlong larg;
|
longlong larg;
|
||||||
@ -625,7 +627,7 @@ size_t my_vsnprintf_ex(CHARSET_INFO *cs, char *to, size_t n,
|
|||||||
|
|
||||||
if (have_longlong)
|
if (have_longlong)
|
||||||
larg = va_arg(ap,longlong);
|
larg = va_arg(ap,longlong);
|
||||||
else if (*fmt == 'd')
|
else if (*fmt == 'd' || *fmt == 'i')
|
||||||
larg = va_arg(ap, int);
|
larg = va_arg(ap, int);
|
||||||
else
|
else
|
||||||
larg= va_arg(ap, uint);
|
larg= va_arg(ap, uint);
|
||||||
|
@ -31,7 +31,7 @@ void test1(const char *res, const char *fmt, ...)
|
|||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
plan(54);
|
plan(58);
|
||||||
|
|
||||||
test1("Constant string",
|
test1("Constant string",
|
||||||
"Constant string");
|
"Constant string");
|
||||||
@ -44,6 +44,8 @@ int main(void)
|
|||||||
"Format specifier c %c", '!');
|
"Format specifier c %c", '!');
|
||||||
test1("Format specifier d 1",
|
test1("Format specifier d 1",
|
||||||
"Format specifier d %d", 1);
|
"Format specifier d %d", 1);
|
||||||
|
test1("Format specifier i 1",
|
||||||
|
"Format specifier i %i", 1);
|
||||||
test1("Format specifier u 2",
|
test1("Format specifier u 2",
|
||||||
"Format specifier u %u", 2);
|
"Format specifier u %u", 2);
|
||||||
test1("Format specifier o 375",
|
test1("Format specifier o 375",
|
||||||
@ -77,6 +79,9 @@ int main(void)
|
|||||||
test1("Length modifiers work: 1 * -1 * 2 * 3",
|
test1("Length modifiers work: 1 * -1 * 2 * 3",
|
||||||
"Length modifiers work: %d * %ld * %lld * %zd", 1, -1L, 2LL, (size_t)3);
|
"Length modifiers work: %d * %ld * %lld * %zd", 1, -1L, 2LL, (size_t)3);
|
||||||
|
|
||||||
|
test1("Length modifiers work: 1 * -1 * 2 * 3",
|
||||||
|
"Length modifiers work: %i * %li * %lli * %zd", 1, -1L, 2LL, (size_t)3);
|
||||||
|
|
||||||
test1("long long X: 123456789abcdef0",
|
test1("long long X: 123456789abcdef0",
|
||||||
"long long X: %llx", 0x123456789abcdef0LL);
|
"long long X: %llx", 0x123456789abcdef0LL);
|
||||||
|
|
||||||
@ -121,6 +126,10 @@ int main(void)
|
|||||||
"Hello int, %d", 1);
|
"Hello int, %d", 1);
|
||||||
test1("Hello int, -1",
|
test1("Hello int, -1",
|
||||||
"Hello int, %d", -1);
|
"Hello int, %d", -1);
|
||||||
|
test1("Hello int, 1",
|
||||||
|
"Hello int, %i", 1);
|
||||||
|
test1("Hello int, -1",
|
||||||
|
"Hello int, %i", -1);
|
||||||
test1("Hello string 'I am a string'",
|
test1("Hello string 'I am a string'",
|
||||||
"Hello string '%s'", "I am a string");
|
"Hello string '%s'", "I am a string");
|
||||||
test1("Hello hack hack hack hack hack hack hack 1",
|
test1("Hello hack hack hack hack hack hack hack 1",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user