mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
MDEV-9077 add sys_schema from https://github.com/mysql/mysql-sys
This commit is contained in:
@ -0,0 +1,66 @@
|
||||
-- Copyright (c) 2014, 2015, 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, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
DROP FUNCTION IF EXISTS extract_schema_from_file_name;
|
||||
|
||||
DELIMITER $$
|
||||
|
||||
CREATE DEFINER='root'@'localhost' FUNCTION extract_schema_from_file_name (
|
||||
path VARCHAR(512)
|
||||
)
|
||||
RETURNS VARCHAR(64)
|
||||
COMMENT '
|
||||
Description
|
||||
-----------
|
||||
|
||||
Takes a raw file path, and attempts to extract the schema name from it.
|
||||
|
||||
Useful for when interacting with Performance Schema data
|
||||
concerning IO statistics, for example.
|
||||
|
||||
Currently relies on the fact that a table data file will be within a
|
||||
specified database directory (will not work with partitions or tables
|
||||
that specify an individual DATA_DIRECTORY).
|
||||
|
||||
Parameters
|
||||
-----------
|
||||
|
||||
path (VARCHAR(512)):
|
||||
The full file path to a data file to extract the schema name from.
|
||||
|
||||
Returns
|
||||
-----------
|
||||
|
||||
VARCHAR(64)
|
||||
|
||||
Example
|
||||
-----------
|
||||
|
||||
mysql> SELECT sys.extract_schema_from_file_name(\'/var/lib/mysql/employees/employee.ibd\');
|
||||
+----------------------------------------------------------------------------+
|
||||
| sys.extract_schema_from_file_name(\'/var/lib/mysql/employees/employee.ibd\') |
|
||||
+----------------------------------------------------------------------------+
|
||||
| employees |
|
||||
+----------------------------------------------------------------------------+
|
||||
1 row in set (0.00 sec)
|
||||
'
|
||||
SQL SECURITY INVOKER
|
||||
DETERMINISTIC
|
||||
NO SQL
|
||||
BEGIN
|
||||
RETURN LEFT(SUBSTRING_INDEX(SUBSTRING_INDEX(REPLACE(path, '\\', '/'), '/', -2), '/', 1), 64);
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
@ -0,0 +1,62 @@
|
||||
-- Copyright (c) 2014, 2015, 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, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
DROP FUNCTION IF EXISTS extract_table_from_file_name;
|
||||
|
||||
DELIMITER $$
|
||||
|
||||
CREATE DEFINER='root'@'localhost' FUNCTION extract_table_from_file_name (
|
||||
path VARCHAR(512)
|
||||
)
|
||||
RETURNS VARCHAR(64)
|
||||
COMMENT '
|
||||
Description
|
||||
-----------
|
||||
|
||||
Takes a raw file path, and extracts the table name from it.
|
||||
|
||||
Useful for when interacting with Performance Schema data
|
||||
concerning IO statistics, for example.
|
||||
|
||||
Parameters
|
||||
-----------
|
||||
|
||||
path (VARCHAR(512)):
|
||||
The full file path to a data file to extract the table name from.
|
||||
|
||||
Returns
|
||||
-----------
|
||||
|
||||
VARCHAR(64)
|
||||
|
||||
Example
|
||||
-----------
|
||||
|
||||
mysql> SELECT sys.extract_table_from_file_name(\'/var/lib/mysql/employees/employee.ibd\');
|
||||
+---------------------------------------------------------------------------+
|
||||
| sys.extract_table_from_file_name(\'/var/lib/mysql/employees/employee.ibd\') |
|
||||
+---------------------------------------------------------------------------+
|
||||
| employee |
|
||||
+---------------------------------------------------------------------------+
|
||||
1 row in set (0.02 sec)
|
||||
'
|
||||
SQL SECURITY INVOKER
|
||||
DETERMINISTIC
|
||||
NO SQL
|
||||
BEGIN
|
||||
RETURN LEFT(SUBSTRING_INDEX(REPLACE(SUBSTRING_INDEX(REPLACE(path, '\\', '/'), '/', -1), '@0024', '$'), '.', 1), 64);
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
84
scripts/sys_schema/functions/format_bytes.sql
Normal file
84
scripts/sys_schema/functions/format_bytes.sql
Normal file
@ -0,0 +1,84 @@
|
||||
-- Copyright (c) 2014, 2015, 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, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
DROP FUNCTION IF EXISTS format_bytes;
|
||||
|
||||
DELIMITER $$
|
||||
|
||||
CREATE DEFINER='root'@'localhost' FUNCTION format_bytes (
|
||||
-- We feed in and return TEXT here, as aggregates of
|
||||
-- bytes can return numbers larger than BIGINT UNSIGNED
|
||||
bytes TEXT
|
||||
)
|
||||
RETURNS TEXT
|
||||
COMMENT '
|
||||
Description
|
||||
-----------
|
||||
|
||||
Takes a raw bytes value, and converts it to a human readable format.
|
||||
|
||||
Parameters
|
||||
-----------
|
||||
|
||||
bytes (TEXT):
|
||||
A raw bytes value.
|
||||
|
||||
Returns
|
||||
-----------
|
||||
|
||||
TEXT
|
||||
|
||||
Example
|
||||
-----------
|
||||
|
||||
mysql> SELECT sys.format_bytes(2348723492723746) AS size;
|
||||
+----------+
|
||||
| size |
|
||||
+----------+
|
||||
| 2.09 PiB |
|
||||
+----------+
|
||||
1 row in set (0.00 sec)
|
||||
|
||||
mysql> SELECT sys.format_bytes(2348723492723) AS size;
|
||||
+----------+
|
||||
| size |
|
||||
+----------+
|
||||
| 2.14 TiB |
|
||||
+----------+
|
||||
1 row in set (0.00 sec)
|
||||
|
||||
mysql> SELECT sys.format_bytes(23487234) AS size;
|
||||
+-----------+
|
||||
| size |
|
||||
+-----------+
|
||||
| 22.40 MiB |
|
||||
+-----------+
|
||||
1 row in set (0.00 sec)
|
||||
'
|
||||
SQL SECURITY INVOKER
|
||||
DETERMINISTIC
|
||||
NO SQL
|
||||
BEGIN
|
||||
IF bytes IS NULL THEN RETURN NULL;
|
||||
ELSEIF bytes >= 1125899906842624 THEN RETURN CONCAT(ROUND(bytes / 1125899906842624, 2), ' PiB');
|
||||
ELSEIF bytes >= 1099511627776 THEN RETURN CONCAT(ROUND(bytes / 1099511627776, 2), ' TiB');
|
||||
ELSEIF bytes >= 1073741824 THEN RETURN CONCAT(ROUND(bytes / 1073741824, 2), ' GiB');
|
||||
ELSEIF bytes >= 1048576 THEN RETURN CONCAT(ROUND(bytes / 1048576, 2), ' MiB');
|
||||
ELSEIF bytes >= 1024 THEN RETURN CONCAT(ROUND(bytes / 1024, 2), ' KiB');
|
||||
ELSE RETURN CONCAT(ROUND(bytes, 0), ' bytes');
|
||||
END IF;
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
108
scripts/sys_schema/functions/format_path.sql
Normal file
108
scripts/sys_schema/functions/format_path.sql
Normal file
@ -0,0 +1,108 @@
|
||||
-- Copyright (c) 2014, 2016, 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, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
DROP FUNCTION IF EXISTS format_path;
|
||||
|
||||
DELIMITER $$
|
||||
|
||||
CREATE DEFINER='root'@'localhost' FUNCTION format_path (
|
||||
in_path VARCHAR(512)
|
||||
)
|
||||
RETURNS VARCHAR(512) CHARSET UTF8
|
||||
COMMENT '
|
||||
Description
|
||||
-----------
|
||||
|
||||
Takes a raw path value, and strips out the datadir or tmpdir
|
||||
replacing with @@datadir and @@tmpdir respectively.
|
||||
|
||||
Also normalizes the paths across operating systems, so backslashes
|
||||
on Windows are converted to forward slashes
|
||||
|
||||
Parameters
|
||||
-----------
|
||||
|
||||
path (VARCHAR(512)):
|
||||
The raw file path value to format.
|
||||
|
||||
Returns
|
||||
-----------
|
||||
|
||||
VARCHAR(512) CHARSET UTF8
|
||||
|
||||
Example
|
||||
-----------
|
||||
|
||||
mysql> select @@datadir;
|
||||
+-----------------------------------------------+
|
||||
| @@datadir |
|
||||
+-----------------------------------------------+
|
||||
| /Users/mark/sandboxes/SmallTree/AMaster/data/ |
|
||||
+-----------------------------------------------+
|
||||
1 row in set (0.06 sec)
|
||||
|
||||
mysql> select format_path(\'/Users/mark/sandboxes/SmallTree/AMaster/data/mysql/proc.MYD\') AS path;
|
||||
+--------------------------+
|
||||
| path |
|
||||
+--------------------------+
|
||||
| @@datadir/mysql/proc.MYD |
|
||||
+--------------------------+
|
||||
1 row in set (0.03 sec)
|
||||
'
|
||||
SQL SECURITY INVOKER
|
||||
DETERMINISTIC
|
||||
NO SQL
|
||||
BEGIN
|
||||
DECLARE v_path VARCHAR(512);
|
||||
DECLARE v_undo_dir VARCHAR(1024);
|
||||
|
||||
DECLARE path_separator CHAR(1) DEFAULT '/';
|
||||
|
||||
IF @@global.version_compile_os LIKE 'win%' THEN
|
||||
SET path_separator = '\\';
|
||||
END IF;
|
||||
|
||||
-- OSX hides /private/ in variables, but Performance Schema does not
|
||||
IF in_path LIKE '/private/%' THEN
|
||||
SET v_path = REPLACE(in_path, '/private', '');
|
||||
ELSE
|
||||
SET v_path = in_path;
|
||||
END IF;
|
||||
|
||||
-- @@global.innodb_undo_directory is only set when separate undo logs are used
|
||||
SET v_undo_dir = IFNULL((SELECT VARIABLE_VALUE FROM information_schema.GLOBAL_VARIABLES WHERE VARIABLE_NAME = 'innodb_undo_directory'), '');
|
||||
|
||||
IF v_path IS NULL THEN
|
||||
RETURN NULL;
|
||||
ELSEIF v_path LIKE CONCAT(@@global.datadir, IF(SUBSTRING(@@global.datadir, -1) = path_separator, '%', CONCAT(path_separator, '%'))) ESCAPE '|' THEN
|
||||
SET v_path = REPLACE(v_path, @@global.datadir, CONCAT('@@datadir', IF(SUBSTRING(@@global.datadir, -1) = path_separator, path_separator, '')));
|
||||
ELSEIF v_path LIKE CONCAT(@@global.tmpdir, IF(SUBSTRING(@@global.tmpdir, -1) = path_separator, '%', CONCAT(path_separator, '%'))) ESCAPE '|' THEN
|
||||
SET v_path = REPLACE(v_path, @@global.tmpdir, CONCAT('@@tmpdir', IF(SUBSTRING(@@global.tmpdir, -1) = path_separator, path_separator, '')));
|
||||
ELSEIF v_path LIKE CONCAT(@@global.slave_load_tmpdir, IF(SUBSTRING(@@global.slave_load_tmpdir, -1) = path_separator, '%', CONCAT(path_separator, '%'))) ESCAPE '|' THEN
|
||||
SET v_path = REPLACE(v_path, @@global.slave_load_tmpdir, CONCAT('@@slave_load_tmpdir', IF(SUBSTRING(@@global.slave_load_tmpdir, -1) = path_separator, path_separator, '')));
|
||||
ELSEIF v_path LIKE CONCAT(@@global.innodb_data_home_dir, IF(SUBSTRING(@@global.innodb_data_home_dir, -1) = path_separator, '%', CONCAT(path_separator, '%'))) ESCAPE '|' THEN
|
||||
SET v_path = REPLACE(v_path, @@global.innodb_data_home_dir, CONCAT('@@innodb_data_home_dir', IF(SUBSTRING(@@global.innodb_data_home_dir, -1) = path_separator, path_separator, '')));
|
||||
ELSEIF v_path LIKE CONCAT(@@global.innodb_log_group_home_dir, IF(SUBSTRING(@@global.innodb_log_group_home_dir, -1) = path_separator, '%', CONCAT(path_separator, '%'))) ESCAPE '|' THEN
|
||||
SET v_path = REPLACE(v_path, @@global.innodb_log_group_home_dir, CONCAT('@@innodb_log_group_home_dir', IF(SUBSTRING(@@global.innodb_log_group_home_dir, -1) = path_separator, path_separator, '')));
|
||||
ELSEIF v_path LIKE CONCAT(v_undo_dir, IF(SUBSTRING(v_undo_dir, -1) = path_separator, '%', CONCAT(path_separator, '%'))) ESCAPE '|' THEN
|
||||
SET v_path = REPLACE(v_path, v_undo_dir, CONCAT('@@innodb_undo_directory', IF(SUBSTRING(v_undo_dir, -1) = path_separator, path_separator, '')));
|
||||
ELSEIF v_path LIKE CONCAT(@@global.basedir, IF(SUBSTRING(@@global.basedir, -1) = path_separator, '%', CONCAT(path_separator, '%'))) ESCAPE '|' THEN
|
||||
SET v_path = REPLACE(v_path, @@global.basedir, CONCAT('@@basedir', IF(SUBSTRING(@@global.basedir, -1) = path_separator, path_separator, '')));
|
||||
END IF;
|
||||
|
||||
RETURN v_path;
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
108
scripts/sys_schema/functions/format_path_57.sql
Normal file
108
scripts/sys_schema/functions/format_path_57.sql
Normal file
@ -0,0 +1,108 @@
|
||||
-- Copyright (c) 2014, 2016, 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, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
DROP FUNCTION IF EXISTS format_path;
|
||||
|
||||
DELIMITER $$
|
||||
|
||||
CREATE DEFINER='root'@'localhost' FUNCTION format_path (
|
||||
in_path VARCHAR(512)
|
||||
)
|
||||
RETURNS VARCHAR(512) CHARSET UTF8
|
||||
COMMENT '
|
||||
Description
|
||||
-----------
|
||||
|
||||
Takes a raw path value, and strips out the datadir or tmpdir
|
||||
replacing with @@datadir and @@tmpdir respectively.
|
||||
|
||||
Also normalizes the paths across operating systems, so backslashes
|
||||
on Windows are converted to forward slashes
|
||||
|
||||
Parameters
|
||||
-----------
|
||||
|
||||
path (VARCHAR(512)):
|
||||
The raw file path value to format.
|
||||
|
||||
Returns
|
||||
-----------
|
||||
|
||||
VARCHAR(512) CHARSET UTF8
|
||||
|
||||
Example
|
||||
-----------
|
||||
|
||||
mysql> select @@datadir;
|
||||
+-----------------------------------------------+
|
||||
| @@datadir |
|
||||
+-----------------------------------------------+
|
||||
| /Users/mark/sandboxes/SmallTree/AMaster/data/ |
|
||||
+-----------------------------------------------+
|
||||
1 row in set (0.06 sec)
|
||||
|
||||
mysql> select format_path(\'/Users/mark/sandboxes/SmallTree/AMaster/data/mysql/proc.MYD\') AS path;
|
||||
+--------------------------+
|
||||
| path |
|
||||
+--------------------------+
|
||||
| @@datadir/mysql/proc.MYD |
|
||||
+--------------------------+
|
||||
1 row in set (0.03 sec)
|
||||
'
|
||||
SQL SECURITY INVOKER
|
||||
DETERMINISTIC
|
||||
NO SQL
|
||||
BEGIN
|
||||
DECLARE v_path VARCHAR(512);
|
||||
DECLARE v_undo_dir VARCHAR(1024);
|
||||
|
||||
DECLARE path_separator CHAR(1) DEFAULT '/';
|
||||
|
||||
IF @@global.version_compile_os LIKE 'win%' THEN
|
||||
SET path_separator = '\\';
|
||||
END IF;
|
||||
|
||||
-- OSX hides /private/ in variables, but Performance Schema does not
|
||||
IF in_path LIKE '/private/%' THEN
|
||||
SET v_path = REPLACE(in_path, '/private', '');
|
||||
ELSE
|
||||
SET v_path = in_path;
|
||||
END IF;
|
||||
|
||||
-- @@global.innodb_undo_directory is only set when separate undo logs are used
|
||||
SET v_undo_dir = IFNULL((SELECT VARIABLE_VALUE FROM performance_schema.global_variables WHERE VARIABLE_NAME = 'innodb_undo_directory'), '');
|
||||
|
||||
IF v_path IS NULL THEN
|
||||
RETURN NULL;
|
||||
ELSEIF v_path LIKE CONCAT(@@global.datadir, IF(SUBSTRING(@@global.datadir, -1) = path_separator, '%', CONCAT(path_separator, '%'))) ESCAPE '|' THEN
|
||||
SET v_path = REPLACE(v_path, @@global.datadir, CONCAT('@@datadir', IF(SUBSTRING(@@global.datadir, -1) = path_separator, path_separator, '')));
|
||||
ELSEIF v_path LIKE CONCAT(@@global.tmpdir, IF(SUBSTRING(@@global.tmpdir, -1) = path_separator, '%', CONCAT(path_separator, '%'))) ESCAPE '|' THEN
|
||||
SET v_path = REPLACE(v_path, @@global.tmpdir, CONCAT('@@tmpdir', IF(SUBSTRING(@@global.tmpdir, -1) = path_separator, path_separator, '')));
|
||||
ELSEIF v_path LIKE CONCAT(@@global.slave_load_tmpdir, IF(SUBSTRING(@@global.slave_load_tmpdir, -1) = path_separator, '%', CONCAT(path_separator, '%'))) ESCAPE '|' THEN
|
||||
SET v_path = REPLACE(v_path, @@global.slave_load_tmpdir, CONCAT('@@slave_load_tmpdir', IF(SUBSTRING(@@global.slave_load_tmpdir, -1) = path_separator, path_separator, '')));
|
||||
ELSEIF v_path LIKE CONCAT(@@global.innodb_data_home_dir, IF(SUBSTRING(@@global.innodb_data_home_dir, -1) = path_separator, '%', CONCAT(path_separator, '%'))) ESCAPE '|' THEN
|
||||
SET v_path = REPLACE(v_path, @@global.innodb_data_home_dir, CONCAT('@@innodb_data_home_dir', IF(SUBSTRING(@@global.innodb_data_home_dir, -1) = path_separator, path_separator, '')));
|
||||
ELSEIF v_path LIKE CONCAT(@@global.innodb_log_group_home_dir, IF(SUBSTRING(@@global.innodb_log_group_home_dir, -1) = path_separator, '%', CONCAT(path_separator, '%'))) ESCAPE '|' THEN
|
||||
SET v_path = REPLACE(v_path, @@global.innodb_log_group_home_dir, CONCAT('@@innodb_log_group_home_dir', IF(SUBSTRING(@@global.innodb_log_group_home_dir, -1) = path_separator, path_separator, '')));
|
||||
ELSEIF v_path LIKE CONCAT(v_undo_dir, IF(SUBSTRING(v_undo_dir, -1) = path_separator, '%', CONCAT(path_separator, '%'))) ESCAPE '|' THEN
|
||||
SET v_path = REPLACE(v_path, v_undo_dir, CONCAT('@@innodb_undo_directory', IF(SUBSTRING(v_undo_dir, -1) = path_separator, path_separator, '')));
|
||||
ELSEIF v_path LIKE CONCAT(@@global.basedir, IF(SUBSTRING(@@global.basedir, -1) = path_separator, '%', CONCAT(path_separator, '%'))) ESCAPE '|' THEN
|
||||
SET v_path = REPLACE(v_path, @@global.basedir, CONCAT('@@basedir', IF(SUBSTRING(@@global.basedir, -1) = path_separator, path_separator, '')));
|
||||
END IF;
|
||||
|
||||
RETURN v_path;
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
81
scripts/sys_schema/functions/format_statement.sql
Normal file
81
scripts/sys_schema/functions/format_statement.sql
Normal file
@ -0,0 +1,81 @@
|
||||
-- Copyright (c) 2014, 2015, 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, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
DROP FUNCTION IF EXISTS format_statement;
|
||||
|
||||
DELIMITER $$
|
||||
|
||||
CREATE DEFINER='root'@'localhost' FUNCTION format_statement (
|
||||
statement LONGTEXT
|
||||
)
|
||||
RETURNS LONGTEXT
|
||||
COMMENT '
|
||||
Description
|
||||
-----------
|
||||
|
||||
Formats a normalized statement, truncating it if it is > 64 characters long by default.
|
||||
|
||||
To configure the length to truncate the statement to by default, update the `statement_truncate_len`
|
||||
variable with `sys_config` table to a different value. Alternatively, to change it just for just
|
||||
your particular session, use `SET @sys.statement_truncate_len := <some new value>`.
|
||||
|
||||
Useful for printing statement related data from Performance Schema from
|
||||
the command line.
|
||||
|
||||
Parameters
|
||||
-----------
|
||||
|
||||
statement (LONGTEXT):
|
||||
The statement to format.
|
||||
|
||||
Returns
|
||||
-----------
|
||||
|
||||
LONGTEXT
|
||||
|
||||
Example
|
||||
-----------
|
||||
|
||||
mysql> SELECT sys.format_statement(digest_text)
|
||||
-> FROM performance_schema.events_statements_summary_by_digest
|
||||
-> ORDER by sum_timer_wait DESC limit 5;
|
||||
+-------------------------------------------------------------------+
|
||||
| sys.format_statement(digest_text) |
|
||||
+-------------------------------------------------------------------+
|
||||
| CREATE SQL SECURITY INVOKER VI ... KE ? AND `variable_value` > ? |
|
||||
| CREATE SQL SECURITY INVOKER VI ... ait` IS NOT NULL , `esc` . ... |
|
||||
| CREATE SQL SECURITY INVOKER VI ... ait` IS NOT NULL , `sys` . ... |
|
||||
| CREATE SQL SECURITY INVOKER VI ... , `compressed_size` ) ) DESC |
|
||||
| CREATE SQL SECURITY INVOKER VI ... LIKE ? ORDER BY `timer_start` |
|
||||
+-------------------------------------------------------------------+
|
||||
5 rows in set (0.00 sec)
|
||||
'
|
||||
SQL SECURITY INVOKER
|
||||
DETERMINISTIC
|
||||
NO SQL
|
||||
BEGIN
|
||||
-- Check if we have the configured length, if not, init it
|
||||
IF @sys.statement_truncate_len IS NULL THEN
|
||||
SET @sys.statement_truncate_len = sys_get_config('statement_truncate_len', 64);
|
||||
END IF;
|
||||
|
||||
IF CHAR_LENGTH(statement) > @sys.statement_truncate_len THEN
|
||||
RETURN REPLACE(CONCAT(LEFT(statement, (@sys.statement_truncate_len/2)-2), ' ... ', RIGHT(statement, (@sys.statement_truncate_len/2)-2)), '\n', ' ');
|
||||
ELSE
|
||||
RETURN REPLACE(statement, '\n', ' ');
|
||||
END IF;
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
91
scripts/sys_schema/functions/format_time.sql
Normal file
91
scripts/sys_schema/functions/format_time.sql
Normal file
@ -0,0 +1,91 @@
|
||||
-- Copyright (c) 2014, 2015, 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, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
DROP FUNCTION IF EXISTS format_time;
|
||||
|
||||
DELIMITER $$
|
||||
|
||||
CREATE DEFINER='root'@'localhost' FUNCTION format_time (
|
||||
-- We feed in and return TEXT here, as aggregates of
|
||||
-- picoseconds can return numbers larger than BIGINT UNSIGNED
|
||||
picoseconds TEXT
|
||||
)
|
||||
RETURNS TEXT CHARSET UTF8
|
||||
COMMENT '
|
||||
Description
|
||||
-----------
|
||||
|
||||
Takes a raw picoseconds value, and converts it to a human readable form.
|
||||
|
||||
Picoseconds are the precision that all latency values are printed in
|
||||
within Performance Schema, however are not user friendly when wanting
|
||||
to scan output from the command line.
|
||||
|
||||
Parameters
|
||||
-----------
|
||||
|
||||
picoseconds (TEXT):
|
||||
The raw picoseconds value to convert.
|
||||
|
||||
Returns
|
||||
-----------
|
||||
|
||||
TEXT
|
||||
|
||||
Example
|
||||
-----------
|
||||
|
||||
mysql> select format_time(342342342342345);
|
||||
+------------------------------+
|
||||
| format_time(342342342342345) |
|
||||
+------------------------------+
|
||||
| 00:05:42 |
|
||||
+------------------------------+
|
||||
1 row in set (0.00 sec)
|
||||
|
||||
mysql> select format_time(342342342);
|
||||
+------------------------+
|
||||
| format_time(342342342) |
|
||||
+------------------------+
|
||||
| 342.34 us |
|
||||
+------------------------+
|
||||
1 row in set (0.00 sec)
|
||||
|
||||
mysql> select format_time(34234);
|
||||
+--------------------+
|
||||
| format_time(34234) |
|
||||
+--------------------+
|
||||
| 34.23 ns |
|
||||
+--------------------+
|
||||
1 row in set (0.00 sec)
|
||||
'
|
||||
SQL SECURITY INVOKER
|
||||
DETERMINISTIC
|
||||
NO SQL
|
||||
BEGIN
|
||||
IF picoseconds IS NULL THEN RETURN NULL;
|
||||
ELSEIF picoseconds >= 604800000000000000 THEN RETURN CONCAT(ROUND(picoseconds / 604800000000000000, 2), ' w');
|
||||
ELSEIF picoseconds >= 86400000000000000 THEN RETURN CONCAT(ROUND(picoseconds / 86400000000000000, 2), ' d');
|
||||
ELSEIF picoseconds >= 3600000000000000 THEN RETURN CONCAT(ROUND(picoseconds / 3600000000000000, 2), ' h');
|
||||
ELSEIF picoseconds >= 60000000000000 THEN RETURN CONCAT(ROUND(picoseconds / 60000000000000, 2), ' m');
|
||||
ELSEIF picoseconds >= 1000000000000 THEN RETURN CONCAT(ROUND(picoseconds / 1000000000000, 2), ' s');
|
||||
ELSEIF picoseconds >= 1000000000 THEN RETURN CONCAT(ROUND(picoseconds / 1000000000, 2), ' ms');
|
||||
ELSEIF picoseconds >= 1000000 THEN RETURN CONCAT(ROUND(picoseconds / 1000000, 2), ' us');
|
||||
ELSEIF picoseconds >= 1000 THEN RETURN CONCAT(ROUND(picoseconds / 1000, 2), ' ns');
|
||||
ELSE RETURN CONCAT(picoseconds, ' ps');
|
||||
END IF;
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
90
scripts/sys_schema/functions/list_add.sql
Normal file
90
scripts/sys_schema/functions/list_add.sql
Normal file
@ -0,0 +1,90 @@
|
||||
-- Copyright (c) 2015, 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, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
DROP FUNCTION IF EXISTS list_add;
|
||||
|
||||
DELIMITER $$
|
||||
|
||||
CREATE DEFINER='root'@'localhost' FUNCTION list_add (
|
||||
in_list TEXT,
|
||||
in_add_value TEXT
|
||||
)
|
||||
RETURNS TEXT
|
||||
COMMENT '
|
||||
Description
|
||||
-----------
|
||||
|
||||
Takes a list, and a value to add to the list, and returns the resulting list.
|
||||
|
||||
Useful for altering certain session variables, like sql_mode or optimizer_switch for instance.
|
||||
|
||||
Parameters
|
||||
-----------
|
||||
|
||||
in_list (TEXT):
|
||||
The comma separated list to add a value to
|
||||
|
||||
in_add_value (TEXT):
|
||||
The value to add to the input list
|
||||
|
||||
Returns
|
||||
-----------
|
||||
|
||||
TEXT
|
||||
|
||||
Example
|
||||
--------
|
||||
|
||||
mysql> select @@sql_mode;
|
||||
+-----------------------------------------------------------------------------------+
|
||||
| @@sql_mode |
|
||||
+-----------------------------------------------------------------------------------+
|
||||
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
|
||||
+-----------------------------------------------------------------------------------+
|
||||
1 row in set (0.00 sec)
|
||||
|
||||
mysql> set sql_mode = sys.list_add(@@sql_mode, ''ANSI_QUOTES'');
|
||||
Query OK, 0 rows affected (0.06 sec)
|
||||
|
||||
mysql> select @@sql_mode;
|
||||
+-----------------------------------------------------------------------------------------------+
|
||||
| @@sql_mode |
|
||||
+-----------------------------------------------------------------------------------------------+
|
||||
| ANSI_QUOTES,ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
|
||||
+-----------------------------------------------------------------------------------------------+
|
||||
1 row in set (0.00 sec)
|
||||
|
||||
'
|
||||
SQL SECURITY INVOKER
|
||||
DETERMINISTIC
|
||||
CONTAINS SQL
|
||||
BEGIN
|
||||
|
||||
IF (in_add_value IS NULL) THEN
|
||||
SIGNAL SQLSTATE '02200'
|
||||
SET MESSAGE_TEXT = 'Function sys.list_add: in_add_value input variable should not be NULL',
|
||||
MYSQL_ERRNO = 1138;
|
||||
END IF;
|
||||
|
||||
IF (in_list IS NULL OR LENGTH(in_list) = 0) THEN
|
||||
-- return the new value as a single value list
|
||||
RETURN in_add_value;
|
||||
END IF;
|
||||
|
||||
RETURN (SELECT CONCAT(TRIM(BOTH ',' FROM TRIM(in_list)), ',', in_add_value));
|
||||
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
91
scripts/sys_schema/functions/list_drop.sql
Normal file
91
scripts/sys_schema/functions/list_drop.sql
Normal file
@ -0,0 +1,91 @@
|
||||
-- Copyright (c) 2015, 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, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
DROP FUNCTION IF EXISTS list_drop;
|
||||
|
||||
DELIMITER $$
|
||||
|
||||
CREATE DEFINER='root'@'localhost' FUNCTION list_drop (
|
||||
in_list TEXT,
|
||||
in_drop_value TEXT
|
||||
)
|
||||
RETURNS TEXT
|
||||
COMMENT '
|
||||
Description
|
||||
-----------
|
||||
|
||||
Takes a list, and a value to attempt to remove from the list, and returns the resulting list.
|
||||
|
||||
Useful for altering certain session variables, like sql_mode or optimizer_switch for instance.
|
||||
|
||||
Parameters
|
||||
-----------
|
||||
|
||||
in_list (TEXT):
|
||||
The comma separated list to drop a value from
|
||||
|
||||
in_drop_value (TEXT):
|
||||
The value to drop from the input list
|
||||
|
||||
Returns
|
||||
-----------
|
||||
|
||||
TEXT
|
||||
|
||||
Example
|
||||
--------
|
||||
|
||||
mysql> select @@sql_mode;
|
||||
+-----------------------------------------------------------------------------------------------+
|
||||
| @@sql_mode |
|
||||
+-----------------------------------------------------------------------------------------------+
|
||||
| ANSI_QUOTES,ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
|
||||
+-----------------------------------------------------------------------------------------------+
|
||||
1 row in set (0.00 sec)
|
||||
|
||||
mysql> set sql_mode = sys.list_drop(@@sql_mode, ''ONLY_FULL_GROUP_BY'');
|
||||
Query OK, 0 rows affected (0.03 sec)
|
||||
|
||||
mysql> select @@sql_mode;
|
||||
+----------------------------------------------------------------------------+
|
||||
| @@sql_mode |
|
||||
+----------------------------------------------------------------------------+
|
||||
| ANSI_QUOTES,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
|
||||
+----------------------------------------------------------------------------+
|
||||
1 row in set (0.00 sec)
|
||||
|
||||
'
|
||||
SQL SECURITY INVOKER
|
||||
DETERMINISTIC
|
||||
CONTAINS SQL
|
||||
BEGIN
|
||||
|
||||
IF (in_drop_value IS NULL) THEN
|
||||
SIGNAL SQLSTATE '02200'
|
||||
SET MESSAGE_TEXT = 'Function sys.list_drop: in_drop_value input variable should not be NULL',
|
||||
MYSQL_ERRNO = 1138;
|
||||
END IF;
|
||||
|
||||
IF (in_list IS NULL OR LENGTH(in_list) = 0) THEN
|
||||
-- return the list as it was passed in
|
||||
RETURN in_list;
|
||||
END IF;
|
||||
|
||||
-- ensure that leading / trailing commas are remove, support values with either spaces or not between commas
|
||||
RETURN (SELECT TRIM(BOTH ',' FROM REPLACE(REPLACE(CONCAT(',', in_list), CONCAT(',', in_drop_value), ''), CONCAT(', ', in_drop_value), '')));
|
||||
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
69
scripts/sys_schema/functions/ps_is_account_enabled.sql
Normal file
69
scripts/sys_schema/functions/ps_is_account_enabled.sql
Normal file
@ -0,0 +1,69 @@
|
||||
-- Copyright (c) 2014, 2015, 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, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
DROP FUNCTION IF EXISTS ps_is_account_enabled;
|
||||
|
||||
DELIMITER $$
|
||||
|
||||
CREATE DEFINER='root'@'localhost' FUNCTION ps_is_account_enabled (
|
||||
in_host VARCHAR(60),
|
||||
in_user VARCHAR(16)
|
||||
)
|
||||
RETURNS ENUM('YES', 'NO')
|
||||
COMMENT '
|
||||
Description
|
||||
-----------
|
||||
|
||||
Determines whether instrumentation of an account is enabled
|
||||
within Performance Schema.
|
||||
|
||||
Parameters
|
||||
-----------
|
||||
|
||||
in_host VARCHAR(60):
|
||||
The hostname of the account to check.
|
||||
in_user (VARCHAR(16)):
|
||||
The username of the account to check.
|
||||
|
||||
Returns
|
||||
-----------
|
||||
|
||||
ENUM(\'YES\', \'NO\', \'PARTIAL\')
|
||||
|
||||
Example
|
||||
-----------
|
||||
|
||||
mysql> SELECT sys.ps_is_account_enabled(\'localhost\', \'root\');
|
||||
+------------------------------------------------+
|
||||
| sys.ps_is_account_enabled(\'localhost\', \'root\') |
|
||||
+------------------------------------------------+
|
||||
| YES |
|
||||
+------------------------------------------------+
|
||||
1 row in set (0.01 sec)
|
||||
'
|
||||
SQL SECURITY INVOKER
|
||||
DETERMINISTIC
|
||||
READS SQL DATA
|
||||
BEGIN
|
||||
RETURN IF(EXISTS(SELECT 1
|
||||
FROM performance_schema.setup_actors
|
||||
WHERE (`HOST` = '%' OR in_host LIKE `HOST`)
|
||||
AND (`USER` = '%' OR `USER` = in_user)
|
||||
),
|
||||
'YES', 'NO'
|
||||
);
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
70
scripts/sys_schema/functions/ps_is_account_enabled_57.sql
Normal file
70
scripts/sys_schema/functions/ps_is_account_enabled_57.sql
Normal file
@ -0,0 +1,70 @@
|
||||
-- Copyright (c) 2014, 2015, 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, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
DROP FUNCTION IF EXISTS ps_is_account_enabled;
|
||||
|
||||
DELIMITER $$
|
||||
|
||||
CREATE DEFINER='root'@'localhost' FUNCTION ps_is_account_enabled (
|
||||
in_host VARCHAR(60),
|
||||
in_user VARCHAR(32)
|
||||
)
|
||||
RETURNS ENUM('YES', 'NO')
|
||||
COMMENT '
|
||||
Description
|
||||
-----------
|
||||
|
||||
Determines whether instrumentation of an account is enabled
|
||||
within Performance Schema.
|
||||
|
||||
Parameters
|
||||
-----------
|
||||
|
||||
in_host VARCHAR(60):
|
||||
The hostname of the account to check.
|
||||
in_user VARCHAR(32):
|
||||
The username of the account to check.
|
||||
|
||||
Returns
|
||||
-----------
|
||||
|
||||
ENUM(\'YES\', \'NO\', \'PARTIAL\')
|
||||
|
||||
Example
|
||||
-----------
|
||||
|
||||
mysql> SELECT sys.ps_is_account_enabled(\'localhost\', \'root\');
|
||||
+------------------------------------------------+
|
||||
| sys.ps_is_account_enabled(\'localhost\', \'root\') |
|
||||
+------------------------------------------------+
|
||||
| YES |
|
||||
+------------------------------------------------+
|
||||
1 row in set (0.01 sec)
|
||||
'
|
||||
SQL SECURITY INVOKER
|
||||
DETERMINISTIC
|
||||
READS SQL DATA
|
||||
BEGIN
|
||||
RETURN IF(EXISTS(SELECT 1
|
||||
FROM performance_schema.setup_actors
|
||||
WHERE (`HOST` = '%' OR in_host LIKE `HOST`)
|
||||
AND (`USER` = '%' OR `USER` = in_user)
|
||||
AND (`ENABLED` = 'YES')
|
||||
),
|
||||
'YES', 'NO'
|
||||
);
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
76
scripts/sys_schema/functions/ps_is_consumer_enabled.sql
Normal file
76
scripts/sys_schema/functions/ps_is_consumer_enabled.sql
Normal file
@ -0,0 +1,76 @@
|
||||
-- Copyright (c) 2014, 2015, 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, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
DROP FUNCTION IF EXISTS ps_is_consumer_enabled;
|
||||
|
||||
DELIMITER $$
|
||||
|
||||
CREATE DEFINER='root'@'localhost' FUNCTION ps_is_consumer_enabled (
|
||||
in_consumer varchar(64)
|
||||
)
|
||||
RETURNS enum('YES', 'NO')
|
||||
COMMENT '
|
||||
Description
|
||||
-----------
|
||||
|
||||
Determines whether a consumer is enabled (taking the consumer hierarchy into consideration)
|
||||
within the Performance Schema.
|
||||
|
||||
Parameters
|
||||
-----------
|
||||
|
||||
in_consumer VARCHAR(64):
|
||||
The name of the consumer to check.
|
||||
|
||||
Returns
|
||||
-----------
|
||||
|
||||
ENUM(\'YES\', \'NO\')
|
||||
|
||||
Example
|
||||
-----------
|
||||
|
||||
mysql> SELECT sys.ps_is_consumer_enabled(\'events_stages_history\');
|
||||
+-----------------------------------------------------+
|
||||
| sys.ps_is_consumer_enabled(\'events_stages_history\') |
|
||||
+-----------------------------------------------------+
|
||||
| NO |
|
||||
+-----------------------------------------------------+
|
||||
1 row in set (0.00 sec)
|
||||
'
|
||||
SQL SECURITY INVOKER
|
||||
DETERMINISTIC
|
||||
READS SQL DATA
|
||||
BEGIN
|
||||
RETURN (
|
||||
SELECT (CASE
|
||||
WHEN c.NAME = 'global_instrumentation' THEN c.ENABLED
|
||||
WHEN c.NAME = 'thread_instrumentation' THEN IF(cg.ENABLED = 'YES' AND c.ENABLED = 'YES', 'YES', 'NO')
|
||||
WHEN c.NAME LIKE '%\_digest' THEN IF(cg.ENABLED = 'YES' AND c.ENABLED = 'YES', 'YES', 'NO')
|
||||
WHEN c.NAME LIKE '%\_current' THEN IF(cg.ENABLED = 'YES' AND ct.ENABLED = 'YES' AND c.ENABLED = 'YES', 'YES', 'NO')
|
||||
ELSE IF(cg.ENABLED = 'YES' AND ct.ENABLED = 'YES' AND c.ENABLED = 'YES'
|
||||
AND ( SELECT cc.ENABLED FROM performance_schema.setup_consumers cc WHERE NAME = CONCAT(SUBSTRING_INDEX(c.NAME, '_', 2), '_current')
|
||||
) = 'YES', 'YES', 'NO')
|
||||
END) AS IsEnabled
|
||||
FROM performance_schema.setup_consumers c
|
||||
INNER JOIN performance_schema.setup_consumers cg
|
||||
INNER JOIN performance_schema.setup_consumers ct
|
||||
WHERE cg.NAME = 'global_instrumentation'
|
||||
AND ct.NAME = 'thread_instrumentation'
|
||||
AND c.NAME = in_consumer
|
||||
);
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
@ -0,0 +1,76 @@
|
||||
-- Copyright (c) 2014, 2015, 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, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
DROP FUNCTION IF EXISTS ps_is_instrument_default_enabled;
|
||||
|
||||
DELIMITER $$
|
||||
|
||||
CREATE DEFINER='root'@'localhost' FUNCTION ps_is_instrument_default_enabled (
|
||||
in_instrument VARCHAR(128)
|
||||
)
|
||||
RETURNS ENUM('YES', 'NO')
|
||||
COMMENT '
|
||||
Description
|
||||
-----------
|
||||
|
||||
Returns whether an instrument is enabled by default in this version of MySQL.
|
||||
|
||||
Parameters
|
||||
-----------
|
||||
|
||||
in_instrument VARCHAR(128):
|
||||
The instrument to check.
|
||||
|
||||
Returns
|
||||
-----------
|
||||
|
||||
ENUM(\'YES\', \'NO\')
|
||||
|
||||
Example
|
||||
-----------
|
||||
|
||||
mysql> SELECT sys.ps_is_instrument_default_enabled(\'statement/sql/select\');
|
||||
+--------------------------------------------------------------+
|
||||
| sys.ps_is_instrument_default_enabled(\'statement/sql/select\') |
|
||||
+--------------------------------------------------------------+
|
||||
| YES |
|
||||
+--------------------------------------------------------------+
|
||||
1 row in set (0.00 sec)
|
||||
'
|
||||
SQL SECURITY INVOKER
|
||||
DETERMINISTIC
|
||||
READS SQL DATA
|
||||
BEGIN
|
||||
DECLARE v_enabled ENUM('YES', 'NO');
|
||||
|
||||
-- Currently the same in all versions
|
||||
SET v_enabled = IF(in_instrument LIKE 'wait/io/file/%'
|
||||
OR in_instrument LIKE 'wait/io/table/%'
|
||||
OR in_instrument LIKE 'statement/%'
|
||||
OR in_instrument LIKE 'memory/performance_schema/%'
|
||||
OR in_instrument IN ('wait/lock/table/sql/handler', 'idle')
|
||||
/*!50707
|
||||
OR in_instrument LIKE 'stage/innodb/%'
|
||||
OR in_instrument = 'stage/sql/copy to tmp table'
|
||||
*/
|
||||
,
|
||||
'YES',
|
||||
'NO'
|
||||
);
|
||||
|
||||
RETURN v_enabled;
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
@ -0,0 +1,75 @@
|
||||
-- Copyright (c) 2014, 2015, 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, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
DROP FUNCTION IF EXISTS ps_is_instrument_default_timed;
|
||||
|
||||
DELIMITER $$
|
||||
|
||||
CREATE DEFINER='root'@'localhost' FUNCTION ps_is_instrument_default_timed (
|
||||
in_instrument VARCHAR(128)
|
||||
)
|
||||
RETURNS ENUM('YES', 'NO')
|
||||
COMMENT '
|
||||
Description
|
||||
-----------
|
||||
|
||||
Returns whether an instrument is timed by default in this version of MySQL.
|
||||
|
||||
Parameters
|
||||
-----------
|
||||
|
||||
in_instrument VARCHAR(128):
|
||||
The instrument to check.
|
||||
|
||||
Returns
|
||||
-----------
|
||||
|
||||
ENUM(\'YES\', \'NO\')
|
||||
|
||||
Example
|
||||
-----------
|
||||
|
||||
mysql> SELECT sys.ps_is_instrument_default_timed(\'statement/sql/select\');
|
||||
+------------------------------------------------------------+
|
||||
| sys.ps_is_instrument_default_timed(\'statement/sql/select\') |
|
||||
+------------------------------------------------------------+
|
||||
| YES |
|
||||
+------------------------------------------------------------+
|
||||
1 row in set (0.00 sec)
|
||||
'
|
||||
SQL SECURITY INVOKER
|
||||
DETERMINISTIC
|
||||
READS SQL DATA
|
||||
BEGIN
|
||||
DECLARE v_timed ENUM('YES', 'NO');
|
||||
|
||||
-- Currently the same in all versions
|
||||
SET v_timed = IF(in_instrument LIKE 'wait/io/file/%'
|
||||
OR in_instrument LIKE 'wait/io/table/%'
|
||||
OR in_instrument LIKE 'statement/%'
|
||||
OR in_instrument IN ('wait/lock/table/sql/handler', 'idle')
|
||||
/*!50707
|
||||
OR in_instrument LIKE 'stage/innodb/%'
|
||||
OR in_instrument = 'stage/sql/copy to tmp table'
|
||||
*/
|
||||
,
|
||||
'YES',
|
||||
'NO'
|
||||
);
|
||||
|
||||
RETURN v_timed;
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
72
scripts/sys_schema/functions/ps_is_thread_instrumented.sql
Normal file
72
scripts/sys_schema/functions/ps_is_thread_instrumented.sql
Normal file
@ -0,0 +1,72 @@
|
||||
-- Copyright (c) 2015, 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, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
DROP FUNCTION IF EXISTS ps_is_thread_instrumented;
|
||||
|
||||
DELIMITER $$
|
||||
|
||||
CREATE DEFINER='root'@'localhost' FUNCTION ps_is_thread_instrumented (
|
||||
in_connection_id BIGINT UNSIGNED
|
||||
) RETURNS ENUM('YES', 'NO', 'UNKNOWN')
|
||||
COMMENT '
|
||||
Description
|
||||
-----------
|
||||
|
||||
Checks whether the provided connection id is instrumented within Performance Schema.
|
||||
|
||||
Parameters
|
||||
-----------
|
||||
|
||||
in_connection_id (BIGINT UNSIGNED):
|
||||
The id of the connection to check.
|
||||
|
||||
Returns
|
||||
-----------
|
||||
|
||||
ENUM(\'YES\', \'NO\', \'UNKNOWN\')
|
||||
|
||||
Example
|
||||
-----------
|
||||
|
||||
mysql> SELECT sys.ps_is_thread_instrumented(CONNECTION_ID());
|
||||
+------------------------------------------------+
|
||||
| sys.ps_is_thread_instrumented(CONNECTION_ID()) |
|
||||
+------------------------------------------------+
|
||||
| YES |
|
||||
+------------------------------------------------+
|
||||
'
|
||||
|
||||
SQL SECURITY INVOKER
|
||||
NOT DETERMINISTIC
|
||||
READS SQL DATA
|
||||
BEGIN
|
||||
DECLARE v_enabled ENUM('YES', 'NO', 'UNKNOWN');
|
||||
|
||||
IF (in_connection_id IS NULL) THEN
|
||||
RETURN NULL;
|
||||
END IF;
|
||||
|
||||
SELECT INSTRUMENTED INTO v_enabled
|
||||
FROM performance_schema.threads
|
||||
WHERE PROCESSLIST_ID = in_connection_id;
|
||||
|
||||
IF (v_enabled IS NULL) THEN
|
||||
RETURN 'UNKNOWN';
|
||||
ELSE
|
||||
RETURN v_enabled;
|
||||
END IF;
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
71
scripts/sys_schema/functions/ps_thread_account.sql
Normal file
71
scripts/sys_schema/functions/ps_thread_account.sql
Normal file
@ -0,0 +1,71 @@
|
||||
-- Copyright (c) 2015, 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, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
DROP FUNCTION IF EXISTS ps_thread_account;
|
||||
|
||||
DELIMITER $$
|
||||
|
||||
CREATE DEFINER='root'@'localhost' FUNCTION ps_thread_account (
|
||||
in_thread_id BIGINT UNSIGNED
|
||||
) RETURNS TEXT
|
||||
COMMENT '
|
||||
Description
|
||||
-----------
|
||||
|
||||
Return the user@host account for the given Performance Schema thread id.
|
||||
|
||||
Parameters
|
||||
-----------
|
||||
|
||||
in_thread_id (BIGINT UNSIGNED):
|
||||
The id of the thread to return the account for.
|
||||
|
||||
Example
|
||||
-----------
|
||||
|
||||
mysql> select thread_id, processlist_user, processlist_host from performance_schema.threads where type = ''foreground'';
|
||||
+-----------+------------------+------------------+
|
||||
| thread_id | processlist_user | processlist_host |
|
||||
+-----------+------------------+------------------+
|
||||
| 23 | NULL | NULL |
|
||||
| 30 | root | localhost |
|
||||
| 31 | msandbox | localhost |
|
||||
| 32 | msandbox | localhost |
|
||||
+-----------+------------------+------------------+
|
||||
4 rows in set (0.00 sec)
|
||||
|
||||
mysql> select sys.ps_thread_account(31);
|
||||
+---------------------------+
|
||||
| sys.ps_thread_account(31) |
|
||||
+---------------------------+
|
||||
| msandbox@localhost |
|
||||
+---------------------------+
|
||||
1 row in set (0.00 sec)
|
||||
'
|
||||
|
||||
SQL SECURITY INVOKER
|
||||
NOT DETERMINISTIC
|
||||
READS SQL DATA
|
||||
BEGIN
|
||||
RETURN (SELECT IF(
|
||||
type = 'FOREGROUND',
|
||||
CONCAT(processlist_user, '@', processlist_host),
|
||||
type
|
||||
) AS account
|
||||
FROM `performance_schema`.`threads`
|
||||
WHERE thread_id = in_thread_id);
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
66
scripts/sys_schema/functions/ps_thread_id.sql
Normal file
66
scripts/sys_schema/functions/ps_thread_id.sql
Normal file
@ -0,0 +1,66 @@
|
||||
-- Copyright (c) 2014, 2015, 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, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
DROP FUNCTION IF EXISTS ps_thread_id;
|
||||
|
||||
DELIMITER $$
|
||||
|
||||
CREATE DEFINER='root'@'localhost' FUNCTION ps_thread_id (
|
||||
in_connection_id BIGINT UNSIGNED
|
||||
) RETURNS BIGINT UNSIGNED
|
||||
COMMENT '
|
||||
Description
|
||||
-----------
|
||||
|
||||
Return the Performance Schema THREAD_ID for the specified connection ID.
|
||||
|
||||
Parameters
|
||||
-----------
|
||||
|
||||
in_connection_id (BIGINT UNSIGNED):
|
||||
The id of the connection to return the thread id for. If NULL, the current
|
||||
connection thread id is returned.
|
||||
|
||||
Example
|
||||
-----------
|
||||
|
||||
mysql> SELECT sys.ps_thread_id(79);
|
||||
+----------------------+
|
||||
| sys.ps_thread_id(79) |
|
||||
+----------------------+
|
||||
| 98 |
|
||||
+----------------------+
|
||||
1 row in set (0.00 sec)
|
||||
|
||||
mysql> SELECT sys.ps_thread_id(CONNECTION_ID());
|
||||
+-----------------------------------+
|
||||
| sys.ps_thread_id(CONNECTION_ID()) |
|
||||
+-----------------------------------+
|
||||
| 98 |
|
||||
+-----------------------------------+
|
||||
1 row in set (0.00 sec)
|
||||
'
|
||||
|
||||
SQL SECURITY INVOKER
|
||||
NOT DETERMINISTIC
|
||||
READS SQL DATA
|
||||
BEGIN
|
||||
RETURN (SELECT THREAD_ID
|
||||
FROM `performance_schema`.`threads`
|
||||
WHERE PROCESSLIST_ID = IFNULL(in_connection_id, CONNECTION_ID())
|
||||
);
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
171
scripts/sys_schema/functions/ps_thread_stack.sql
Normal file
171
scripts/sys_schema/functions/ps_thread_stack.sql
Normal file
@ -0,0 +1,171 @@
|
||||
-- Copyright (c) 2014, 2015, 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, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
DROP FUNCTION IF EXISTS ps_thread_stack;
|
||||
|
||||
DELIMITER $$
|
||||
|
||||
CREATE DEFINER='root'@'localhost' FUNCTION ps_thread_stack (
|
||||
thd_id BIGINT UNSIGNED,
|
||||
debug BOOLEAN
|
||||
)
|
||||
RETURNS LONGTEXT CHARSET latin1
|
||||
COMMENT '
|
||||
Description
|
||||
-----------
|
||||
|
||||
Outputs a JSON formatted stack of all statements, stages and events
|
||||
within Performance Schema for the specified thread.
|
||||
|
||||
Parameters
|
||||
-----------
|
||||
|
||||
thd_id (BIGINT UNSIGNED):
|
||||
The id of the thread to trace. This should match the thread_id
|
||||
column from the performance_schema.threads table.
|
||||
in_verbose (BOOLEAN):
|
||||
Include file:lineno information in the events.
|
||||
|
||||
Example
|
||||
-----------
|
||||
|
||||
(line separation added for output)
|
||||
|
||||
mysql> SELECT sys.ps_thread_stack(37, FALSE) AS thread_stack\\G
|
||||
*************************** 1. row ***************************
|
||||
thread_stack: {"rankdir": "LR","nodesep": "0.10","stack_created": "2014-02-19 13:39:03",
|
||||
"mysql_version": "5.7.3-m13","mysql_user": "root@localhost","events":
|
||||
[{"nesting_event_id": "0", "event_id": "10", "timer_wait": 256.35, "event_info":
|
||||
"sql/select", "wait_info": "select @@version_comment limit 1\\nerrors: 0\\nwarnings: 0\\nlock time:
|
||||
...
|
||||
'
|
||||
SQL SECURITY INVOKER
|
||||
NOT DETERMINISTIC
|
||||
READS SQL DATA
|
||||
BEGIN
|
||||
|
||||
DECLARE json_objects LONGTEXT;
|
||||
|
||||
/*!50602
|
||||
-- Do not track the current thread, it will kill the stack
|
||||
UPDATE performance_schema.threads
|
||||
SET instrumented = 'NO'
|
||||
WHERE processlist_id = CONNECTION_ID();
|
||||
*/
|
||||
|
||||
SET SESSION group_concat_max_len=@@global.max_allowed_packet;
|
||||
|
||||
-- Select the entire stack of events
|
||||
SELECT GROUP_CONCAT(CONCAT( '{'
|
||||
, CONCAT_WS( ', '
|
||||
, CONCAT('"nesting_event_id": "', IF(nesting_event_id IS NULL, '0', nesting_event_id), '"')
|
||||
, CONCAT('"event_id": "', event_id, '"')
|
||||
-- Convert from picoseconds to microseconds
|
||||
, CONCAT( '"timer_wait": ', ROUND(timer_wait/1000000, 2))
|
||||
, CONCAT( '"event_info": "'
|
||||
, CASE
|
||||
WHEN event_name NOT LIKE 'wait/io%' THEN REPLACE(SUBSTRING_INDEX(event_name, '/', -2), '\\', '\\\\')
|
||||
WHEN event_name NOT LIKE 'wait/io/file%' OR event_name NOT LIKE 'wait/io/socket%' THEN REPLACE(SUBSTRING_INDEX(event_name, '/', -4), '\\', '\\\\')
|
||||
ELSE event_name
|
||||
END
|
||||
, '"'
|
||||
)
|
||||
-- Always dump the extra wait information gathered for statements
|
||||
, CONCAT( '"wait_info": "', IFNULL(wait_info, ''), '"')
|
||||
-- If debug is enabled, add the file:lineno information for waits
|
||||
, CONCAT( '"source": "', IF(true AND event_name LIKE 'wait%', IFNULL(wait_info, ''), ''), '"')
|
||||
-- Depending on the type of event, name it appropriately
|
||||
, CASE
|
||||
WHEN event_name LIKE 'wait/io/file%' THEN '"event_type": "io/file"'
|
||||
WHEN event_name LIKE 'wait/io/table%' THEN '"event_type": "io/table"'
|
||||
WHEN event_name LIKE 'wait/io/socket%' THEN '"event_type": "io/socket"'
|
||||
WHEN event_name LIKE 'wait/synch/mutex%' THEN '"event_type": "synch/mutex"'
|
||||
WHEN event_name LIKE 'wait/synch/cond%' THEN '"event_type": "synch/cond"'
|
||||
WHEN event_name LIKE 'wait/synch/rwlock%' THEN '"event_type": "synch/rwlock"'
|
||||
WHEN event_name LIKE 'wait/lock%' THEN '"event_type": "lock"'
|
||||
WHEN event_name LIKE 'statement/%' THEN '"event_type": "stmt"'
|
||||
WHEN event_name LIKE 'stage/%' THEN '"event_type": "stage"'
|
||||
WHEN event_name LIKE '%idle%' THEN '"event_type": "idle"'
|
||||
ELSE ''
|
||||
END
|
||||
)
|
||||
, '}'
|
||||
)
|
||||
ORDER BY event_id ASC SEPARATOR ',') event
|
||||
INTO json_objects
|
||||
FROM (
|
||||
/*!50600
|
||||
-- Select all statements, with the extra tracing information available
|
||||
(SELECT thread_id, event_id, event_name, timer_wait, timer_start, nesting_event_id,
|
||||
CONCAT(sql_text, '\\n',
|
||||
'errors: ', errors, '\\n',
|
||||
'warnings: ', warnings, '\\n',
|
||||
'lock time: ', ROUND(lock_time/1000000, 2),'us\\n',
|
||||
'rows affected: ', rows_affected, '\\n',
|
||||
'rows sent: ', rows_sent, '\\n',
|
||||
'rows examined: ', rows_examined, '\\n',
|
||||
'tmp tables: ', created_tmp_tables, '\\n',
|
||||
'tmp disk tables: ', created_tmp_disk_tables, '\\n',
|
||||
'select scan: ', select_scan, '\\n',
|
||||
'select full join: ', select_full_join, '\\n',
|
||||
'select full range join: ', select_full_range_join, '\\n',
|
||||
'select range: ', select_range, '\\n',
|
||||
'select range check: ', select_range_check, '\\n',
|
||||
'sort merge passes: ', sort_merge_passes, '\\n',
|
||||
'sort rows: ', sort_rows, '\\n',
|
||||
'sort range: ', sort_range, '\\n',
|
||||
'sort scan: ', sort_scan, '\\n',
|
||||
'no index used: ', IF(no_index_used, 'TRUE', 'FALSE'), '\\n',
|
||||
'no good index used: ', IF(no_good_index_used, 'TRUE', 'FALSE'), '\\n'
|
||||
) AS wait_info
|
||||
FROM performance_schema.events_statements_history_long WHERE thread_id = thd_id)
|
||||
UNION
|
||||
-- Select all stages
|
||||
(SELECT thread_id, event_id, event_name, timer_wait, timer_start, nesting_event_id, null AS wait_info
|
||||
FROM performance_schema.events_stages_history_long WHERE thread_id = thd_id)
|
||||
UNION */
|
||||
-- Select all events, adding information appropriate to the event
|
||||
(SELECT thread_id, event_id,
|
||||
CONCAT(event_name ,
|
||||
IF(event_name NOT LIKE 'wait/synch/mutex%', IFNULL(CONCAT(' - ', operation), ''), ''),
|
||||
IF(number_of_bytes IS NOT NULL, CONCAT(' ', number_of_bytes, ' bytes'), ''),
|
||||
IF(event_name LIKE 'wait/io/file%', '\\n', ''),
|
||||
IF(object_schema IS NOT NULL, CONCAT('\\nObject: ', object_schema, '.'), ''),
|
||||
IF(object_name IS NOT NULL,
|
||||
IF (event_name LIKE 'wait/io/socket%',
|
||||
-- Print the socket if used, else the IP:port as reported
|
||||
CONCAT(IF (object_name LIKE ':0%', @@socket, object_name)),
|
||||
object_name),
|
||||
''),
|
||||
/*!50600 IF(index_name IS NOT NULL, CONCAT(' Index: ', index_name), ''),*/'\\n'
|
||||
) AS event_name,
|
||||
timer_wait, timer_start, nesting_event_id, source AS wait_info
|
||||
FROM performance_schema.events_waits_history_long WHERE thread_id = thd_id)) events
|
||||
ORDER BY event_id;
|
||||
|
||||
RETURN CONCAT('{',
|
||||
CONCAT_WS(',',
|
||||
'"rankdir": "LR"',
|
||||
'"nodesep": "0.10"',
|
||||
CONCAT('"stack_created": "', NOW(), '"'),
|
||||
CONCAT('"mysql_version": "', VERSION(), '"'),
|
||||
CONCAT('"mysql_user": "', CURRENT_USER(), '"'),
|
||||
CONCAT('"events": [', IFNULL(json_objects,''), ']')
|
||||
),
|
||||
'}');
|
||||
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
233
scripts/sys_schema/functions/ps_thread_trx_info.sql
Normal file
233
scripts/sys_schema/functions/ps_thread_trx_info.sql
Normal file
@ -0,0 +1,233 @@
|
||||
-- Copyright (c) 2015, 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, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
DROP FUNCTION IF EXISTS ps_thread_trx_info;
|
||||
|
||||
DELIMITER $$
|
||||
|
||||
CREATE DEFINER='root'@'localhost' FUNCTION ps_thread_trx_info (
|
||||
in_thread_id BIGINT UNSIGNED
|
||||
) RETURNS LONGTEXT
|
||||
COMMENT '
|
||||
Description
|
||||
-----------
|
||||
|
||||
Returns a JSON object with info on the given threads current transaction,
|
||||
and the statements it has already executed, derived from the
|
||||
performance_schema.events_transactions_current and
|
||||
performance_schema.events_statements_history tables (so the consumers
|
||||
for these also have to be enabled within Performance Schema to get full
|
||||
data in the object).
|
||||
|
||||
When the output exceeds the default truncation length (65535), a JSON error
|
||||
object is returned, such as:
|
||||
|
||||
{ "error": "Trx info truncated: Row 6 was cut by GROUP_CONCAT()" }
|
||||
|
||||
Similar error objects are returned for other warnings/and exceptions raised
|
||||
when calling the function.
|
||||
|
||||
The max length of the output of this function can be controlled with the
|
||||
ps_thread_trx_info.max_length variable set via sys_config, or the
|
||||
@sys.ps_thread_trx_info.max_length user variable, as appropriate.
|
||||
|
||||
Parameters
|
||||
-----------
|
||||
|
||||
in_thread_id (BIGINT UNSIGNED):
|
||||
The id of the thread to return the transaction info for.
|
||||
|
||||
Example
|
||||
-----------
|
||||
|
||||
SELECT sys.ps_thread_trx_info(48)\\G
|
||||
*************************** 1. row ***************************
|
||||
sys.ps_thread_trx_info(48): [
|
||||
{
|
||||
"time": "790.70 us",
|
||||
"state": "COMMITTED",
|
||||
"mode": "READ WRITE",
|
||||
"autocommitted": "NO",
|
||||
"gtid": "AUTOMATIC",
|
||||
"isolation": "REPEATABLE READ",
|
||||
"statements_executed": [
|
||||
{
|
||||
"sql_text": "INSERT INTO info VALUES (1, \'foo\')",
|
||||
"time": "471.02 us",
|
||||
"schema": "trx",
|
||||
"rows_examined": 0,
|
||||
"rows_affected": 1,
|
||||
"rows_sent": 0,
|
||||
"tmp_tables": 0,
|
||||
"tmp_disk_tables": 0,
|
||||
"sort_rows": 0,
|
||||
"sort_merge_passes": 0
|
||||
},
|
||||
{
|
||||
"sql_text": "COMMIT",
|
||||
"time": "254.42 us",
|
||||
"schema": "trx",
|
||||
"rows_examined": 0,
|
||||
"rows_affected": 0,
|
||||
"rows_sent": 0,
|
||||
"tmp_tables": 0,
|
||||
"tmp_disk_tables": 0,
|
||||
"sort_rows": 0,
|
||||
"sort_merge_passes": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"time": "426.20 us",
|
||||
"state": "COMMITTED",
|
||||
"mode": "READ WRITE",
|
||||
"autocommitted": "NO",
|
||||
"gtid": "AUTOMATIC",
|
||||
"isolation": "REPEATABLE READ",
|
||||
"statements_executed": [
|
||||
{
|
||||
"sql_text": "INSERT INTO info VALUES (2, \'bar\')",
|
||||
"time": "107.33 us",
|
||||
"schema": "trx",
|
||||
"rows_examined": 0,
|
||||
"rows_affected": 1,
|
||||
"rows_sent": 0,
|
||||
"tmp_tables": 0,
|
||||
"tmp_disk_tables": 0,
|
||||
"sort_rows": 0,
|
||||
"sort_merge_passes": 0
|
||||
},
|
||||
{
|
||||
"sql_text": "COMMIT",
|
||||
"time": "213.23 us",
|
||||
"schema": "trx",
|
||||
"rows_examined": 0,
|
||||
"rows_affected": 0,
|
||||
"rows_sent": 0,
|
||||
"tmp_tables": 0,
|
||||
"tmp_disk_tables": 0,
|
||||
"sort_rows": 0,
|
||||
"sort_merge_passes": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
1 row in set (0.03 sec)
|
||||
'
|
||||
|
||||
SQL SECURITY INVOKER
|
||||
NOT DETERMINISTIC
|
||||
READS SQL DATA
|
||||
BEGIN
|
||||
DECLARE v_output LONGTEXT DEFAULT '{}';
|
||||
DECLARE v_msg_text TEXT DEFAULT '';
|
||||
DECLARE v_signal_msg TEXT DEFAULT '';
|
||||
DECLARE v_mysql_errno INT;
|
||||
DECLARE v_max_output_len BIGINT;
|
||||
-- Capture warnings/errors such as group_concat truncation
|
||||
-- and report as JSON error objects
|
||||
DECLARE EXIT HANDLER FOR SQLWARNING, SQLEXCEPTION
|
||||
BEGIN
|
||||
GET DIAGNOSTICS CONDITION 1
|
||||
v_msg_text = MESSAGE_TEXT,
|
||||
v_mysql_errno = MYSQL_ERRNO;
|
||||
|
||||
IF v_mysql_errno = 1260 THEN
|
||||
SET v_signal_msg = CONCAT('{ "error": "Trx info truncated: ', v_msg_text, '" }');
|
||||
ELSE
|
||||
SET v_signal_msg = CONCAT('{ "error": "', v_msg_text, '" }');
|
||||
END IF;
|
||||
|
||||
RETURN v_signal_msg;
|
||||
END;
|
||||
|
||||
-- Set configuration options
|
||||
IF (@sys.ps_thread_trx_info.max_length IS NULL) THEN
|
||||
SET @sys.ps_thread_trx_info.max_length = sys.sys_get_config('ps_thread_trx_info.max_length', 65535);
|
||||
END IF;
|
||||
|
||||
IF (@sys.ps_thread_trx_info.max_length != @@session.group_concat_max_len) THEN
|
||||
SET @old_group_concat_max_len = @@session.group_concat_max_len;
|
||||
-- Convert to int value for the SET, and give some surrounding space
|
||||
SET v_max_output_len = (@sys.ps_thread_trx_info.max_length - 5);
|
||||
SET SESSION group_concat_max_len = v_max_output_len;
|
||||
END IF;
|
||||
|
||||
SET v_output = (
|
||||
SELECT CONCAT('[', IFNULL(GROUP_CONCAT(trx_info ORDER BY event_id), ''), '\n]') AS trx_info
|
||||
FROM (SELECT trxi.thread_id,
|
||||
trxi.event_id,
|
||||
GROUP_CONCAT(
|
||||
IFNULL(
|
||||
CONCAT('\n {\n',
|
||||
' "time": "', IFNULL(sys.format_time(trxi.timer_wait), ''), '",\n',
|
||||
' "state": "', IFNULL(trxi.state, ''), '",\n',
|
||||
' "mode": "', IFNULL(trxi.access_mode, ''), '",\n',
|
||||
' "autocommitted": "', IFNULL(trxi.autocommit, ''), '",\n',
|
||||
' "gtid": "', IFNULL(trxi.gtid, ''), '",\n',
|
||||
' "isolation": "', IFNULL(trxi.isolation_level, ''), '",\n',
|
||||
' "statements_executed": [', IFNULL(s.stmts, ''), IF(s.stmts IS NULL, ' ]\n', '\n ]\n'),
|
||||
' }'
|
||||
),
|
||||
'')
|
||||
ORDER BY event_id) AS trx_info
|
||||
|
||||
FROM (
|
||||
(SELECT thread_id, event_id, timer_wait, state,access_mode, autocommit, gtid, isolation_level
|
||||
FROM performance_schema.events_transactions_current
|
||||
WHERE thread_id = in_thread_id
|
||||
AND end_event_id IS NULL)
|
||||
UNION
|
||||
(SELECT thread_id, event_id, timer_wait, state,access_mode, autocommit, gtid, isolation_level
|
||||
FROM performance_schema.events_transactions_history
|
||||
WHERE thread_id = in_thread_id)
|
||||
) AS trxi
|
||||
LEFT JOIN (SELECT thread_id,
|
||||
nesting_event_id,
|
||||
GROUP_CONCAT(
|
||||
IFNULL(
|
||||
CONCAT('\n {\n',
|
||||
' "sql_text": "', IFNULL(sys.format_statement(REPLACE(sql_text, '\\', '\\\\')), ''), '",\n',
|
||||
' "time": "', IFNULL(sys.format_time(timer_wait), ''), '",\n',
|
||||
' "schema": "', IFNULL(current_schema, ''), '",\n',
|
||||
' "rows_examined": ', IFNULL(rows_examined, ''), ',\n',
|
||||
' "rows_affected": ', IFNULL(rows_affected, ''), ',\n',
|
||||
' "rows_sent": ', IFNULL(rows_sent, ''), ',\n',
|
||||
' "tmp_tables": ', IFNULL(created_tmp_tables, ''), ',\n',
|
||||
' "tmp_disk_tables": ', IFNULL(created_tmp_disk_tables, ''), ',\n',
|
||||
' "sort_rows": ', IFNULL(sort_rows, ''), ',\n',
|
||||
' "sort_merge_passes": ', IFNULL(sort_merge_passes, ''), '\n',
|
||||
' }'), '') ORDER BY event_id) AS stmts
|
||||
FROM performance_schema.events_statements_history
|
||||
WHERE sql_text IS NOT NULL
|
||||
AND thread_id = in_thread_id
|
||||
GROUP BY thread_id, nesting_event_id
|
||||
) AS s
|
||||
ON trxi.thread_id = s.thread_id
|
||||
AND trxi.event_id = s.nesting_event_id
|
||||
WHERE trxi.thread_id = in_thread_id
|
||||
GROUP BY trxi.thread_id, trxi.event_id
|
||||
) trxs
|
||||
GROUP BY thread_id
|
||||
);
|
||||
|
||||
IF (@old_group_concat_max_len IS NOT NULL) THEN
|
||||
SET SESSION group_concat_max_len = @old_group_concat_max_len;
|
||||
END IF;
|
||||
|
||||
RETURN v_output;
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
71
scripts/sys_schema/functions/quote_identifier.sql
Normal file
71
scripts/sys_schema/functions/quote_identifier.sql
Normal file
@ -0,0 +1,71 @@
|
||||
-- Copyright (c) 2016, 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, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
DROP FUNCTION IF EXISTS quote_identifier;
|
||||
|
||||
DELIMITER $$
|
||||
|
||||
-- https://dev.mysql.com/doc/refman/5.7/en/identifiers.html
|
||||
-- Maximum supported length for any of the current identifiers in 5.7.5+ is 256 characters.
|
||||
-- Before that, user variables could have any length.
|
||||
--
|
||||
-- Based on Paul Dubois' suggestion in Bug #78823/Bug #22011361.
|
||||
CREATE DEFINER='root'@'localhost' FUNCTION quote_identifier(in_identifier TEXT)
|
||||
RETURNS TEXT CHARSET UTF8
|
||||
COMMENT '
|
||||
Description
|
||||
-----------
|
||||
|
||||
Takes an unquoted identifier (schema name, table name, etc.) and
|
||||
returns the identifier quoted with backticks.
|
||||
|
||||
Parameters
|
||||
-----------
|
||||
|
||||
in_identifier (TEXT):
|
||||
The identifier to quote.
|
||||
|
||||
Returns
|
||||
-----------
|
||||
|
||||
TEXT
|
||||
|
||||
Example
|
||||
-----------
|
||||
|
||||
mysql> SELECT sys.quote_identifier(''my_identifier'') AS Identifier;
|
||||
+-----------------+
|
||||
| Identifier |
|
||||
+-----------------+
|
||||
| `my_identifier` |
|
||||
+-----------------+
|
||||
1 row in set (0.00 sec)
|
||||
|
||||
mysql> SELECT sys.quote_identifier(''my`idenfier'') AS Identifier;
|
||||
+----------------+
|
||||
| Identifier |
|
||||
+----------------+
|
||||
| `my``idenfier` |
|
||||
+----------------+
|
||||
1 row in set (0.00 sec)
|
||||
'
|
||||
SQL SECURITY INVOKER
|
||||
DETERMINISTIC
|
||||
NO SQL
|
||||
BEGIN
|
||||
RETURN CONCAT('`', REPLACE(in_identifier, '`', '``'), '`');
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
98
scripts/sys_schema/functions/sys_get_config.sql
Normal file
98
scripts/sys_schema/functions/sys_get_config.sql
Normal file
@ -0,0 +1,98 @@
|
||||
-- Copyright (c) 2014, 2015, 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, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
DROP FUNCTION IF EXISTS sys_get_config;
|
||||
|
||||
DELIMITER $$
|
||||
|
||||
CREATE DEFINER='root'@'localhost' FUNCTION sys_get_config (
|
||||
in_variable_name VARCHAR(128),
|
||||
in_default_value VARCHAR(128)
|
||||
)
|
||||
RETURNS VARCHAR(128)
|
||||
COMMENT '
|
||||
Description
|
||||
-----------
|
||||
|
||||
Returns the value for the requested variable using the following logic:
|
||||
|
||||
1. If the option exists in sys.sys_config return the value from there.
|
||||
2. Else fall back on the provided default value.
|
||||
|
||||
Notes for using sys_get_config():
|
||||
|
||||
* If the default value argument to sys_get_config() is NULL and case 2. is reached, NULL is returned.
|
||||
It is then expected that the caller is able to handle NULL for the given configuration option.
|
||||
* The convention is to name the user variables @sys.<name of variable>. It is <name of variable> that
|
||||
is stored in the sys_config table and is what is expected as the argument to sys_get_config().
|
||||
* If you want to check whether the configuration option has already been set and if not assign with
|
||||
the return value of sys_get_config() you can use IFNULL(...) (see example below). However this should
|
||||
not be done inside a loop (e.g. for each row in a result set) as for repeated calls where assignment
|
||||
is only needed in the first iteration using IFNULL(...) is expected to be significantly slower than
|
||||
using an IF (...) THEN ... END IF; block (see example below).
|
||||
|
||||
Parameters
|
||||
-----------
|
||||
|
||||
in_variable_name (VARCHAR(128)):
|
||||
The name of the config option to return the value for.
|
||||
|
||||
in_default_value (VARCHAR(128)):
|
||||
The default value to return if the variable does not exist in sys.sys_config.
|
||||
|
||||
Returns
|
||||
-----------
|
||||
|
||||
VARCHAR(128)
|
||||
|
||||
Example
|
||||
-----------
|
||||
|
||||
-- Get the configuration value from sys.sys_config falling back on 128 if the option is not present in the table.
|
||||
mysql> SELECT sys.sys_get_config(''statement_truncate_len'', 128) AS Value;
|
||||
+-------+
|
||||
| Value |
|
||||
+-------+
|
||||
| 64 |
|
||||
+-------+
|
||||
1 row in set (0.00 sec)
|
||||
|
||||
-- Check whether the option is already set, if not assign - IFNULL(...) one liner example.
|
||||
mysql> SET @sys.statement_truncate_len = IFNULL(@sys.statement_truncate_len, sys.sys_get_config(''statement_truncate_len'', 64));
|
||||
Query OK, 0 rows affected (0.00 sec)
|
||||
|
||||
-- Check whether the option is already set, if not assign - IF ... THEN ... END IF example.
|
||||
IF (@sys.statement_truncate_len IS NULL) THEN
|
||||
SET @sys.statement_truncate_len = sys.sys_get_config(''statement_truncate_len'', 64);
|
||||
END IF;
|
||||
'
|
||||
SQL SECURITY INVOKER
|
||||
DETERMINISTIC
|
||||
READS SQL DATA
|
||||
BEGIN
|
||||
DECLARE v_value VARCHAR(128) DEFAULT NULL;
|
||||
|
||||
-- Check if we have the variable in the sys.sys_config table
|
||||
SET v_value = (SELECT value FROM sys.sys_config WHERE variable = in_variable_name);
|
||||
|
||||
-- Protection against the variable not existing in sys_config
|
||||
IF (v_value IS NULL) THEN
|
||||
SET v_value = in_default_value;
|
||||
END IF;
|
||||
|
||||
RETURN v_value;
|
||||
END $$
|
||||
|
||||
DELIMITER ;
|
51
scripts/sys_schema/functions/version_major.sql
Normal file
51
scripts/sys_schema/functions/version_major.sql
Normal file
@ -0,0 +1,51 @@
|
||||
-- Copyright (c) 2014, 2015, 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, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
DROP FUNCTION IF EXISTS version_major;
|
||||
|
||||
DELIMITER $$
|
||||
|
||||
CREATE DEFINER='root'@'localhost' FUNCTION version_major ()
|
||||
RETURNS TINYINT UNSIGNED
|
||||
COMMENT '
|
||||
Description
|
||||
-----------
|
||||
|
||||
Returns the major version of MySQL Server.
|
||||
|
||||
Returns
|
||||
-----------
|
||||
|
||||
TINYINT UNSIGNED
|
||||
|
||||
Example
|
||||
-----------
|
||||
|
||||
mysql> SELECT VERSION(), sys.version_major();
|
||||
+--------------------------------------+---------------------+
|
||||
| VERSION() | sys.version_major() |
|
||||
+--------------------------------------+---------------------+
|
||||
| 5.7.9-enterprise-commercial-advanced | 5 |
|
||||
+--------------------------------------+---------------------+
|
||||
1 row in set (0.00 sec)
|
||||
'
|
||||
SQL SECURITY INVOKER
|
||||
NOT DETERMINISTIC
|
||||
NO SQL
|
||||
BEGIN
|
||||
RETURN SUBSTRING_INDEX(SUBSTRING_INDEX(VERSION(), '-', 1), '.', 1);
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
51
scripts/sys_schema/functions/version_minor.sql
Normal file
51
scripts/sys_schema/functions/version_minor.sql
Normal file
@ -0,0 +1,51 @@
|
||||
-- Copyright (c) 2014, 2015, 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, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
DROP FUNCTION IF EXISTS version_minor;
|
||||
|
||||
DELIMITER $$
|
||||
|
||||
CREATE DEFINER='root'@'localhost' FUNCTION version_minor ()
|
||||
RETURNS TINYINT UNSIGNED
|
||||
COMMENT '
|
||||
Description
|
||||
-----------
|
||||
|
||||
Returns the minor (release series) version of MySQL Server.
|
||||
|
||||
Returns
|
||||
-----------
|
||||
|
||||
TINYINT UNSIGNED
|
||||
|
||||
Example
|
||||
-----------
|
||||
|
||||
mysql> SELECT VERSION(), sys.server_minor();
|
||||
+--------------------------------------+---------------------+
|
||||
| VERSION() | sys.version_minor() |
|
||||
+--------------------------------------+---------------------+
|
||||
| 5.7.9-enterprise-commercial-advanced | 7 |
|
||||
+--------------------------------------+---------------------+
|
||||
1 row in set (0.00 sec)
|
||||
'
|
||||
SQL SECURITY INVOKER
|
||||
NOT DETERMINISTIC
|
||||
NO SQL
|
||||
BEGIN
|
||||
RETURN SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(VERSION(), '-', 1), '.', 2), '.', -1);
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
51
scripts/sys_schema/functions/version_patch.sql
Normal file
51
scripts/sys_schema/functions/version_patch.sql
Normal file
@ -0,0 +1,51 @@
|
||||
-- Copyright (c) 2014, 2015, 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, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
DROP FUNCTION IF EXISTS version_patch;
|
||||
|
||||
DELIMITER $$
|
||||
|
||||
CREATE DEFINER='root'@'localhost' FUNCTION version_patch ()
|
||||
RETURNS TINYINT UNSIGNED
|
||||
COMMENT '
|
||||
Description
|
||||
-----------
|
||||
|
||||
Returns the patch release version of MySQL Server.
|
||||
|
||||
Returns
|
||||
-----------
|
||||
|
||||
TINYINT UNSIGNED
|
||||
|
||||
Example
|
||||
-----------
|
||||
|
||||
mysql> SELECT VERSION(), sys.version_patch();
|
||||
+--------------------------------------+---------------------+
|
||||
| VERSION() | sys.version_patch() |
|
||||
+--------------------------------------+---------------------+
|
||||
| 5.7.9-enterprise-commercial-advanced | 9 |
|
||||
+--------------------------------------+---------------------+
|
||||
1 row in set (0.00 sec)
|
||||
'
|
||||
SQL SECURITY INVOKER
|
||||
NOT DETERMINISTIC
|
||||
NO SQL
|
||||
BEGIN
|
||||
RETURN SUBSTRING_INDEX(SUBSTRING_INDEX(VERSION(), '-', 1), '.', -1);
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
Reference in New Issue
Block a user