高性能mysql(一)
1.连接和管理安全性
当客服端连接mysql服务器时,这个客户端就会在服务器端拥有一个线程,这个连接的查询就会在这单独的线程中执行。服务器会负责缓存线程,因此不需要为每一个连接都创建一个线程或者销毁一个线程。(mysql5.5或者更新的版本提供了一个api,支持线程池插件,可以使用线程池中少量连接完成多个连接)。
当客户端连接应用连接到mysql服务器时服务器需要对其认证,认证基于用户名和原始主机的密码,一旦连接服务器成功,服务器会进而判断该客户端是否具有执行特定查询的权限。
在查询过程中,mysql自己会解析查询创建内部数据结构(解析树),然后对其进行各种优化,包括重新查询和决定表得读写顺序,以及合适得索引等,用户可以通过关键字提示优化器,影响他的决策过程。对于select语句mysql服务器会先检查缓存(Query Cache),如果在其中能够找到对应得查询,服务器就不会在执行查询,解析和优化的过程。而是直接返回查询缓存中的结果集。
2.并发控制
无论何时,只要又多个查询需要在同一时刻修改数据,都会产生并发控制的问题。
在处理并发读或者写时,可以通过实现一个两中类型的锁组成的锁系统来解决问题。这两种锁通常被称为共享锁和排他锁,也叫读锁和写锁。其中读锁是共享的,也就是无阻塞的,多个用户同一时刻读取共同的资源互不干扰。写锁是排他的,也就是说一个写锁会阻塞其他的读锁和写锁,这是出于安全策略的考虑,只有这样,才能保证在同一时间里只有一个用户执行写入,并防止其他用户正在读取同一资源。
在实际的数据库中,每时每刻都存在着锁定的发生,当mysql修改某一部分的数据时,mysql就会通过锁定防止其他用户读取同一数据。
3.锁策略
所谓的所策略,也就是在锁的开销和数据安全性之间去衡量的策略。锁的管理是个非常重要的决定。将锁固定在某个级别可以为某些特定的场景提供更好的性能,但同时可能对另外一些场景不能更好的支持。以下是两个重要的锁策略。
表锁:
表锁是mysql最基本的锁策略,并且是开销最小的锁策略。它会锁定整张表,一个用户在对表进行写操作时(插入,删除,更新等)前,需要先获得写锁,着会其他用户对表的所有读写操作。
行级锁
行级锁可以最大的程度支持并发处理(同时也带来最大的锁开销),众所周知,在innodb以及其他一些引擎中实现了行级表。
4.事务
事务就是一组原子性(后面会讲事务的原子性)或者说是一个独立的工作单元。事务内的语句要么全部执行成功,要么全部执行失败。银行应用是解释事务必要性的一个经典的例子。假设银行的数据库有两张数据表, 支票表和储蓄表。闲杂要从用户的支票中成功的转移200美元到别人的账户,首先要判断用户账户够不够200美元,然后从用户余额中减去200美元,最后在别人账户上增加200美元。
以上三个步骤必须打包在一个事务中,如果任何一个步骤失败,则必须回滚所有步骤。具体语法请查询相关资料。
除非系统经过严格的ACID测试,否则空谈事务的概念是不够的。其中这几个字母表示原子性,一致性,隔离性和持久性。一个运行良好的事务处理,必须具备这些标准特性。
原子性:一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所哟操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作,这就是事务的原子性。
一致性:数据库总是从一个一致性的状态转换到另外一个应执行的状态。即使执行三,四条语句之间时系统崩溃,支票也不会损失。因为事务最终没有提交,所以事务所做的修改也不会执行。
隔离性:通常来说,一个事务所做的修改在最终提交以前,对其他事务是不可见的。
持久性:一旦事务提交,所有的操作就会永久的保存到数据库中。
5.死锁
死锁是指两个事务或者多个事务在同一资源上相互占用,并请求锁定对方占用的资源,从而导致恶性循环的现象。当多个事务试图一不同的顺序锁定资源时,就可能会产生死锁。多个事务同时锁定同一个资源的时候,也会产生死锁。例如两个事务都同时更新一行数据,同时也锁定该行的数据。接着每个事务又去执行第二条语句,却发现该行已经被锁定,然后两个事务都等待对方释放锁,同时又持有对方需要的锁,则陷入死循环。
为了解决这个问题,数据库系统实现了各种死锁检测和死锁超时机制。越复杂的系统,比如innodb越能检测到死锁的循环依赖,并立即返回一个错误。这种解决方式很有效,否则死锁很导致非常慢的查询。还有一种解决方式,就是当查询的时间达到锁等待超时的设定后放弃锁请求,这种方式通常来说不太好。innodb目前处理死锁的方法是将持有最少行级拍他所的事务进行回滚(这是相对表叫简单的死锁回滚算法)。
高性能mysql(一)的更多相关文章
- 高性能Mysql主从架构的复制原理及配置详解
温习<高性能MySQL>的复制篇. 1 复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台 ...
- 1121高性能MySQL之运行机制
本文来自于拜读<高性能MySQL(第三版)>时的读书笔记作者:安明哲转载时请注明部分内容来自<高性能MySQL(第三版)> MySQL的逻辑构架 MySQL服务器逻辑架构 最上 ...
- 《高性能MySQL》读书笔记--锁、事务、隔离级别 转
1.锁 为什么需要锁?因为数据库要解决并发控制问题.在同一时刻,可能会有多个客户端对表中同一行记录进行操作,比如有的在读取该行数据,其他的尝试去删除它.为了保证数据的一致性,数据库就要对这种并发操作进 ...
- 高性能MySQL --- 读书笔记(1) - 2016/8/2
此书不但帮助MySQL初学者提高使用技巧,更为有经验的MySQL DBA指出了开发高性能MySQL应用的途径.全书包括14章,内容覆盖MySQL系统架构.设计应用技巧.SQL语句优化.服务器性能调优. ...
- 《高性能MySQL》
<高性能MySQL>(第3版)讲解MySQL如何工作,为什么如此工作? MySQL系统架构.设计应用技巧.SQL语句优化.服务器性能调优.系统配置管理和安全设置.监控分析,以及复制.扩展和 ...
- 转:高性能Mysql主从架构的复制原理及配置详解
温习<高性能MySQL>的复制篇. 1 复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台 ...
- 高性能MySql进化论【转】
高性能MySql进化论(十二):Mysql中分区表的使用总结 http://binary.duapp.com/category/sql 当数据量非常大时(表的容量到达GB或者是TB),如果仍然采用索引 ...
- 高性能Mysql主从架构的复制原理及配置详解(转)
温习<高性能MySQL>的复制篇. 1 复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台 ...
- 高性能mysql主存架构
原文:高性能mysql主存架构 MySQL Replication(Master与Slave基本原理及配置) 主从mysql工作原理: 1:过程: (1)Mysql的复制(replication)是一 ...
- 《高性能MySQL(第3版)》【PDF】下载
内容简介 <高性能mysql(第3版)>是mysql 领域的经典之作,拥有广泛的影响力.第3版更新了大量的内容,不但涵盖了最新mysql5.5版本的新特性,也讲述了关于固态盘.高可扩展性设 ...
随机推荐
- python爬虫实战(二)--------千图网高清图
相关代码已经修改调试----2017-3-21 实现:千图网上高清图片的爬取 程序运行20小时,爬取大约162000张图片,一共49G,存入百度云.链接:http://pan.baidu.com/s/ ...
- laravel资源路由详解
大概挑两条解释. 我定义了个资源路由Route::resource('article', 'ArticleController');. 当我访问地址ArticleController的http://y ...
- Andorid自动读取短信验证码
手机收到验证码短信后,程序自动识别验证码并填充验证码输入框. 思路是有了,实现的方式也有多种: 1.开启一个线程,隔一段时间就去查询收件箱是否有变化,有变化再读取出来做处理. 2.注册一个短信变化的广 ...
- ASP.NET自定义处理程序
要创建自定义处理程序,可以创建一个实现IHttpHandler接口的类. 该类有两个重要的参数:IsResuable属性和ProcessRequest方法.如果处理程序实例可以在不同的请求中重用,Is ...
- Java将一个目录下的所有数据复制到另一个目录下
/* 将"C:\\JavaProducts\\Source"下的所有数据复制到"C:\\Target"下 */ import java.io.*; public ...
- Xamarin GitHub 下载的源码运行不了
初学Xamarin ,各种折腾,大概这公司破电脑配置差,老是很多问题. GitHub 真是个好东西,可以参考别人做的,不过下载来运行不了就各种折腾了,为此我重装电脑两次了,反正win10安装就十几分 ...
- jQuery制作右侧边垂直二级导航菜单
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- StringBuilder的实现
先看看MS给出的官方解释吧 (http://msdn.microsoft.com/zh-cn/library/system.text.stringbuilder(VS.80).aspx) String ...
- 【转载】c语言数据的左移右移
原文地址:http://www.cnblogs.com/myblesh/articles/2431806.html 由于在飞控程序中执行效率对程序的影响相当大,所以一个好的运算效率很重要.左移右移比单 ...
- 多个git账号的SSH配置
一般使用git都只需要维持一个默认的git账户就可以打天下了. 但如果自己确实需要多个git账号的需求的话,就有必要配置多个ssh key了. 首先为生成多个ssh key ssh-keygen -t ...