mysql性能调优——锁优化
影响mysql server性能的相关因素
需求和架构及业务实现优化:55%
Query语句优化:30%
数据库自身优化:15%
很多时候大家看到数据库应用系统中性能瓶颈出现在数据库方面,就希望通过数据库的优化来解决问题,但不管DBA对数据库多么了解,对Query语句的优化多么静态,最终还是很难解决整个系统的性能问题,原因在于并没有找到根本的症结所在。
所以数据库的优化实际上是一个需要多方面配合多方面优化才能根本性改善的事情,可以概括性的归为:商业需求合理化、系统架构最优化、实现逻辑精简化、硬件设施理性化。
mysql数据库锁定机制
mysql各存储引使用了三种锁定机制:行级锁定、表级锁定和页级锁定。这里主要谈一下InnoDB存储引擎实现的行级锁定(NDB Cluster也是行级锁定的存储引擎)。InnoDB和其他数据库的行级锁定机制类似,都有共享锁S和排他锁X,为了让行级锁定和表级锁定共存,
InnoDB同样使用了意向锁的概念(表级锁定),就有了意向共享锁IS和意向排他锁IX。共享锁可以共存,但排他锁不可以,InnoDB和其他数据库最大的不同是实现行锁的机制,其他数据库时通过在需要锁定的某行记录所在的物理Block上的事务槽上面添加锁定信息,而
InnoDB的锁定是通过指向数据记录的第一个索引建之前和最后一个索引建之后的空域表级锁定信息实现行级锁定,被称为间隙锁。间隙锁有很多弱点:
1.锁定一个范围键值之后即使某些不存在的键值也会被锁定,这就造成了锁定范围内无法插入数据,会对性能带来影响。
2.当Query无法命中索引的时候,InnoDB会放弃行锁定而改用表锁定,造成并发性能降低
众所周知,行级锁定会造成死锁的存在,死锁产生的原因:
1.不同表,相同的记录(事务A和事务B操作两张表的相同记录,顺序不一致)
2.相同表记录(事务A和事务B操作同一张的表的相同记录,顺序不一致:jobA处理的的id列表为[1,2,3,4],而job处理的id列表为[8,9,10,4,2])
3.不同的索引冲突:事务A在执行时,除了在二级索引加锁外,还会在聚簇索引上加锁,在聚簇索引上加锁的顺序是[1,4,2,3,5],而事务B执行时,只在聚簇索引上加锁,加锁顺序是[1,2,3,4,5],这样就造成了死锁的可能性
InnoDB监测死锁的机制是选择较小的事务回滚,标准是衡量插入或者更新删除数据的多少。
InnoDB行锁优化建议:
1.尽可能让所有数据检索都通过索引来完成,避免升级为表级锁定
2.合理设计索引,可以缩小行锁的锁定范围,避免造成不必要的锁定影响其他Query执行
3.尽可能减少基于范围的数据检索过滤条件,避免间隙锁锁定不该锁定的记录
4.控制事务大小,减少锁定的资源量和锁定时间长度
5.使用较低级别的事务隔离
减少死锁建议:
1.尽可能按照相同顺序的来访问资源
2.在同一个事务中尽可能做到一次性锁定所有资源,减少死锁的概率
3.对于非常容易产生死锁的业务部分尝试升级锁的粒度,通过表级锁定来减少死锁产生的概率
系统锁定争用情况查询:
表级锁定:SHOW STATUS LIKE 'table%';Table_locks_immediate(表级锁定的次数),Table_locks_waited(表级锁定争用次数)
行级锁定:SHOW STATUS LIKE 'innodb_row_lock%';Innodb_row_lock_current_waits(当前正在锁定的数量),Innodb_row_lock_time(从系统启动到现在锁定总时间长度),Innodb_row_lock_time_avg/max(平均时间/最长的一次时间),Innodb_row_lock_waits(等待次数)
mysql性能调优——锁优化的更多相关文章
- mysql性能调优——Query优化
上节谈了关于mysql锁定机制的优化方案,下面来谈一下Query优化——Mysql Query Optimizer 当Mysql Query Optimizer接受到从Query Parser过来的Q ...
- MySQL性能调优——锁定机制与锁优化分析
针对多线程的并发访问,任何一个数据库都有其锁定机制,它的优劣直接关系着数据的一致完整性与数据库系统的高并发处理性能.锁定机制也因此成了各种数据库的核心技术之一.不同数据库存储引擎的锁定机制是不同的,本 ...
- MySql(七):MySQL性能调优——锁定机制与锁优化分析
针对多线程的并发访问,任何一个数据库都有其锁定机制,它的优劣直接关系着数据的一致完整性与数据库系统的高并发处理性能.锁定机制也因此成了各种数据库的核心技术之一.不同数据库存储引擎的锁定机制是不同的,本 ...
- MySql(十一):MySQL性能调优——常用存储引擎优化
一.前言 MySQL 提供的非常丰富的存储引擎种类供大家选择,有多种选择固然是好事,但是需要我们理解掌握的知识也会增加很多.本章将介绍最为常用的两种存储引擎进行针对性的优化建议. 二.MyISAM存储 ...
- MySQL性能调优与架构设计——第11章 常用存储引擎优化
第11章 常用存储引擎优化 前言: MySQL 提供的非常丰富的存储引擎种类供大家选择,有多种选择固然是好事,但是需要我们理解掌握的知识也会增加很多.每一种存储引擎都有各自的特长,也都存在一定的短处. ...
- MySQL性能优化总结___本文乃《MySQL性能调优与架构设计》读书笔记!
一.MySQL的主要适用场景 1.Web网站系统 2.日志记录系统 3.数据仓库系统 4.嵌入式系统 二.MySQL架构图: 三.MySQL存储引擎概述 1)MyISAM存储引擎 MyISAM存储引擎 ...
- MySQL性能调优与架构设计——第10章 MySQL数据库Schema设计的性能优化
第10章 MySQL Server性能优化 前言: 本章主要通过针对MySQL Server(mysqld)相关实现机制的分析,得到一些相应的优化建议.主要涉及MySQL的安装以及相关参数设置的优化, ...
- MySQL性能调优与架构设计——第9章 MySQL数据库Schema设计的性能优化
第9章 MySQL数据库Schema设计的性能优化 前言: 很多人都认为性能是在通过编写代码(程序代码或者是数据库代码)的过程中优化出来的,其实这是一个非常大的误区.真正影响性能最大的部分是在设计中就 ...
- MySQL性能调优与架构设计——第8章 MySQL数据库Query的优化
第8章 MySQL数据库Query的优化 前言: 在之前“影响 MySQL 应用系统性能的相关因素”一章中我们就已经分析过了Query语句对数据库性能的影响非常大,所以本章将专门针对 MySQL 的 ...
随机推荐
- 大步小步法(BSGS) 学习笔记
\(\\\) BSGS 用于求解关于 \(x\) 的方程: \[ a^x\equiv b\pmod p\ ,\ (p,a)=1 \] 一般求解的是模意义下的指数,也就是最小非负整数解. \(\\\) ...
- Thinkphp3.23 连接MSSQL方法
Thinkphp 3.23要连接MSSQL,必须配置下,以下是主要的步骤. 1.要安装Microsoft Drivers for PHP for SQL Server驱动 下载驱动以前,要查看一下ph ...
- 通过SSDT HOOK实现进程保护和进程隐藏
---恢复内容开始--- 首先,我要说一件很重要的事,本人文采不好,如果哪里说的尴尬了,那你就尴尬着听吧...... SSDT HOOK最初貌似源于Rookit,但是Rookit之前有没有其他病毒使用 ...
- VirtualBox Networking Model
- jQuery 价格显示 前面位数与后面两位显示不同样式(一大一小)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Debug:This kind of launch is configured to openthe debug perspective when it解决办法
http://blog.sina.com.cn/s/blog_7ca3aa020100zlha.html 启动tomcat时,myeclipse报错: This kind of launch is c ...
- Oracle数据库单表循环提取输出
现在有如下的表,名称为Test表: ydid sws_dm sws_mc ry_dm ry_mc 1 1 ...
- android网络图片自动轮播 githhub地址
https://github.com/panxw/android-image-indicator
- C++ 之 string
C++ 的 string 类封装了很多对字符串的常用操作. string 类是模板类 basic_string类,以 char作为其元素类型的类. string 以单字节作为一个字符,如果处理多字符集 ...
- 「 Luogu P3137 」X 「 USACO16FEB 」 圆形谷仓
# 题目大意 管理大大给修下 $\text{Markdown}$ 吧,严重影响做题体验啊. 这道题的意思很简单就是给你一个长度是 $n$ 的环,这个环上不均匀的分布着 $n$ 头奶牛.一头奶牛移动要花 ...