history entries. Lazy deletion isn't smart or useful here.
Backport from 5.1 .
include/my_sys.h:
Prepare for rename in 5.1.
mysql-test/r/profiling.result:
Backport tests from 5.1.
mysql-test/t/profiling.test:
Backport tests from 5.1.
sql/mysql_priv.h:
Backport changes from 5.1 .
sql/sp_head.cc:
Backport changes from 5.1 .
sql/sql_class.cc:
Backport changes from 5.1 .
sql/sql_parse.cc:
Backport changes from 5.1 .
sql/sql_profile.cc:
Push history-limiting code until after the code that adds new
history entries. Lazy deletion isn't smart or useful here.
Correct for 5.0 member existance and execution.
sql/sql_profile.h:
Backport changes from 5.1 .
sql/sql_show.cc:
Backport changes from 5.1 .
numbers, which uses "X.YeZ" notation when the exponent Z would be
less than -4. That behavior at -4 is not exactly what we want, and
our Decimal type offers smarter number representation. By changing
profiling to use Decimal types, we get more readable output.
sql/sql_profile.cc:
Change the DOUBLE I_S types to DECIMAL, so we get a smarter
floating-point number renderer.
sql/sql_show.cc:
Add MYSQL_TYPE_DECIMAL as a string-ish type that INFORMATION_SCHEMA
tables may use.
profiling. Also,
Bug#26938: profiling client hang if used before enabled
In the SHOW command, not sending header data because we had no
rows to send was a protocol violation. Porting the SHOW PROFILE
command to use the Information Schema table avoids that problem.
mysql-test/r/profiling.result:
Add headers of pre-profile SHOW test.
mysql-test/t/profiling.test:
Verify that the protocol isn't violated if we ask for profiling
info before profiling has recorded anything.
sql/sql_parse.cc:
Remove SQLCOM_SHOW_PROFILE and add a I_S schema table entry.
sql/sql_profile.cc:
Add SHOW column-names and a new function that takes profile options
set in the parser and packs a list of selected fields from the
I_S table implementation.
sql/sql_profile.h:
Remove unused functions and add a new function.
sql/sql_show.cc:
Add a pointer to the function that selects fields from I_S table
for SHOW command.
sql/sql_yacc.yy:
Prepare an I_S table for SHOW PROFILE.
sql/table.h:
Rename to match the intention.
halfway through a query (as happens in "SET SESSION PROFILING = ...")
has a few side-effects, the worst of which is a memory leak for
prepared statements, which poke directly from the parser into the
profiling code (we don't have the query text when we need it) and
that overwrites a pointer to heap-allocated memory when the previous
statement turns on profiling.
Instead, now set a flag when we begin a new statement that tracks
whether profiling is on _at the start_ of the query. Use that to
track whether we gather info.
Additionally, use that AND use the state of the profiling variable
after the end of a query to know whether to store information about
the query that just finished.
mysql-test/r/profiling.result:
Testing whether profiling is on at the beginning of a query and at
the end of a query makes "SET SESSION PROFILING = ..." statements
disappear from the profiling. They were never reliable before.
sql/sql_profile.cc:
Check to see if profiling was enabled at the beginning of this query
before trying to store query_source. This avoids a memory leak for
prepared statements, which get here by direct means.
If profiling was toggled in this query, then don't store this query
profile.
sql/sql_profile.h:
Keep track of whether profiling is on.
is a special case in "SHOW PROFILE FOR QUERY n". No one can get
the zero item (which is always the statement that turns on profiling),
because zero represents the final item, internally.
Now, order the queries starting at one.
mysql-test/r/profiling.result:
Renumber the query IDs.
sql/sql_profile.cc:
Start the profile_id_counter at 1, to overstep the special-case
value of zero.
Unrelated, but looks similar: don't use -1 to initialize an unsigned
integer field. That causes warnings in some environments.
B-g#27501: 5.0 significantly more sys ("kernel") time than 4.1 \
due to getrusage() calls
Even if profiling is turned off, the parser makes calls to reset
the state at the beginning of each query. That would eventually
instantiate a PROFILE_ENTRY, which does indeed capture resource
usage.
Instead, now check that profiling is active before progressing
far into the storage/expiration of old entries in the history.
This has the pleasant side-effect that queries to toggle profiling
are not recorded in the history.
mysql-test/r/profiling.result:
Now after we turn off profiling, the beginning of the next query
refuses to enter the profiling code and it discards the info.
sql/sql_profile.cc:
Add the same condition twice: Once to abort storing previous
query information and the other to abort initialization for this
query that is starting.
We do this symmetrically, before and after expiring old history
entries, so that the counts are correct.
B-g#27060: SQL Profile utility may not be reporting right duration \
for each step
Whenever the profiler is reset at the beginning of a query, there's
a "hidden" profiling entry that represents that point in time. It
has no status description, as those are set by state changes and no
such point has yet been encountered. That profiling entry is not
in the list of entries generated when we change states.
The profiling code had the problem that each step of printing
profiling data subtracted the previous "step"'s data, but gave the
label to that data of the current step, which is wrong. The label/
state refers to the period beginning with that profiling data, not
ending with it.
Now, give a label to the first profiling pseudo-entry, so that we
have a name to assign to the period that ends with the first state
change. Now also use the state name of the previous step in showing
the delta values that end with this step.
sql/sql_profile.cc:
Store a status of "initializing" whenever we construct the first
profile entry -- the one that gets reset whenever we're starting
a new query, before the server sets a real status.
Additionally, associate the previous status with the time period
that ends with the current profile entry's stats.
Since we need yet another piece of info from the previous profiling
entry, take out the piecemeal ways we currently do it and make a
general pointer to the whole thing.
B-g#24795: SHOW PROFILE implementation
Don't use memory roots to store profiling information, because
memory roots make freeing the data a no-op, and thus long-running
processes with profiling turned on the whole time could eventually
use all available memory.
Instead, use regular heap allocation and deallocation calls to
manage profiling data. Replace the leaky List usage with a similar-
behaving structure named "Queue".
sql/sql_profile.cc:
Don't use C++ iterators on our simple Queue implementation. They're
not implemented and we don't really need them.
Rip out idea of swapping out the thd's mem_root.
sql/sql_profile.h:
Rip out idea of needing a mem_root.
Implement a Queue that looks and behaves very similarly to memroot-
using List.
Expand float size to avoid assert()ion failures.
"_db_func_" isn't a known linked object on some platforms, possibly
because it is occasionaly shadowed by DBUG variables. Avoid that
confusion.
sql/sql_profile.cc:
Expand float size to avoid assert()ion failures.
"_db_func_" isn't a known linked object on some platforms, possibly
because it is occasionaly shadowed by DBUG variables. Avoid that
confusion.
sql/sql_profile.h:
"_db_func_" isn't a known linked object on some platforms, possibly
because it is occasionaly shadowed by DBUG variables. Avoid that
confusion.
configure.in:
Use smarter autoconf help macro.
sql/set_var.cc:
Make a local variable static.
sql/sql_lex.cc:
Don't include CPP condition where it saves little time and decreases legibility.
sql/sql_parse.cc:
Use the name of the query in the error, instead of describing the feature.
sql/sql_profile.cc:
Update copyright.
Make I_S schema table columns uppercase.
sql/sql_profile.h:
Update copyright.
sql/sql_select.cc:
Chagne tab indentation to spaces.
to a single statement.
---
Bug#24795: SHOW PROFILE
Profiling is only partially functional on some architectures. Where
there is no getrusage() system call, presently Null values are
returned where it would be required. Notably, Windows needs some love
applied to make it as useful.
Syntax this adds:
SHOW PROFILES
SHOW PROFILE [types] [FOR QUERY n] [OFFSET n] [LIMIT n]
where "n" is an integer
and "types" is zero or many (comma-separated) of
"CPU"
"MEMORY" (not presently supported)
"BLOCK IO"
"CONTEXT SWITCHES"
"PAGE FAULTS"
"IPC"
"SWAPS"
"SOURCE"
"ALL"
It also adds a session variable (boolean) "profiling", set to "no"
by default, and (integer) profiling_history_size, set to 15 by
default.
This patch abstracts setting THDs' "proc_info" behind a macro that
can be used as a hook into the profiling code when profiling
support is compiled in. All future code in this line should use
that mechanism for setting thd->proc_info.
---
Tests are now set to omit the statistics.
---
Adds an Information_schema table, "profiling" for access to
"show profile" data.
---
Merge zippy.cornsilk.net:/home/cmiller/work/mysql/mysql-5.0-community-3--bug24795
into zippy.cornsilk.net:/home/cmiller/work/mysql/mysql-5.0-community
---
Fix merge problems.
---
Fixed one bug in the query_source being NULL.
Updated test results.
---
Include more thorough profiling tests.
Improve support for prepared statements.
Use session-specific query IDs, starting at zero.
---
Selecting from I_S.profiling is no longer quashed in profiling, as
requested by Giuseppe.
Limit the size of captured query text.
No longer log queries that are zero length.
BitKeeper/deleted/.del-profile.result:
Rename: mysql-test/r/profile.result -> BitKeeper/deleted/.del-profile.result
BitKeeper/deleted/.del-profile.test:
Rename: mysql-test/t/profile.test -> BitKeeper/deleted/.del-profile.test
BitKeeper/deleted/.del-sql_profile.cc:
Rename: sql/sql_profile.cc -> BitKeeper/deleted/.del-sql_profile.cc
BitKeeper/deleted/.del-sql_profile.h:
Rename: sql/sql_profile.h -> BitKeeper/deleted/.del-sql_profile.h
configure.in:
Add a configure-time option to enable/disable query profiling. The
default is enabled.
include/my_dbug.h:
DBUG_* statements should be syntactically equivalent to a single
statement.
myisam/mi_open.c:
DBUG_* statements should be syntactically equivalent to a single
statement.
mysql-test/r/information_schema.result:
Updated (re-recorded) tests that I missed somehow. I verified these
for correctness.
mysql-test/r/information_schema_db.result:
Updated test results I missed.
mysql-test/r/mysqlshow.result:
Fix merge problems.
ndb/src/ndbapi/DictCache.cpp:
DBUG_* statements should be syntactically equivalent to a single
statement.
sql/ha_archive.cc:
Abstract setting thread-info into a function or macro.
---
Manual merge, undoing first patch.
sql/ha_berkeley.cc:
Include patch backported to 5.0-global.
THD::options is a ulonglong, not ulong.
sql/ha_myisam.cc:
Abstract setting thread-info into a function or macro.
---
Manual merge, undoing first patch.
sql/ha_myisammrg.cc:
DBUG_* statements should be syntactically equivalent to a single
statement.
sql/ha_ndbcluster.cc:
DBUG_* statements should be syntactically equivalent to a single
statement.
sql/item_cmpfunc.cc:
DBUG_* statements should be syntactically equivalent to a single
statement.
sql/item_func.cc:
Abstract setting thread-info into a function or macro.
---
Manual merge, undoing first patch.
sql/lock.cc:
Abstract setting thread-info into a function or macro.
---
Manual merge, undoing first patch.
sql/log_event.cc:
Abstract setting thread-info into a function or macro.
---
Manual merge, undoing first patch.
sql/mysql_priv.h:
Use 64-bit constants for the 64-bit bit field.
Add a new option bit for whether profiling is active or not.
sql/mysqld.cc:
Add semicolon to DBUG statement.
Add a new system variable and set it.
---
Set the minimum, which is zero and not 50.
sql/repl_failsafe.cc:
Abstract setting thread-info into a function or macro.
---
Manual merge, undoing first patch.
sql/set_var.cc:
Make a new system global variable and session variable, to determine
behavior of profiling.
---
Include patch backported to 5.0-global.
THD::options is a ulonglong, not ulong.
sql/set_var.h:
The THD::options bit field is ulonglong, not ulong.
sql/slave.cc:
Abstract setting thread-info into a function or macro.
---
Manual merge, undoing first patch.
---
Include patch backported to 5.0-global.
THD::options is a ulonglong, not ulong.
sql/sp_head.cc:
Abstract setting thread-info into a function or macro.
---
Manual merge, undoing first patch.
sql/sql_base.cc:
Abstract setting thread-info into a function or macro.
---
Manual merge, undoing first patch.
---
Include patch backported to 5.0-global.
THD::options is a ulonglong, not ulong.
sql/sql_cache.cc:
DBUG_* statements should be syntactically equivalent to a single
statement.
---
Fix merge problems.
sql/sql_class.cc:
Insert a pointer to the current thread in the profiling code.
---
Manual merge, undoing first patch.
---
Fix merge problems.
sql/sql_class.h:
Create a new system variable, profiling_history_size, and add a
member to THD to hold profiling information about this thread's
execution.
---
Manual merge, undoing first patch.
sql/sql_delete.cc:
Abstract setting thread-info into a function or macro.
---
Manual merge, undoing first patch.
---
Include patch backported to 5.0-global.
THD::options is a ulonglong, not ulong.
sql/sql_insert.cc:
Abstract setting thread-info into a function or macro.
---
Manual merge, undoing first patch.
---
Fix merge problems.
sql/sql_lex.cc:
Initialize profiling options to empty.
---
Manual merge, undoing first patch.
sql/sql_lex.h:
Add info to the lexer object so that we can hold data that comes from
parsing statements.
Reuse memory addresses of uints that can't occur in the same state-
ment.
This is dangerous because it involves knowledge of what symbols are
never used together, which is information stored obliquely in another
file.
---
Manual merge, undoing first patch.
sql/sql_parse.cc:
Add hooks to the parser to jump to profiling code.
If profiling is not present, then return an error message upon being
used.
---
Manual merge, undoing first patch.
---
Fix merge problems.
---
Include patch backported to 5.0-global.
THD::options is a ulonglong, not ulong.
sql/sql_prepare.cc:
From prepared statement execution, set the query source in the
profiler, as we can't get it from thd .
---
Make it less expensive to limit the size of the queries.
sql/sql_repl.cc:
Abstract setting thread-info into a function or macro.
---
Manual merge, undoing first patch.
sql/sql_select.cc:
Abstract setting thread-info into a function or macro.
---
Manual merge, undoing first patch.
---
Fix merge problems.
sql/sql_show.cc:
Abstract setting thread-info into a function or macro.
Also, remove "static" qualification on schema_table_store_record()
so that external functions may use it.
---
Manual merge, undoing first patch.
sql/sql_table.cc:
Abstract setting thread-info into a function or macro.
---
Manual merge, undoing first patch.
sql/sql_update.cc:
Abstract setting thread-info into a function or macro.
---
Manual merge, undoing first patch.
sql/sql_view.cc:
Abstract setting thread-info into a function or macro.
---
Manual merge, undoing first patch.
sql/sql_yacc.yy:
Add new lexer symbols and insert new grammatical rules necessary to
retreive profiling information.
---
Manual merge, undoing first patch.
---
Fix merge problems.
sql/table.h:
Add enum item for query profiling.
BitKeeper/deleted/.del-profiling-master.opt:
New BitKeeper file ``mysql-test/t/profiling-master.opt''
mysql-test/r/profiling.result:
New BitKeeper file ``mysql-test/r/profiling.result''
---
Include more verbose that describes the queries so far.
Include Giuseppe's tests.
---
Selecting from I_S.profiling is no longer quashed in profiling, as
requested by Giuseppe.
mysql-test/t/profiling.test:
New BitKeeper file ``mysql-test/t/profiling.test''
---
Include more verbose that describes the queries so far.
Include Giuseppe's tests.
---
Selecting from I_S.profiling is no longer quashed in profiling, as
requested by Giuseppe.
sql/sql_profile.cc:
New BitKeeper file ``sql/sql_profile.cc''
---
If query_source is NULL, as can sometimes happen, then don't try
to copy that memory.
---
Make each new session use its own numbering of query_ids, and not
show the global-pool numbers to the user.
Provide a way for prepared statements to set the query_source.
---
Selecting from I_S.profiling is no longer quashed in profiling, as
requested by Giuseppe.
Limit the size of captured query text.
No longer log queries that are zero length.
sql/sql_profile.h:
New BitKeeper file ``sql/sql_profile.h''
---
Make each new session use its own numbering of query_ids, and not
show the global-pool numbers to the user.
Provide a way for prepared statements to set the query_source.
---
Make it less expensive to limit the size of the queries.
Patch contributed by Jeremy Cole. CLA received Oct 2006 by Kaj Arnö
Add rudimentary query profiling support.
libmysqld/Makefile.am:
Add profile file to source list.
sql/Makefile.am:
Add profiling files to source and header lists.
sql/ha_archive.cc:
Macro-ized other discovered instances of setting proc_info.
sql/ha_myisam.cc:
Macroize setting thread-state info
sql/item_func.cc:
Macro-ized other discovered instances of setting proc_info.
sql/lex.h:
Add lexer info for profiling.
sql/lock.cc:
Macroize setting thread-state info
sql/log_event.cc:
Macro-ized other discovered instances of setting proc_info.
sql/mysql_priv.h:
Set constants for profiling.
sql/repl_failsafe.cc:
Macro-ized other discovered instances of setting proc_info.
sql/slave.cc:
Macro-ized other discovered instances of setting proc_info.
sql/sp_head.cc:
Macro-ized other discovered instances of setting proc_info.
sql/sql_base.cc:
Macroize setting thread-state info
---
Macro-ized other discovered instances of setting proc_info.
sql/sql_cache.cc:
Macroize setting thread-state info
sql/sql_class.cc:
Integrate profiling.
sql/sql_class.h:
Instantiate profiling object.
sql/sql_delete.cc:
Macroize setting thread-state info
sql/sql_insert.cc:
Macroize setting thread-state info
---
Macro-ized other discovered instances of setting proc_info.
sql/sql_lex.cc:
Initialize profiling.
sql/sql_lex.h:
Define lex tokens and allocate space for profiling options.
sql/sql_parse.cc:
Integrate profiling.
---
Macro-ized other discovered instances of setting proc_info.
sql/sql_repl.cc:
Macro-ized other discovered instances of setting proc_info.
sql/sql_select.cc:
Macroize setting thread-state info.
Clean up some lines.
sql/sql_show.cc:
Macro-ized other discovered instances of setting proc_info.
---
Revert bad use of macro.
sql/sql_table.cc:
Macroize setting thread-state info
sql/sql_update.cc:
Macroize setting thread-state info
sql/sql_view.cc:
Macro-ized other discovered instances of setting proc_info.
sql/sql_yacc.yy:
Add parser info for profiling.
---
Fix new YACC shift/reduce conflict. (Now at 249.)
mysql-test/r/profile.result:
Test profiling code.
---
A not-very-useful result.
mysql-test/t/profile.test:
Test profiling code.
---
Test syntax, but not values of profiles code.
sql/sql_profile.cc:
Add profiling code.
---
Add wishlist comment.
sql/sql_profile.h:
Add profiling code.
---
Changed the value of the macro so that it's syntactically equivalent to a
single statement.