第三章 Mysql数据库性能
3.1 Mysql数据库的性能监控
3.1.1 mysql连接数
连接数指用户已经创建了多少个连接数,mysql通过执行 SHOW PROCESSLIST 命令输出数据库中运行着的线程个数详情,SHOW PROCESSLIST 默认只显示100条,如果需要显示超过100条记录,需要执行 SHOW FULL PROCESSLIST
数据库支持的最大连接数:SHOW VARIABLES like 'max_connections'
当前已使用的最大连接数:SHOW GLOBAL STATUS like 'Max_used_connections'
3.1.2 mysql数据库当前运行的事务与锁
事务是对数据库执行的一种带有原子性、一致性、隔离性、持久性的数据操作。
在Mysql中如果需要事务,那么数据库存储时必须选用Mysql的innodb引擎,使用Innodb引擎后,在mysql系统数据库中information_schmea的innodb_trx表中记录了数据库正在运行的事务。
字段 | 说明 |
---|---|
trx_id | 事务ID |
trx_state | 事务的状态 :Running,Lock Wait,Rolling Back 和 Commiting等 |
trx_started | 事务开始运行时间 |
trx_requested_lock_id | 事务需要等待的、但是已经被别的程序锁定的资源id,一般可以和innodb_locks表关联在一起,获取更多的被锁定的资源的详细信息 |
trx_wait_started | 事务开始等待时间 |
trx_weight | 事务的权重 |
trx_mysql_thread_id | 事务对应的mysql线程id |
trx_query | 事务正在执行的sql语句 |
trx_operation_state | 事务操作的状态 |
trx_tables_in_use | 事务使用到的数据库表的数量 |
trx_tables_locked | 事务锁定的数据库表的数量 |
trx_lock_structs | |
trx_lock_memory_bytes | 事务锁住的内存大小 |
trx_rows_locked | 事务锁定的数据记录行数 |
trx_rows_modified | 事务更改的数据记录行数 |
trx_concurrency_tickets | 事务并发票数 |
trx_isolation_level | 事务的隔离级别:一般分为Read Uncommited(未提交读取),Read Commited (已提交读取) ,Repeated Read(可重复读取),Serializable(序列化)四种不同级别 |
trx_unique_checks | 事务是否打开唯一性检查标识 |
trx_foreign_key_checks | 事务是否打开外键检查标识 |
trx_last_foreign_key_error | 事务最后一次外键检查的错误 |
trx_adaptive_hash_latched | |
trx_adaptive_hash_timeout | |
trx_is_read_only | |
trx_autocommit_non_locking |
Mysql系统数据库information_schmea的innodb_locks表中记录innodb数据库引擎当前产生的锁的情况。
Mysql 8.0 锁的观测 https://blog.csdn.net/n88Lpo/article/details/108211411
字段 | 说明 |
---|---|
lock_id | 锁的ID |
lock_trx_id | 拥有锁的事务ID,可以与Innodb_trx链表查询,获取事务详细信息 |
lock_mode | 锁的模式: 行级锁:包括S(共享锁),X(排他锁),IS(意向共享锁),IX (意向排他锁) 表级锁:包括S_GAP(共享间隙锁),X_GAP(排他间隙锁),IS_GAP(意向共享间隙锁),IX_GAP(意向排他间隙锁),AUTO_INC(自动递增锁) 页级锁 :介于行级锁和表级锁之间的一种锁 |
lock_type | 锁的类型,包括RECORD(行级锁),TABLE(表级锁),PAGE(页级锁),innodb引擎中主要采用行级锁; |
lock_table | 当前被锁定的或者包含锁定记录的表的名称 |
lock_index | 当lock_type为RECORD时,表示锁定的索引的名称,否则直接返回NULL |
lock_space | 当lock_type为RECORD时,表示锁定的表空间ID,否则直接返回NULL |
lock_page | 当lock_type为RECORD时,表示锁定的记录行的页数,否则直接返回NULL |
lock_rec | 当lock_type为RECORD时,表示锁定的数据行的数量 |
lock_data | 当lock_type为RECORD时,表示锁定的记录行的主键 |
Mysql系统数据库information_schmea的innodb_lock_waits表中记录innodb数据库引擎当前运行的数据库事务等待锁的情况。
字段 | 说明 |
---|---|
requesting_trx_id | 请求事务的id |
requested_lock_id | 事务所等待的锁的id,可以和innodb_locks表关联查询 |
blocking_trx_id | 阻塞事务的ID |
blocking_lock_id | 阻塞了另一事务的、正在运行的事务的锁的ID |
数据库中出现死锁时,经常需要通过查询innodb_trx,innodb_locks和innodb_lock_waits来找出在执行什么事务操作时导致了死锁,例如执行如下SQL语句可以列出数据中所有事务的等待和锁定记录
--这里有sql语句