影响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. Javascript数据结构之栈

    作者原文:http://hawkzz.com/blog/blog/1515054561771 定义 栈是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端称为栈顶.栈被称为一种先入后出的数据结构 ...

  2. Java集合框架源码(四)——Vector

    第1部分 Vector介绍 Vector简介 Vector 是矢量队列,它是JDK1.0版本添加的类.继承于AbstractList,实现了List, RandomAccess, Cloneable这 ...

  3. R in action读书笔记(3)-第六章:基本图形

    第六章  基本图形 6.1条形图 条形图通过垂直的或水平的条形展示了类别型变量的分布(频数).函数:barplot(height) 6.1.1简单的条形图 6.1.2推砌条形图和分组条形图 如果hei ...

  4. iOS-UI控件之UITableView(四)- cell数据刷新

    TableView- 数据刷新 数据刷新 添加数据 删除数据 更改数据 全局刷新方法(最常用) [self.tableView reloadData]; // 屏幕上的所有可视的cell都会刷新一遍 ...

  5. IOS 面试题系列

    随着iOS平台开发的职位的增加,笔试.面试也越来越有“套路”,这里我总结了一些面试题,多数是Objective-C的基础知识,适合于面试新人,答案是我自己答的,不准确的地方,欢迎指出. 1.   Ob ...

  6. createdb - 创建一个新的 PostgreSQL 数据库

    SYNOPSIS createdb [ option...] [ dbname] [ description] DESCRIPTION 描述 createdb 创建一个新的 PostgreSQL 数据 ...

  7. cesium primitive方式 ————http://blog.sina.com.cn/s/blog_15e866bbe0102y0ji.html

    Cesium学习笔记-工具篇17-PrimitivePoint自定义渲染-点 (2018-08-28 16:12:06) 转载▼ 标签: cesium primitive 自定义渲染 shader c ...

  8. C#解析单层html的中的文本,然后拼接起来

    匹配单层html的小demo,应该能匹配大多数html字符串.多层(嵌套)html标签解析不出来.可能有小bug,我抛砖引玉下,哈哈. using System; using System.Colle ...

  9. PHP 数组相加 和 数组合并array_merge

    $arr1 = array("a"=>"PHP","b"=>"java","python" ...

  10. tensorflow 学习笔记-- tf.reduce_max、tf.sequence_mask

    1.tf.reduce_max函数的作用:计算张量的各个维度上的元素的最大值.例子: import tensorflow as tfmax_value = tf.reduce_max([1, 3, 2 ...