--
-- Elementy instrumentu
--

SELECT * FROM performance_schema.setup_instruments
WHERE DOCUMENTATION IS NOT NULL LIMIT 5, 5\G



SELECT user,birthdate FROM users WHERE user_id=19;
SELECT user,birthdate FROM users WHERE user_id=13;
SELECT user,birthdate FROM users WHERE user_id=27;



--
-- Poznajemy wątki
--

SELECT NAME, THREAD_ID, PROCESSLIST_ID, THREAD_OS_ID 
FROM performance_schema.threads;



--
-- Konfiguracja
--

SELECT * FROM performance_schema.setup_instruments 
WHERE NAME='statement/sql/select'\G



UPDATE performance_schema.setup_instruments
SET ENABLED='YES' WHERE NAME='statement/sql/select';



UPDATE performance_schema.setup_instruments
SET ENABLED='YES' WHERE NAME LIKE 'statement/sql/%';



CALL sys.ps_setup_enable_instrument('statement/sql/select');



INSERT INTO performance_schema.setup_objects
(OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, ENABLED) 
VALUES ('TRIGGER', 'test', '%', 'NO');



INSERT INTO performance_schema.setup_objects
(OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, ENABLED) 
VALUES ('TRIGGER', 'test', 'my_trigger', 'YES');



UPDATE performance_schema.setup_threads SET HISTORY='NO' 
WHERE NAME='thread/sql/event_scheduler';



INSERT INTO performance_schema.setup_actors 
(HOST, USER, ENABLED, HISTORY) 
VALUES ('localhost', 'sveta', 'YES', 'NO'), 
('example.com', 'sveta', 'YES', 'YES'), 
('localhost', '%', 'NO', 'NO');



--
-- Stosowanie Performance Schema
--

SELECT THREAD_ID, SQL_TEXT, ROWS_SENT, ROWS_EXAMINED, CREATED_TMP_TABLES,
NO_INDEX_USED, NO_GOOD_INDEX_USED
FROM performance_schema.events_statements_history_long
WHERE NO_INDEX_USED > 0 OR NO_GOOD_INDEX_USED > 0;



SELECT THREAD_ID, SQL_TEXT, ROWS_SENT, ROWS_EXAMINED, CREATED_TMP_TABLES,
CREATED_TMP_DISK_TABLES
FROM performance_schema.events_statements_history_long
WHERE CREATED_TMP_TABLES > 0 OR CREATED_TMP_DISK_TABLES > 0;



WHERE ROWS_EXAMINED > ROWS_SENT
OR ROWS_EXAMINED > ROWS_AFFECTED
OR ERRORS > 0
OR CREATED_TMP_DISK_TABLES > 0
OR CREATED_TMP_TABLES > 0
OR SELECT_FULL_JOIN > 0
OR SELECT_FULL_RANGE_JOIN > 0
OR SELECT_RANGE > 0
OR SELECT_RANGE_CHECK > 0
OR SELECT_SCAN > 0
OR SORT_MERGE_PASSES > 0
OR SORT_RANGE > 0
OR SORT_ROWS > 0
OR SORT_SCAN > 0
OR NO_INDEX_USED > 0
OR NO_GOOD_INDEX_USED > 0



SELECT query, total_latency, no_index_used_count, rows_sent,
rows_examined
FROM sys.statements_with_full_table_scans
WHERE db='employees' AND 
query NOT LIKE '%performance_schema%'\G



PREPARE stmt FROM 
'SELECT COUNT(*) FROM employees WHERE hire_date > ?';



SELECT statement_name, sql_text, owner_thread_id, 
count_reprepare, count_execute, sum_timer_execute 
FROM prepared_statements_instances\G



CREATE DEFINER='root'@'localhost' PROCEDURE 'sp_test'(val int)
BEGIN
  DECLARE CONTINUE HANDLER FOR 1364, 1048, 1366
  BEGIN
    INSERT IGNORE INTO t1 VALUES('Some string');
    GET STACKED DIAGNOSTICS CONDITION 1 @stacked_state = RETURNED_SQLSTATE;
    GET STACKED DIAGNOSTICS CONDITION 1 @stacked_msg = MESSAGE_TEXT;
  END;
  INSERT INTO t1 VALUES(val);
END



SELECT THREAD_ID, EVENT_NAME, SQL_TEXT 
FROM EVENTS_STATEMENTS_HISTORY
WHERE EVENT_NAME LIKE 'statement/sp%';



