• 优化 MySQL: 3 个简单的小调整

    Posted by : lon.y@qq.com on 2018年2月10日

    我并不期望成为一个专家级的 DBA,但是,在我优化 MySQL 时,我推崇 80/20 原则,明确说就是通过简单的调整一些配置,你可以压榨出高达 80% 的性能提升。尤其是在服务器资源越来越便宜的当下。 警告 没有两个数据库或者应用程序是完全相同的。这里假设我们要调整的数据库是为一个“典型”的 Web 网站服务的,优先考虑的是快速查询、良好的用户体验以及处理大量的流量。 在你对服务器进行优化之前,请做好数据库备份! 1、 使用 InnoDB 存储引擎 如果

    阅读全文...

  • 为初学者准备的 MariaDB 管理命令

    Posted by : lon.y@qq.com on 2018年2月4日

    之前我们学过了在 Centos/RHEL 7 上安装 MariaDB 服务器并保证其安全,使之成为了 RHEL/CentOS 7 的默认数据库。现在我们再来看看一些有用的 MariaDB 管理命令。这些都是使用 MariaDB 最基础的命令,而且它们对 MySQL 也同样适合,因为 MariaDB 就是 MySQL 的一个分支而已。 (推荐阅读:在 RHEL/CentOS 上安装并配置 MongoDB) MariaDB 管理命令 1、查看 MariaDB

    阅读全文...

  • 聊聊分布式事务,再说说解决方案

    Posted by : lon.y@qq.com on 2018年2月2日

    前言 分布式事务是企业集成中的一个技术难点,也是每一个分布式系统架构中都会涉及到的一个东西,特别是在微服务架构中,几乎可以说是无法避免,本文就分布式事务来简单聊一下。 数据库事务 在说分布式事务之前,我们先从数据库事务说起。 数据库事务可能大家都很熟悉,在开发过程中也会经常使用到。但是即使如此,可能对于一些细节问题,很多人仍然不清楚。比如很多人都知道数据库事务的几个特性:原子性(Atomicity )、一致性( Consistency )、隔离性或独立性(

    阅读全文...

  • 回顾 2017 年发布的 10 个新数据库系统

    Posted by : lon.y@qq.com on 2018年1月16日

    作为 Database Weekly 的编辑(Database Weekly 是一份关于数据库和数据存储世界新内容的每周时事资讯),我喜欢在新的数据库系统中闲逛,看看在未来的几十年里,哪些想法可能会影响到日常的开发人员。 数据库世界并不是每周都有让人不可思议的新闻,但在一年的时间里,我还是惊讶地发现,我们看到了很多新事物,以及该领域坚持不懈地发展。2017 年也不例外,所以我想回顾一下一些有趣的新发行版,包括一个事务性图表数据库,一个可复制的地理多模型数据

    阅读全文...

  • PostgreSQL 查询成本模型

    Posted by : lon.y@qq.com on 2017年12月22日

    摘要:PostgreSQL是一个自由的对象-关系数据库服务器(数据库管理系统),被业界誉为“最先进的开源数据库”,本文作者以代码实例说明了如何计算和评估PostgreSQL查询成本,以下是译文。 数据库查询速度如果太慢会从很多方面损害机构,比如可能会损害一些优秀应用程序的声誉,因为数据库查询速度过慢,造成后台处理速度慢得令人痛苦,并大幅增加基础设施的成本。作为一名经验丰富的Web开发人员,了解数据层的优化策略是绝对必要的。 在本文中,我们将探讨Postgr

    阅读全文...

  • 谈谈 MySQL 隐式类型转换

    Posted by : lon.y@qq.com on 2017年12月15日

    前言 今天我们继续回到MySQL系列文章中,谈一谈MySQL中隐式类型转换。(其实我最早知道是在慢SQL优化中知道隐式类型转换概念的),在说隐式类型转换之前,首先我们通过一个实例来看看是怎么回事。 数据结构 本文中所有的操作,都是基于该数据结构(有兴趣的童鞋,可以实验): create table t_base_user(   oid bigint(20) not null primary key auto_increment,   name varcha

    阅读全文...

  • MySQL 引擎特性:InnoDB崩溃恢复

    Posted by : lon.y@qq.com on 2017年12月14日

    前言 数据库系统与文件系统最大的区别在于数据库能保证操作的原子性,一个操作要么不做要么都做,即使在数据库宕机的情况下,也不会出现操作一半的情况,这个就需要数据库的日志和一套完善的崩溃恢复机制来保证。本文仔细剖析了InnoDB的崩溃恢复流程,代码基于5.6分支。 基础知识 lsn: 可以理解为数据库从创建以来产生的redo日志量,这个值越大,说明数据库的更新越多,也可以理解为更新的时刻。此外,每个数据页上也有一个lsn,表示最后被修改时的lsn,值越大表示越

    阅读全文...

  • MySQL 引擎特性:InnoDB IO 子系统

    Posted by : lon.y@qq.com on 2017年12月14日

    前言 InnoDB做为一款成熟的跨平台数据库引擎,其实现了一套高效易用的IO接口,包括同步异步IO,IO合并等。本文简单介绍一下其内部实现,主要的代码集中在os0file.cc这个文件中。本文的分析默认基于MySQL 5.6,CentOS 6,gcc 4.8,其他版本的信息会另行指出。 基础知识 WAL技术 : 日志先行技术,基本所有的数据库,都使用了这个技术。简单的说,就是需要写数据块的时候,数据库前台线程把对应的日志先写(批量顺序写)到磁盘上,然后就告

    阅读全文...

  • MySQL 引擎特性:InnoDB 同步机制

    Posted by : lon.y@qq.com on 2017年12月13日

    前言 现代操作系统以及硬件基本都支持并发程序,而在并发程序设计中,各个进程或者线程需要对公共变量的访问加以制约,此外,不同的进程或者线程需要协同工作以完成特征的任务,这就需要一套完善的同步机制,在Linux内核中有相应的技术实现,包括原子操作,信号量,互斥锁,自旋锁,读写锁等。InnoDB考虑到效率和监控两方面的原因,实现了一套独有的同步机制,提供给其他模块调用。本文的分析默认基于MySQL 5.6,CentOS 6,gcc 4.8,其他版本的信息会另行指

    阅读全文...

  • MySQL 引擎特性:InnoDB Buffer Pool

    Posted by : lon.y@qq.com on 2017年12月13日

    前言 用户对数据库的最基本要求就是能高效的读取和存储数据,但是读写数据都涉及到与低速的设备交互,为了弥补两者之间的速度差异,所有数据库都有缓存池,用来管理相应的数据页,提高数据库的效率,当然也因为引入了这一中间层,数据库对内存的管理变得相对比较复杂。本文主要分析MySQL Buffer Pool的相关技术以及实现原理,源码基于阿里云RDS MySQL 5.6分支,其中部分特性已经开源到AliSQL。Buffer Pool相关的源代码在buf目录下,主要包括

    阅读全文...