MySQL · 特性分析 · innodb 锁分裂继承与迁移
innodb行锁简介行锁类型 LOCK_S:共享锁 LOCK_X: 排他锁 GAP类型 LOCK_GAP:只锁间隙 LOCK_REC_NO_GAP:只锁记录 LOCK_ORDINARY: 锁记录和记录之前的间隙 LOCK_INSERT_INTENTION: 插入意向锁,用于insert时检查锁冲突 每个行锁由锁类型和GAP类型组成例如: LOCK_X|LOCK_ORDINARY...
View ArticleMySQL · 特性分析 ·MySQL 5.7新特性系列二
继上一期月报,MySQL5.7新特性之一介绍了一些新特性及兼容性问题后,本期继续进行学习。1. 系统变量5.7以后System and status...
View ArticlePgSQL · 实战经验 · 如何预测Freeze IO风暴
背景和原理有没有被突发的IO惊到过,有没有见到过大量的autovacuum for prevent wrap。 PostgreSQL 的版本冻结是一个比较蛋疼的事情,为什么要做版本冻结呢? 因为PG的版本号是uint32的,是重复使用的,所以每隔大约20亿个事务后,必须要冻结,否则记录会变成未来的,对当前事务”不可见”。 冻结的事务号是2src/include/access/transam.h...
View ArticleGPDB · 特性分析· Filespace和Tablespace
Filespace和TablespaceTablespace允许每个节点使用多种文件目录或者文件系统,当前所有数据都是存储在默认base目录下。我们可以根据需要制定最优的物理存储方式。使用表空间有下面几个优点:根据数据使用频率来选择不同的存储类型控制一些数据库对象的IO性能比如历史数据表我们存放在SATA盘,频繁使用的表存放在SSD盘。filespace指的是所有的存储文件系统位置的集合。...
View ArticleMariaDB · 新特性 · 窗口函数
简介窗口函数(Window Function)是 SQL:2013 标准中提出的,在后续标准版本的更新中也多次扩展,最新的版本是 SQL:2011 中的标准。从某些方面来说,窗口函数与聚合函数(Aggregate Function)有些类似,他们都是对一系列的行进行聚合计算,然而不同于聚合函数的是,窗口函数的输出并不是被聚集到单独的一行。像 SUM, AVG, COUNT...
View ArticleMySQL · TokuDB · checkpoint过程
TokuDB的buffer pool(在TokuDB中被称作cachetable)维护几个后台工作线程定期处理一些任务。其中有一个工作线程叫做checkpointer线程,每60秒启动一次把cachetable中所有脏页写回到磁盘上。 TokuDB只支持这一种checkpoint方式,用MySQL术语来说就是sharp...
View ArticleMySQL · 最佳实践 · 空间优化
在前三期介绍了RDS for MySQL参数优化,锁问题以及延迟优化最佳实践之后,本期将介绍存储空间相关的最佳实践。存储空间是RDS很重要的一个指标,在RDS的工单问题中,空间问题的咨询可以排在top...
View ArticleMySQL · 引擎特性 · InnoDB COUNT(*) 优化(?)
在5.7版本中,InnoDB实现了新的handler的records接口函数,当你需要表上的精确记录个数时,会直接调用该函数进行计算。使用实际上records接口函数是在优化阶段调用的,在满足一定条件时,直接去计算行级计数。其explain出来的结果相比老版本也有所不同,这里我们使用sysbench的sbtest表来进行测试,共200万行数据。mysql> show create table...
View ArticleMySQL · 特性分析 ·MySQL 5.7新特性系列三
继上两期月报,MySQL5.7新特性之一介绍了一些新特性及兼容性问题,MySQL 5.7新特性之二介绍了临时表的优化和实现。 这期我们一起来学习下undo空间管理,重点介绍truncate功能。1. 背景InnoDB存储引擎中,undo在完成事务回滚和MVCC之后,就可以purge掉了,但undo在事务执行过程中,进行的空间分配如何回收,就变成了一个问题。...
View ArticleMySQL · 特性分析 · 5.7 代价模型浅析
代价模型mysql 5.7代价计算相对之前的版本有较大的改进。例如代价模型参数可以动态配置,可以适应不同的硬件区分考虑数据在内存和在磁盘中的代价代价精度提升为浮点型jion计算时不仅要考虑condition,还要考虑condition上的filter,具体参见参数condition_fanout_filter5.7 在代价类型上分为io,cpu和memory,...
View ArticlePgSQL · 实战经验 · 分组TOP性能提升44倍
业务背景按分组取出TOP值,是非常常见的业务需求。比如提取每位歌手的下载量TOP 10的曲目、提取每个城市纳税前10的人或企业。传统方法传统的方法是使用窗口查询,PostgreSQL是支持窗口查询的。例子测试表和测试数据,生成10000个分组,1000万条记录。postgres=# create table tbl(c1 int, c2 int, c3 int); CREATE TABLE...
View ArticleMySQL · 源码分析 · 网络通信模块浅析
MySQL 网络通信浅析MySQL的网络通信协议主要包含以下几个层次,从最上层的MySQL数据包协议层到最底层的socket传输:| THD | Protocol | NET | VIO | SOCKET...
View ArticleMongoDB · 特性分析 · 索引原理
为什么需要索引?当你抱怨MongoDB集合查询效率低的时候,可能你就需要考虑使用索引了,为了方便后续介绍,先科普下MongoDB里的索引机制(同样适用于其他的数据库比如mysql)。mongo-9552:PRIMARY> db.person.find() { "_id" : ObjectId("571b5da31b0d530a03b3ce82"), "name" : "jack", "age"...
View ArticleSQLServer · 特性分析 · XML与JSON应用比较
背景SQL Server是一种强大的数据库引擎,不仅性能卓越,稳定,功能还很强大,SQL Server 2016中已经支持JSON。这让我想到以前工作中经常使用的SQL XML,也对比一下他们几个关键领域的应用方法。这两种SQL特性,在实际的工作中也是常用的功能,特别是JSON在最近发展非常火爆,SQL Server也不落后,很快就在SQL...
View ArticleMySQL · 最佳实战 · 审计日志实用案例分析
审计日志是RDS安全策略中非常重要的一环,它采集了数据库中所有的访问请求,包括常见的insert,update,delete,select,alter,drop,create语句,还有一些比如set,commit,rollback命令语句。有了这些日志后可以帮助我们进行问题回溯,分析问题。下面这则案例讲述如何使用审计日志来分析只读实例延迟问题,如果没有审计日志我们很难想象该问题该如何解决。问题描述:...
View ArticleMySQL · 性能优化 · 条件下推到物化表
背景MySQL引入了Materialization(物化)这一关键特性用于子查询(比如在IN/NOT IN子查询以及 FROM 子查询)优化。具体实现方式是:在SQL执行过程中,第一次需要子查询结果时执行子查询并将子查询的结果保存为临时表...
View ArticleMySQL · 源码分析 · Query Cache内部剖析
Query Cache背景Query Cache在其他数据库里面也称为结果集缓存。顾名思义,它的目的是将SELECT语句与其返回结果缓存到Query Cache中,如果重复执行相同的SELECT语句的话,我们可以跳过MySQL的解析、优化、执行阶段,将SELECT的查询结果直接返回到客户端,加速SELECT语句的执行。Query Cache中的主要数据结构Query_cache对整个Query...
View ArticleMySQL · 捉虫动态 · 备库1206错误问题说明
问题背景一个用户自建MySQL,出现备库复制中断的问题,报错为slave sql thread 错误,The total number of locks exceeds the lock table size。报错代码这个报错在代码中的抛错逻辑为:if UT_LIST_GET_LEN(buf_pool->free) + UT_LIST_GET_LEN(buf_pool->LRU)...
View Article