影响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性能调优——锁优化的更多相关文章

  1. mysql性能调优——Query优化

    上节谈了关于mysql锁定机制的优化方案,下面来谈一下Query优化——Mysql Query Optimizer 当Mysql Query Optimizer接受到从Query Parser过来的Q ...

  2. MySQL性能调优——锁定机制与锁优化分析

    针对多线程的并发访问,任何一个数据库都有其锁定机制,它的优劣直接关系着数据的一致完整性与数据库系统的高并发处理性能.锁定机制也因此成了各种数据库的核心技术之一.不同数据库存储引擎的锁定机制是不同的,本 ...

  3. MySql(七):MySQL性能调优——锁定机制与锁优化分析

    针对多线程的并发访问,任何一个数据库都有其锁定机制,它的优劣直接关系着数据的一致完整性与数据库系统的高并发处理性能.锁定机制也因此成了各种数据库的核心技术之一.不同数据库存储引擎的锁定机制是不同的,本 ...

  4. MySql(十一):MySQL性能调优——常用存储引擎优化

    一.前言 MySQL 提供的非常丰富的存储引擎种类供大家选择,有多种选择固然是好事,但是需要我们理解掌握的知识也会增加很多.本章将介绍最为常用的两种存储引擎进行针对性的优化建议. 二.MyISAM存储 ...

  5. MySQL性能调优与架构设计——第11章 常用存储引擎优化

    第11章 常用存储引擎优化 前言: MySQL 提供的非常丰富的存储引擎种类供大家选择,有多种选择固然是好事,但是需要我们理解掌握的知识也会增加很多.每一种存储引擎都有各自的特长,也都存在一定的短处. ...

  6. MySQL性能优化总结___本文乃《MySQL性能调优与架构设计》读书笔记!

    一.MySQL的主要适用场景 1.Web网站系统 2.日志记录系统 3.数据仓库系统 4.嵌入式系统 二.MySQL架构图: 三.MySQL存储引擎概述 1)MyISAM存储引擎 MyISAM存储引擎 ...

  7. MySQL性能调优与架构设计——第10章 MySQL数据库Schema设计的性能优化

    第10章 MySQL Server性能优化 前言: 本章主要通过针对MySQL Server(mysqld)相关实现机制的分析,得到一些相应的优化建议.主要涉及MySQL的安装以及相关参数设置的优化, ...

  8. MySQL性能调优与架构设计——第9章 MySQL数据库Schema设计的性能优化

    第9章 MySQL数据库Schema设计的性能优化 前言: 很多人都认为性能是在通过编写代码(程序代码或者是数据库代码)的过程中优化出来的,其实这是一个非常大的误区.真正影响性能最大的部分是在设计中就 ...

  9. MySQL性能调优与架构设计——第8章 MySQL数据库Query的优化

    第8章 MySQL数据库Query的优化 前言: 在之前“影响 MySQL 应用系统性能的相关因素”一章中我们就已经分析过了Query语句对数据库性能的影响非常大,所以本章将专门针对 MySQL 的 ...

随机推荐

  1. 1775. [国家集训队2010]小Z的袜子

    [题目描述] 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命…… 具体来说,小Z把这N只袜子从1到 ...

  2. php中 mysql 插入特殊字符(手机端的emoji表情)出现异常

    今天在用mysql存储从微信服务器拉来的数据,出现插入数据异常,报 Incorrect string value: '\xF0\x9F\x98\x97\xF0\x9F 的错误. 最终在网上查了一下,有 ...

  3. Mysql函数、语句

    一:日期函数: 日期函数: SELECT CURDATE(); # 2018-07-07 SELECT CURTIME(); # 11:28:24 SELECT NOW(); # 2018-07-07 ...

  4. windows上把git生成的ssh key

    右键鼠标,选中 “Git Bash here”: 输入指令,创建ssh key: cd ~/.ssh/ #bash: cd: /c/Users/Administrator/.ssh/: No such ...

  5. 源代码管理SVN的使用

    SVN 全称是Subversion,集中式版本控制之王者 SVN 版本控制,需要自己搭建一个管理代码的服务器,提供开发人员,上传和下载 1.基本介绍 使用环境 要想利用SVN管理源代码,必须得有2套环 ...

  6. CentOS6.8 RPM包安装快速zabbix22

    CentOS6.8 RPM包安装快速zabbix22 yum install -y epel-release # yum install -y httpd php php-devel mysql-se ...

  7. xamarin.forms 绑定页面里指定元素的某个属性值

    {Binding Source={x:Reference elementName}, Path=BindingContext.propertyname, Mode=OneWay} elementNam ...

  8. RackTables在LNMP系统的安装及使用

    RackTables是一款优秀的机房管理系统,可以十分方便的登记机房设备和连接情况,非常适合小型机房的运维.RackTables是PHP开发的免费系统,最新版本为0.20.14,PHP版本要求不低于P ...

  9. 雷林鹏分享:PHP 错误处理

    在 PHP 中,默认的错误处理很简单.一条错误消息会被发送到浏览器,这条消息带有文件名.行号以及描述错误的消息. PHP 错误处理 在创建脚本和 Web 应用程序时,错误处理是一个重要的部分.如果您的 ...

  10. css + 和 ~的区别

    <style type="text/css"> h1 + p { margin-top:50px; color:red; } </style> <p& ...