MySQL Madrid Users GroupResumen performance_schema Simon J Mudd | 20/02/2014 ¿Qué es performance_schema? ● ● ● ● Motor de MySQL especial Muestra el estado interno de MySQL: actual y pasado Disponible desde MySQL 5.5, interesante desde 5.6 Ofrece metricas de bajo nivel: puede ser complicado comprender los datos ● En su configuración predeterminada no colecciona todo ● Tener P_S da un overhead adicional pero sin ello estás ciego 2 determina que se hace con estas medidas ● También existe de 3 tablas menos utilizadas: ● setup_actors ● setup_objects ● setup_timers 3 .¿Cómo se configura? ● Está habilitado cuando MySQL arranca a través de la siguiente opción en /etc/my.cnf ● performance_schema = 1 ● Hay 2 tablas principales de configuración: ● setup_instruments (546 rows) – determina que que cosas están medidas ● setup_consumers (12 rows) . +--------------------------------+---------+ | NAME | ENABLED | +--------------------------------+---------+ | events_stages_current | YES | | events_stages_history | YES | | events_stages_history_long | NO | | events_statements_current | YES | | events_statements_history | NO | | events_statements_history_long | NO | | events_waits_current | YES | | events_waits_history | YES | | events_waits_history_long | NO | | global_instrumentation | YES | | thread_instrumentation | YES | | statements_digest | YES | +--------------------------------+---------+ 12 rows in set (0.00 sec) 4 .setup_consumers mysql> SELECT * FROM setup_consumers. setup_consumers ● Stages ● Representa las diferentes etapas durante el procesamiento de un query ● Statements ● Información sobre diferentes comandos SQL que se está procesando ● Waits ● Dónde mysqld espera a un evento durante sus distintas tareas ● Global_instrumentation ● Información global 5 . setup_instruments mysql> SELECT * FROM setup_instruments. +-----------------------------------------------+---------+-------+ | NAME | ENABLED | TIMED | +-----------------------------------------------+---------+-------+ | wait/synch/mutex/sql/PAGE::lock | NO | NO | | wait/synch/mutex/sql/TC_LOG_MMAP::LOCK_sync | NO | NO | | wait/synch/mutex/sql/TC_LOG_MMAP::LOCK_active | NO | NO | | wait/synch/mutex/sql/TC_LOG_MMAP::LOCK_pool | NO | NO | | wait/synch/mutex/sql/LOCK_des_key_file | NO | NO | … +-----------------------------------------------+---------+-------+ 6 . setup_instruments ● Hay entradas para cada etapa del procesamiento de un query y aquí se determina si se mide la información o no. 7 . ● Por ejemplo: ● ● ● ● ● ● wait/synch/mutex/innodb/trx_mutex wait/synch/mutex/innodb/os_mutex wait/synch/rwlock/innodb/fil_space_latch wait/io/file/sql/binlog wait/io/file/sql/FRM …. 8 .6 tiene 52 tablas divididas entre: ● ● ● ● ● ● ● ● events_stages (8 tablas: información sobre etapas de un query) events_statements (9 tablas: información sobre statements) events_waits (9 tablas: información sobre donde MySQL espera) file_* (3 tablas: información sobre los archivos gestiondos por MySQL) host_* (refiere a hosts o clientes de MySQL) socket_* (refiere al uso de sockets por MySQL) table_ (refiere a tablas de MySQL) ….P_S tables ● MySQL 5. alugunos ejemplos ● Y ahora unos ejemplos… 9 .Menos teória. hosts ● Los hosts que han conectado a MySQL: 10 . host_cache ● Información sobre los hosts que han conectado a MySQL 11 . host_cache ● Information on hosts connecting to MySQL 12 . Antes de MySQL 5.com/71382 13 .6 en algunos sistemas.host_cache ● Me di cuenta que el tamaño del cache era demasiado pequeño y esto provoca más peticiones DNS para resolver el nombre de la dirección ip ● Así que hay que configurar the host_cache_size en 5.6 el valor era determinado al compilar MySQL.mysql. ● Relacionado: http://bugs. table_io_waits_summary_by_table ● El tiempo que se espera al leer o escribir a una tabla 14 . file_io_summary_by_instance ● El tiempo que se espera para el acceso a un archivo 15 . events_waits_history ● ¿Dónde está esperando MySQL para su siguiente paso? 16 . Esperando para el procesamiento de comandos SQL 17 .ibd files) ● 3r.events_waits_history ● Quizá no sorprende: ● 1 – Esperando para un COMMIT (escritura a los archivos ib_logfile) ● 2 – Esperando para un checkpointing (escritura a archivos . events_stages_history ● Su configuración no está habilitada de manera predeterminada ● Se configura así: 18 . events_stages_history ● ¿Dónde está esperando durante el procesamiento SQL? 19 . P_S sizing 20 . P_S sizing ● Las tablas que contienen información histórica contiene los últimos 10 eventos. 21 .000 eventos ● En algunos casos puede ser necesario ajustar estos parametros. las tablas history_long contiene los últimos 10. ● Su configuración requiere: 22 .events_statements ● Lo que queremos ver todos: lo que hacen los desarrolladores y buscar los queries malos…. events_statements 23 . Contiene una serie de vistas sobre P_S 24 .ps_helper ● Mark Leith desarrolló un schema que llamó ps_helper. útil para manipulación posterior si es necsario.ps_helper ● Ahorra tiempo porque simplifica los SELECTs que tienes que realizar ● No tiene coste: son VIEWs ● Hay 2 tipos de VIEW: las bonitas con los datos formateados y otras con la información sin ordenar. ● ps_helper estará incluido en MySQL 5.7 (con el nombre de schema sys) 25 . y así permite que pueden optimizar sus queries 26 .7 contiene más tablas ● Sobre la utilización de memoria ● Sobre replicación y la actividades de los distintos threads ● Hay que comprender la información que contiene y compartirla con los desarrolladores.Resumen ● Ha sido un resumen muy breve ● P_S contiene mucha información muy útil ● MySQL 5. Referencias Algunas referencias: ● performance_schema ● http://dev.mysql.com/doc/refman/5.com/MarkLeith/dbahelper/ ● https://github.html ● dba_helper / mysql-sys ● https://github.com/MarkLeith/mysql-sys/ 27 .6/en/performanceschema.