1. 看有没有锁等待

SHOW STATUS LIKE 'innodb_row_lock%';

2. 查看哪个事务在等待(被阻塞了)

USE information_schema

SELECT * FROM information_schema.INNODB_TRX WHERE trx_state='LOCK WAIT';

trx_id : 事务ID号

trx_state : 当前事务的状态

trx_mysql_thread_id:连接层的,连接线程ID(SHOW PROCESSLIST ===>Id或trx_id )

trx_query : 当前被阻塞的操作(一般是要丢给开发的)

查看锁源,谁锁的我!

SELECT * FROM sys.innodb_lock_waits; ## ====>被锁的和锁定它的之间关系

locked_table : 哪张表出现的等待

waiting_trx_id: 等待的事务(与上个视图trx_id 对应)

waiting_pid : 等待的线程号(与上个视图trx_mysql_thread_id)

blocking_trx_id : 锁源的事务ID

blocking_pid : 锁源的线程号

找到锁源的thread_id

SELECT * FROM performance_schema.threads WHERE processlist_id=15;

====> 41

找到锁源的SQL语句

-- 当前在执行的语句

SELECT * FROM performance_schema.events_statements_current WHERE thread_id=41;

-- 执行语句的历史

SELECT * FROM performance_schema.events_statements_history WHERE thread_id=41;

得出结果,丢给开发

表信息

被阻塞的

锁源SQL

优化项目:锁的监控及处理

背景:

硬件环境: DELL R720,E系列16核,48G MEM,SAS900G6,RAID10

在例行巡检时,发现9-11点时间段的CPU压力非常高(80-90%)

项目的职责

2.1 通过top详细排查,发现mysqld进程占比达到了700-800%

2.2 其中有量的CPU是被用作的SYS和WAIT,us处于正常

2.3 怀疑是MySQL 锁 或者SQL语句出了问题

2.4 经过排查slowlog及锁等待情况,发现有大量锁等待及少量慢语句

(1) pt-query-diagest 查看慢日志

(2) 锁等待有没有?

db03 [(none)]>show status like 'innodb_row_lock%';

+-------------------------------+-------+

| Variable_name | Value |

+-------------------------------+-------+

| Innodb_row_lock_current_waits | 0 |

| Innodb_row_lock_time | 0 |

| Innodb_row_lock_time_avg | 0 |

| Innodb_row_lock_time_max | 0 |

| Innodb_row_lock_waits | 0 |

+-------------------------------+-------+

情况一:

有100多个current_waits,说明当前很多锁等待情况

情况二:

1000多个lock_waits,说明历史上发生过的锁等待很多

2.5 查看那个事务在等待(被阻塞了)

2.6 查看锁源事务信息(谁锁的我)

2.7 找到锁源的thread_id

2.8 找到锁源的SQL语句

找到语句之后,和应用开发人员进行协商

(1)

开发人员描述,此语句是事务挂起导致

我们提出建议是临时kill 会话,最终解决问题

(2)

开发人员查看后,发现是业务逻辑问题导致的死锁,产生了大量锁等待

临时解决方案,将阻塞事务的会话kill掉.

最终解决方案,修改代码中的业务逻辑

项目结果:

经过排查处理,锁等待的个数减少80%.解决了CPU持续峰值的问题.

锁监控设计到的命令:

show status like 'innodb_rows_lock%'

select * from information_schema.innodb_trx;

select * from sys.innodb_lock_waits;

select * from performance_schema.threads;

select * from performance_schema.events_statements_current;

select * from performance_schema.events_statements_history;

死锁监控

show engine innodb status\G

show variables like '%deadlock%';

vim /etc/my.cnf

innodb_print_all_deadlocks = 1

主从优化(GTID>>多线程MTS)

基本要求:

5.7以上的版本(忘记小版本)

必须开启GTID

binlog必须是row模式

gtid_mode=ON

enforce_gtid_consistency=ON

log_slave_updates=ON

slave-parallel-type=LOGICAL_CLOCK

slave-parallel-workers=16

master_info_repository=TABLE

relay_log_info_repository=TABLE

relay_log_recovery=ON

5.7 :

slave-parallel-type=LOGICAL_CLOCK

slave-parallel-workers=8

cpu核心数作为标准

CHANGE MASTER TO

MASTER_HOST='10.0.0.128',

MASTER_USER='repl',

MASTER_PASSWORD='123',

MASTER_PORT=3307,

MASTER_AUTO_POSITION=1;

start slave;

常规参数优化

[mysqld]

basedir=/data/mysql

datadir=/data/mysql/data

socket=/tmp/mysql.sock

log-error=/var/log/mysql.log

log_bin=/data/binlog/mysql-bin

binlog_format=row

skip-name-resolve

server-id=52

gtid-mode=on

enforce-gtid-consistency=true

log-slave-updates=1

relay_log_purge=0

max_connections=1024

back_log=128

wait_timeout=60

interactive_timeout=7200

key_buffer_size=16M

query_cache_size=64M

query_cache_type=1

query_cache_limit=50M

max_connect_errors=20

sort_buffer_size=2M

max_allowed_packet=32M

join_buffer_size=2M

thread_cache_size=200

innodb_buffer_pool_size=1024M

innodb_flush_log_at_trx_commit=1

innodb_log_buffer_size=32M

innodb_log_file_size=128M

innodb_log_files_in_group=3

binlog_cache_size=2M