SELECT THREAD_ID, EVENT_NAME, SQL_TEXT 
FROM EVENTS_STATEMENTS_HISTORY
WHERE EVENT_NAME LIKE 'statement/sp%';



SELECT eshl.event_name, sql_text, 
       eshl.timer_wait/10000000000 w_s
FROM performance_schema.events_stages_history_long eshl
JOIN performance_schema.events_statements_history_long esthl
ON (eshl.nesting_event_id = esthl.event_id)
WHERE eshl.timer_wait > 1*10000000000\G



SELECT EVENT_NAME, COUNT(EVENT_NAME) 
FROM events_statements_history_long 
GROUP BY EVENT_NAME;



SELECT EVENT_NAME, COUNT(EVENT_NAME), 
SUM(LOCK_TIME/1000000) AS latency_ms
FROM events_statements_history 
GROUP BY EVENT_NAME ORDER BY latency_ms DESC;



WITH rows_read AS (SELECT SUM(VARIABLE_VALUE) AS rows_read
FROM global_status
WHERE VARIABLE_NAME IN ('Handler_read_first', 'Handler_read_key',
'Handler_read_next', 'Handler_read_last', 'Handler_read_prev',
'Handler_read_rnd', 'Handler_read_rnd_next')), 
rows_written AS (SELECT SUM(VARIABLE_VALUE) AS rows_written
FROM global_status
WHERE VARIABLE_NAME IN ('Handler_write')) 
SELECT * FROM rows_read, rows_written\G



SELECT processlist_id, object_type, 
lock_type, lock_status, source
FROM metadata_locks JOIN threads ON (owner_thread_id=thread_id)
WHERE object_schema='employees' AND object_name='titles'\G



SELECT EVENT_NAME, 
CURRENT_NUMBER_OF_BYTES_USED/1024/1024 AS CURRENT_MB, 
HIGH_NUMBER_OF_BYTES_USED/1024/1024 AS HIGH_MB 
FROM performance_schema.memory_summary_global_by_event_name 
WHERE EVENT_NAME LIKE 'memory/innodb/%'
ORDER BY CURRENT_NUMBER_OF_BYTES_USED DESC LIMIT 10;



SELECT thread_id tid, user, 
current_allocated ca, total_allocated 
FROM sys.memory_by_thread_by_current_bytes LIMIT 9;



SELECT * FROM sys.memory_by_thread_by_current_bytes
ORDER BY current_allocated desc\G



SELECT * FROM variables_by_thread 
WHERE VARIABLE_NAME='tx_isolation';



SELECT vt2.THREAD_ID AS TID, vt2.VARIABLE_NAME, 
vt1.VARIABLE_VALUE AS MY_VALUE,
vt2.VARIABLE_VALUE AS OTHER_VALUE 
FROM performance_schema.variables_by_thread vt1 
JOIN performance_schema.threads t USING(THREAD_ID) 
JOIN performance_schema.variables_by_thread vt2 
USING(VARIABLE_NAME) 
WHERE vt1.VARIABLE_VALUE != vt2.VARIABLE_VALUE 
AND t.PROCESSLIST_ID=@@pseudo_thread_id;



SELECT * FROM status_by_thread 
WHERE VARIABLE_NAME='Handler_write';



SELECT * FROM performance_schema.variables_info 
WHERE VARIABLE_SOURCE = 'DYNAMIC'\G



USE performance_schema;
mysql> SHOW CREATE TABLE events_errors_summary_global_by_error\G



SELECT * FROM 
performance_schema.events_errors_summary_by_account_by_error 
WHERE SUM_ERROR_RAISED > 10 AND USER IS NOT NULL 
ORDER BY SUM_ERROR_RAISED DESC\G



SELECT SUBSTRING_INDEX(EVENT_NAME, '/', -1) AS EVENT,
CURRENT_NUMBER_OF_BYTES_USED/1024/1024 AS CURRENT_MB, 
HIGH_NUMBER_OF_BYTES_USED/1024/1024 AS HIGH_MB 
FROM performance_schema.memory_summary_global_by_event_name 
WHERE EVENT_NAME LIKE 'memory/performance_schema/%'
ORDER BY CURRENT_NUMBER_OF_BYTES_USED DESC LIMIT 10;



SELECT SUBSTRING_INDEX(event_name, '/', -1), current_alloc 
FROM sys.memory_global_by_current_bytes 
WHERE event_name LIKE 'memory/performance_schema/%' LIMIT 10;
