热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

读薄《高性能MySql》(一)MySql基本知识

高性能Mysql的读书笔记。因为这本书写的实在是太好了,即使只是随便翻一下都让人受用无穷。于是写下读书笔记加深印象,也方便没空读这本书的人粗略读一下这本书。Mysql的并发控制读写锁

高性能 Mysql 的读书笔记。因为这本书写的实在是太好了,即使只是随便翻一下都让人受用无穷。于是写下读书笔记加深印象,也方便没空读这本书的人粗略读一下这本书。

Mysql 的并发控制

读写锁

因为并发的读取数据并不会出现问题,但是并发的读写或者并发写写操作就会出现问题了,所以在并发处理的时候如果将读操作也加上锁那么就浪费了资源。

这时候就引入了共享锁和排他锁来解决这个问题。它们也叫做读锁和写锁。相当于 Java 并发包中的 ReadWriteLock。

锁粒度

尽量减小锁的粒度锁定有利于增加并发量,但是加锁的粒度越小,加锁开销越大。

行锁:并发粒度小,加锁开销大,最大程度增加了并发处理

表锁:锁定整张表,加锁开销小

事务

事务的特性

事务有 ACID 几个特性

Atomicity 原子性

原子性任务是一个独立的操作单元,一个事务要么全部提交成功,要么全部失败回滚。

Consistency 一致性

数据库总是从一个一致性的状态转移到另外一个一致性的状态。当事务失败的时候它所作出的修改也不会保存到数据库中。

Isolation 隔离性

一个事务所做的修改在提交前对其他的事务是不可见的。

Durability 耐久性

一旦一个事务提交,所做的修改就会永久保存到数据库中。

隔离级别

SQL 定义了四种隔离级别,每一种级别规定了一个事务中所做的修改,哪些修改在事务内和事务间是可见的。

级别低的可以执行更高的并发,系统开销也低。

脏读:一个事务读到了其他事务未提交的数据

不可重复读:事务 A 第一次读取到 row1,然后有事务 B 提交修改后,事务 A 再次查询到这一行,但是内容不一样

幻读:事务A第一次查询得到一行记录row1,事务B提交修改后,事务A第二次查询得到两行记录row1和row2。

READ UNCOMITED(未提交读)

在这个级别中,事务的修改即使没有提交对其他的事务也是可见的。这样会导致脏读问题,从性能上来说,它也不会比其他的好很多,所以一般不用

READ COMMITED(提交读)

大多数数据库默认隔离级别都是这个(Mysql 不是),一个事务开始的时候只能看见已经提交过的事务。这个级别也叫做不可重复读。

REPEATABLE READ(可重复读)

它是 Mysql 的默认事务隔离级别。这个级别保证了同一个事务中多次读取同样的记录结果是一致的,但是解决不了幻读问题。

SERIALIZABLE(可串行化)

这个事务执行级别最高,避免了幻读的问题,在每一个数据上都加上锁,可能会导致大量的锁争用的问题。这个级别也很少用。

MYSQL 相关特性

Mysql 默认使用的是自动提交,如果不显式地开始一个事务,所有的查询都会被当做一个事务提交。

可以通过设置 AUTOCOMMIT 变量来启动或者禁用自动提交。

当然对于 MyISAM 这类没有事务概念的引擎,这个是一直启用的。

Mysql 中的事务型存储引擎都不是简单的行锁,它们一般都实现了多版本的并发控制 MVCC,可以简单的认为 MVCC 是行锁的一个变种。

如何选择合适的存储引擎

其实如果根据书上的话来总结,就是这一幅图


推荐阅读
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • 基于事件驱动的并发编程及其消息通信机制的同步与异步、阻塞与非阻塞、IO模型的分类
    本文介绍了基于事件驱动的并发编程中的消息通信机制,包括同步和异步的概念及其区别,阻塞和非阻塞的状态,以及IO模型的分类。同步阻塞IO、同步非阻塞IO、异步阻塞IO和异步非阻塞IO等不同的IO模型被详细解释。这些概念和模型对于理解并发编程中的消息通信和IO操作具有重要意义。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • Python SQLAlchemy库的使用方法详解
    本文详细介绍了Python中使用SQLAlchemy库的方法。首先对SQLAlchemy进行了简介,包括其定义、适用的数据库类型等。然后讨论了SQLAlchemy提供的两种主要使用模式,即SQL表达式语言和ORM。针对不同的需求,给出了选择哪种模式的建议。最后,介绍了连接数据库的方法,包括创建SQLAlchemy引擎和执行SQL语句的接口。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
author-avatar
na点儿破事凶
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有