max_binlog_cache_size=8M

max_binlog_size=512M

expire_logs_days=7

read_buffer_size=2M

read_rnd_buffer_size=2M

bulk_insert_buffer_size=8M

[client]

socket=/tmp/mysql.sock

最后再次压力测试 :

mysqlslap --defaults-file=/etc/my.cnf --concurrency=100 --iterations=1 --create-schema='oldboy' --query="select * from oldboy.t_100w where k2='FGCD'" engine=innodb --number-of-queries=200000 -uroot -p123 -verbose

mysql锁优化_mysql锁以及配置优化相关推荐

  1. mysql推荐内存_mysql大内存高性能优化方案

    mysql优化是一个相对来说比较重要的事情了,特别像对mysql读写比较多的网站就显得非常重要了,下面我们来介绍mysql大内存高性能优化方案 8G内存下MySQL的优化 按照下面的设置试试看: ke ...

  2. mysql 如何解锁_mysql锁表如何解锁

    什么是MySQL锁表? 为了给高并发情况下的mysql进行更好的优化,有必要了解一下mysql查询更新时的锁表机制. MySQL有三种锁的级别:页级.表级.行级. MyISAM和MEMORY存储引擎采 ...

  3. mysql的瓶颈_MySQL瓶颈分析与优化

    作者:蒋乐兴 简介 通过sysbench的oltp_read_write测试来模拟业务压力.以此来给指定的硬件环境配置一份比较合理的MySQL配置文件. 环境介绍 硬件配置 软件环境 优化层级与指导思 ...

  4. mysql和mybatis优化_MySQL + mybatis的SQL优化方案

    sql优化方案: 1.添加索引,在条件参数,关联参数上建立参数, 2.字段优化,需要什么字段查什么字段 3.模糊查询尽量使用: select * from tableName a where a.na ...

  5. mybatis与mysql调优_MySQL + mybatis的SQL优化方案

    sql优化方案: 1.添加索引,在条件参数,关联参数上建立参数, 2.字段优化,需要什么字段查什么字段 3.模糊查询尽量使用: select * from tableName a where a.na ...

  6. mysql关于死锁的优化_mysql死锁探究及优化

    什么是锁? 锁是计算机为了平衡协调多个进程或线程并发访问资源的机制.计算机除了cpu,ram,I/O,数据也是一种共享资源.锁冲突是影响数据库并发性能的一个重要因素. 例如行锁,表锁等,读锁,写锁等, ...

  7. 监控mysql锁定状态_MySQL 锁的监控及处理

    故障模拟 # 添加两项配置 vi /etc/my.cnf [mysqld] autocommit=0 innodb_lock_wait_timeout = 3600 systemctl restart ...

  8. 个人对于MySQL的理解_MySQL锁的理解

    一.事务四要素:ACID原子性(Atomicity):要么做完,要么啥都不做,没有中间状态 一致性(Consistency):这个是个比较有争议的概念,个人理解是通过AID来保证数据正确性,保证从一个 ...

  9. mysql的粒度_mysql锁粒度是什么

    mysql锁粒度就是我们通常所说的锁级别.数据库引擎具有多粒度锁定,允许一个事务锁定不同类型的资源.mysql数据库有三种锁的级别,分别是:页级锁.表级锁和行级锁. 锁粒度 (推荐教程:mysql教程 ...

最新文章

  1. linux ftp服务
  2. 数据结构实验之串三:KMP应用
  3. JVM调优总结(6):新一代的垃圾回收算法
  4. java皮卡丘代码_Picachu代码源代码,皮卡丘,源码
  5. Win 7 64位系统安装32位AutoCAD 2012方法
  6. Java设计模式补充:回调模式、事件监听器模式、观察者模式(转)
  7. ajax中GET和POST区别
  8. 征途猎魔mysql数据库_字典列表的拓展理解
  9. 两个人相处久了会越来越像吗? | 无意识模仿的秘密
  10. 在线qq的html代码,网页QQ
  11. 《经典递归问题:汉罗塔》
  12. java将图片背景替换为透明
  13. Qt弹出标准对话框的方法
  14. linux下opencv4查看版本
  15. 1016: 幼儿园小朋友们的难题
  16. 云中的安全api使用云端点espv2 beta运行云功能和应用程序引擎
  17. neat算法做监督学习(Python)
  18. python名片二维码生成功能的实现 200305
  19. 2023秋招--腾讯天美--游戏客户端--三面面经
  20. 设计模式之简单工厂、工厂、抽象工厂

热门文章

  1. 点喷丸打标机行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  2. Clipsync – 同步 Win 和 Android 剪贴板
  3. 它们才是真正的数学家 寻找自然界中的数学
  4. java形状函数_java基础:10.4 Java FX之形状
  5. 【历史上的今天】8 月 16 日:Debian 诞生;小米手机及 MIUI 系统发布!
  6. 小鹏汽车副总裁纪宇:坚持智能化技术自研,打造最深的护城河
  7. 滴滴、小米启动造车,特斯拉的护城河还能守多久?
  8. 手撕前端面试之经典排序算法
  9. 售价17999元起,华为Mate X2发布;程序员10万“买”了个北京户口;赏金猎人获苹果5000美元奖励 | 极客头条...
  10. 中国首家苹果零售店重开业,苹果CEO库克发文揭幕;“携号转网”服务用户破千万;GitHub 完成北极源代码存档|极客头条...