美文网首页
Mysql如何查找慢查询,如何发现事务阻塞源头,如何分析事务执行

Mysql如何查找慢查询,如何发现事务阻塞源头,如何分析事务执行

作者: GGBond_8488 | 来源:发表于2021-08-05 09:28 被阅读0次

    mysql版本基于5.6.43

    information_schema

    在MySQL中,把 information_schema 看作是一个数据库,确切说是信息数据库。其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权 限等。在INFORMATION_SCHEMA中,有数个只读表。它们实际上是视图,而不是基本表,因此,你将无法看到与之相关的任何文件。

    +---------------------------------------+
    | Tables_in_information_schema          |
    +---------------------------------------+
    | CHARACTER_SETS                        |
    | COLLATIONS                            |
    | COLLATION_CHARACTER_SET_APPLICABILITY |
    | COLUMNS                               |
    | COLUMN_PRIVILEGES                     |
    | ENGINES                               |
    | EVENTS                                |
    | TABLESPACES                           |
    | TABLE_CONSTRAINTS                     |
    | TABLE_PRIVILEGES                      |
    | TRIGGERS                              |
    | USER_PRIVILEGES                       |
    | VIEWS                                 |
    | INNODB_LOCKS                          |
    | INNODB_TRX                            |
    | INNODB_SYS_DATAFILES                  |
    | INNODB_LOCK_WAITS                     |
    ....
    | INNODB_SYS_FOREIGN_COLS               |
    | INNODB_SYS_TABLES                     |
    | INNODB_BUFFER_POOL_STATS              |
    | INNODB_FT_CONFIG                      |
    +---------------------------------------+
    59 rows in set (0.00 sec)
    

    这里我们重点关注INNODB_TRX, INNODB_LOCKS, 以及INNODB_LOCK_WAITS三张表,表如其名,这三张表记录了正在运行的事务(包括事务占用or释放锁的信息)状态信息

    mysql> desc INNODB_TRX;
    +----------------------------+---------------------+------+-----+---------------------+-------+
    | Field                      | Type                | Null | Key | Default             | Extra |
    +----------------------------+---------------------+------+-----+---------------------+-------+
    | trx_id                     | varchar(18)         | NO   |     |                     |       |
    | trx_state                  | varchar(13)         | NO   |     |                     |       |
    | trx_started                | datetime            | NO   |     | 0000-00-00 00:00:00 |       |
    | trx_requested_lock_id      | varchar(81)         | YES  |     | NULL                |       |
    | trx_wait_started           | datetime            | YES  |     | NULL                |       |
    | trx_weight                 | bigint(21) unsigned | NO   |     | 0                   |       |
    | trx_mysql_thread_id        | bigint(21) unsigned | NO   |     | 0                   |       |
    | trx_query                  | varchar(1024)       | YES  |     | NULL                |       |
    | trx_operation_state        | varchar(64)         | YES  |     | NULL                |       |
    | trx_tables_in_use          | bigint(21) unsigned | NO   |     | 0                   |       |
    | trx_tables_locked          | bigint(21) unsigned | NO   |     | 0                   |       |
    | trx_lock_structs           | bigint(21) unsigned | NO   |     | 0                   |       |
    | trx_lock_memory_bytes      | bigint(21) unsigned | NO   |     | 0                   |       |
    | trx_rows_locked            | bigint(21) unsigned | NO   |     | 0                   |       |
    | trx_rows_modified          | bigint(21) unsigned | NO   |     | 0                   |       |
    | trx_concurrency_tickets    | bigint(21) unsigned | NO   |     | 0                   |       |
    | trx_isolation_level        | varchar(16)         | NO   |     |                     |       |
    | trx_unique_checks          | int(1)              | NO   |     | 0                   |       |
    | trx_foreign_key_checks     | int(1)              | NO   |     | 0                   |       |
    | trx_last_foreign_key_error | varchar(256)        | YES  |     | NULL                |       |
    | trx_adaptive_hash_latched  | int(1)              | NO   |     | 0                   |       |
    | trx_adaptive_hash_timeout  | bigint(21) unsigned | NO   |     | 0                   |       |
    | trx_is_read_only           | int(1)              | NO   |     | 0                   |       |
    | trx_autocommit_non_locking | int(1)              | NO   |     | 0                   |       |
    +----------------------------+---------------------+------+-----+---------------------+-------+
    
    mysql> desc INNODB_LOCKS;
    +-------------+---------------------+------+-----+---------+-------+
    | Field       | Type                | Null | Key | Default | Extra |
    +-------------+---------------------+------+-----+---------+-------+
    | lock_id     | varchar(81)         | NO   |     |         |       |
    | lock_trx_id | varchar(18)         | NO   |     |         |       |
    | lock_mode   | varchar(32)         | NO   |     |         |       |
    | lock_type   | varchar(32)         | NO   |     |         |       |
    | lock_table  | varchar(1024)       | NO   |     |         |       |
    | lock_index  | varchar(1024)       | YES  |     | NULL    |       |
    | lock_space  | bigint(21) unsigned | YES  |     | NULL    |       |
    | lock_page   | bigint(21) unsigned | YES  |     | NULL    |       |
    | lock_rec    | bigint(21) unsigned | YES  |     | NULL    |       |
    | lock_data   | varchar(8192)       | YES  |     | NULL    |       |
    +-------------+---------------------+------+-----+---------+-------+
    
    +-------------------+-------------+------+-----+---------+-------+
    | Field             | Type        | Null | Key | Default | Extra |
    +-------------------+-------------+------+-----+---------+-------+
    | requesting_trx_id | varchar(18) | NO   |     |         |       |
    | requested_lock_id | varchar(81) | NO   |     |         |       |
    | blocking_trx_id   | varchar(18) | NO   |     |         |       |
    | blocking_lock_id  | varchar(81) | NO   |     |         |       |
    +-------------------+-------------+------+-----+---------+-------+
    

    performance_schema

    该数据库主要关注数据库运行过程中的性能相关的数据,与information_schema不同,information_schema主要关注server运行过程中的元数据信息

    performance_schema通过监视server的事件来实现监视server内部运行情况, “事件”就是server内部活动中所做的任何事情以及对应的时间消耗,利用这些信息来判断server中的相关资源消耗在了哪里?一般来说,事件可以是函数调用、操作系统的等待、SQL语句执行的阶段(如sql语句执行过程中的parsing 或 sorting阶段)或者整个SQL语句与SQL语句集合。事件的采集可以方便的提供server中的相关存储引擎对磁盘文件、表I/O、表锁等资源的同步调用信息。

    收集的事件数据存储在performance_schema数据库的表中。这些表可以使用SELECT语句查询,也可以使用SQL语句更新performance_schema数据库中的表记录(如动态修改performance_schema的setup_*开头的几个配置表,但要注意:配置表的更改会立即生效,这会影响数据收集)

    +----------------------------------------------------+
    | Tables_in_performance_schema                       |
    +----------------------------------------------------+
    | accounts                                           |
    | cond_instances                                     |
    | events_stages_current                              |
    | events_stages_history                              |
    | events_stages_history_long                         |
    | events_stages_summary_by_account_by_event_name     |
    | events_stages_summary_by_host_by_event_name        |
    | events_stages_summary_by_thread_by_event_name      |
    | events_stages_summary_by_user_by_event_name        |
    | events_stages_summary_global_by_event_name         |
    | events_statements_current                          |
    | events_statements_history                          |
    | events_statements_history_long                     |
    | events_statements_summary_by_account_by_event_name |
    | events_statements_summary_by_digest                |
    | events_statements_summary_by_host_by_event_name    |
    | events_statements_summary_by_thread_by_event_name  |
    | events_statements_summary_by_user_by_event_name    |
    | events_statements_summary_global_by_event_name     |
    ...
    | users                                              |
    +----------------------------------------------------
    

    语句事件记录表,这些表记录了语句事件信息,当前语句事件表events_statements_current、历史语句事件表events_statements_history和长语句历史事件表events_statements_history_long、以及聚合后的摘要表summary,其中,summary表还可以根据帐号(account),主机(host),程序(program),线程(thread),用户(user)和全局(global)再进行细分)

    相关文章

      网友评论

          本文标题:Mysql如何查找慢查询,如何发现事务阻塞源头,如何分析事务执行

          本文链接:https://www.haomeiwen.com/subject/byogyktx.html