李海翔
腾讯数据库首席架构师
业界专家认证
分享 关注
提问 私信
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:北京市
了解更多业界专家
李海翔,腾讯数据库首席架构师。中国人民大学、北京林业大学硕士企业导师,CCF数据库专委会委员,北京市科技进步一等奖得主。著有《数据库查询优化器的艺术》《数据库事务处理的艺术》《分布式数据库原理、架构和实践》等。申请与授权专利70+,VLDB等大会发表论文若干篇,参与国家863重大专项、核高基等多项目研发。
  • 529,206
    被访问
  • 419
    原创
  • 1,328,673
    排名
  • 393
    粉丝
  • 7
    领奖
    总分 3,141 当月 0
个人成就
  • 博客专家认证
  • 业界专家认证
  • 获得96次点赞
  • 内容获得39次评论
  • 获得194次收藏
创作历程
  • 348篇
    2017年
  • 72篇
    2011年
成就勋章
TA的专栏
  • 数据库
    288篇
  • 操作系统
    8篇
  • 管理
    19篇
  • 读书笔记
  • 随想
  • 虚拟化
    4篇
  • 计算机基础
    15篇
  • 个人心情
    6篇
  • 搜索引擎
    1篇
  • 计算机史
    4篇
  • 架构/UI设计
    4篇
  • 其他
    7篇
  • 高性能计算
    8篇
  • 云计算
    4篇
  • 目录
    11篇
  • 工具
    2篇
  • 软件工程
    3篇
  • 大数据
    1篇
  • 数据库查询优化器
    16篇
  • 数据库测试
    1篇
  • 分布式计算
    1篇
  • 数据库的比较
    2篇
  • 调试
    1篇
  • 访谈
    2篇
  • 最近
  • 文章
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

数据库事务处理的艺术:事务管理与并发控制---书序

与海翔新书作序海翔在数据库管理系统领域的第二本著作《数据库事务处理的艺术:事务管理与并发控制》马上就要出版了,他邀请我写个序,我没有犹豫就欣然答应了。事后,我自己都觉得奇怪会这么痛快,但细细想来,还是有充分理由的。这个序得写!首先,我对在数据库核心技术领域长期辛勤耕耘的人表示尊敬。数据库是信息系统的基础和核心,对数据库实现技术是否真正掌握关系到我国在信息技术核心领域的自主可控战略是
原创
发布博客 2017.11.16 ·
3057 阅读 ·
0 点赞 ·
1 评论

InnoDB---序列化隔离级别的实现

序列化的实现    InnoDB对于序列化的实现方式,是通过两种方式实现的。    第一种,当SELECT语句在一个显式的事务块内,如执行表11-9中的编号为1的情况,将施加LOCK_S锁,根据表11-6(记录锁事务锁相容表)可知,LOCK_S锁排斥写锁,所以序列化隔离级别下只允许并发地读取操作,并发写被禁止,因此实现了可序列化(参见1.2.2节)。相应代码如下:ha_innoba
原创
发布博客 2017.04.19 ·
1447 阅读 ·
1 点赞 ·
1 评论

InnoDB---可重复读隔离级别的实现

可重复读的实现    可重复读隔离级别,简称RR,在2.1.1节,我们说过:    Repeatable Read(可重复读):一个事务在执行过程中可以看到其他事务已经提交的新插入的记录(读已经提交的,其实是读早于本事务开始且已经提交的),但是不能看到其他事务对已有记录的更新(即晚于本事务开始的),并且,该事务不要求与其他事务是“可串行化”的。    这句话的核心,是“但是不能看到其他
原创
发布博客 2017.04.19 ·
2740 阅读 ·
2 点赞 ·
0 评论

InnoDB---读已提交隔离级别的实现

对于读已提交隔离级别的实现方式,从逻辑上需要明确两个部分,一是加锁部分二是解锁部分。加锁,对应的是获取数据,确保在指定的隔离级别下读取到应该读到的数据。解锁则意味着要在适当的时机释放锁且不影响隔离级别的语义还能提高并发度。    加锁部分,实现分为两个方面:一是加锁的时候,读已提交隔离级别不加间隙锁,这样就能允许并发的其他事务执行插入操作因而产生幻象现象,因为读已提交隔离级别是允许幻象异常存在
原创
发布博客 2017.04.19 ·
5962 阅读 ·
2 点赞 ·
1 评论

InnoDB---读未提交隔离级别的实现

读未提交的实现    对于读未提交隔离级别,此级别不会对记录加锁,有如下几种情况:1 对系统表的数据操作,是数据引擎自己发出的数据查询操作,使用读未提交隔离级别,目的是不与其它事务因锁的存在而冲突。2 在row_search_mvcc()、row_sel_get_clust_rec_for_mysql()等获取记录的函数中确保读未提交隔离级别下允许读到最新的记录。   那么,
原创
发布博客 2017.03.13 ·
3435 阅读 ·
2 点赞 ·
2 评论

MDL--元数据锁的锁请求与锁等待+元数据锁类对象

1 元数据锁的锁请求与锁等待    元数据锁在MySQL Server层,按照锁的状态被细分为两种,一种是已经施加的锁,一种是等待施加的锁即锁请求,这样被区分的原因,如MySQL对“class MDL_request”的代码注释作了解释:/**  A pendingmetadata lock request.   A lockrequest and a granted
原创
发布博客 2017.03.13 ·
1982 阅读 ·
1 点赞 ·
1 评论

MySQL--MDL,元数据锁的粒度

MySQLServer层定义了如下的元数据锁的粒度,这些锁较多,超出了读锁和写锁两种锁粒度,这是因为读锁和写锁通常是理论上根据概念探讨的范畴,而在工程实践中会根据实际情况进行细化,以最大限度地提高并发度。/**    Type ofmetadata lock request.    @saComments for MDL_object_lock::can_grant_lock
原创
发布博客 2017.03.13 ·
1406 阅读 ·
0 点赞 ·
0 评论

事务的模型

事务的实现,在不同的数据库系统中是不同的,这是因为事务有着不同的模型,在Jim Gray的《事务处理概念与技术》一书的第四章事务模型中,把事务分为:q  平板事务(Flat Transactions):事务块中的所有SQL语句,构成一个逻辑单元,要么都成功,要么因之一失败都回滚。PostgreSQL的事务管理如果不考虑保存点(Savepoint)机制,可以认为就是一个平板类型的事务,事务块内的
原创
发布博客 2017.03.13 ·
851 阅读 ·
0 点赞 ·
1 评论

InnoDB定义的Mutex--02

InnoDB定义的Mutex的作用    在许多对象(如数据缓冲区、字典表、系统锁表、双写缓冲区等)上、在许多操作作用的对象(如事务、回滚段等)上,InnoDB都定义了很多系统锁,用以保护某个对象。这些系统锁,就是上一节讨论的Mutex。定义好的Mutex的具体作用,详情参见表11-5。 表11-5 InnoDB的系统级锁 类别 锁的名称
原创
发布博客 2017.03.13 ·
1097 阅读 ·
0 点赞 ·
1 评论

InnoDB定义的Mutex--01

InnoDB定义的Mutex    InnoDB在ib0mutex.h文件中定义了六种自定义的Mutex如下:q OSBasicMutex:OS的Event定义的Mutex,依赖于具体的OS;施加锁只尝试一次。如下面的初始化代码段等。q OSTrackMutex:继承自OSBasicMutex,依赖于OS;施加锁尝试函数参数指定的次数(max_spins参数指定尝试的次数)。q
原创
发布博客 2017.03.13 ·
911 阅读 ·
0 点赞 ·
1 评论

InnoDB---深入理解事务提交--03

四 深入讨论:什么是“事务提交”?    在标题三中,我们认为InnoDB不符合预写日志机制,这是基于事务提交的标志设置是在刷出日志之前完成的,这一点,是基于InnoDB的代码实现的意图来下的结论。InnoDB认为在内存的状态设置了提交标志就算是“事务提交”完成了。    但是,传统的数据库理论认为,“事务提交”需要符合持久性(ACID之D),也就是说,事务的最后一个记录输出到稳定存储介质
原创
发布博客 2017.03.13 ·
543 阅读 ·
1 点赞 ·
1 评论

InnoDB---深入理解事务提交--02

三 为什么说InnoDB不符合WAL预写日志机制?    在标题二中我们提出这样的一个调用栈:innobase_commit_low(trx)    -> trx_commit_for_mysql()        -> trx_commit(trx)            ->trx_commit_low()               ->  trx_commi
原创
发布博客 2017.03.13 ·
493 阅读 ·
0 点赞 ·
1 评论

InnoDB---深入理解事务提交--01

当事务正常执行结束时,事务的提交操作,是实现事务原子性的主要操作之一,这个过程很重要。如下我们重点分析事务提交过程中一些重要环节。 一 事务提交的整体过程    InnoDB和MySQL Server联合实现了事务的提交全程,相关过程参见表10-2,在这个表里面,从上到下,是一个事务提交过程的栈,上面是栈顶下面是栈底,底层的函数调用了上层的函数。 表10-2 事务提交的相关函数
原创
发布博客 2017.03.13 ·
728 阅读 ·
0 点赞 ·
1 评论

InnoDB---UNDO日志与回滚

事务通过trx_rsegs_t与系统表空间和临时表空间等物理存储联系起来的方式如下:/** Rollback segments assigned to a transaction forundo logging. */struct trx_rsegs_t{    /** undolog ptr holding reference to a rollback segment t
原创
发布博客 2017.03.13 ·
1699 阅读 ·
0 点赞 ·
1 评论

InnoDB---事务和并发控制相关的文件

//与事务管理和并发控制相关的文件目录结构    storage\inn
原创
发布博客 2017.03.13 ·
542 阅读 ·
1 点赞 ·
1 评论

长事务的管理

直观感觉,一个事务花费很长时间不能够结束,就是一个长的事务,简称长事务( Long Transaction )。在OLTP类型的数据库系统中,一个事务的执行时间通常会很短,所以不会感觉其执行时间漫长。长事务的概念不一而足:在Oracle中,运行时间超过6秒的事务就被视为长事务。Informix把占用整个逻辑日志空间在一定比例以上的事务(事务占用整个逻辑日志空间的百分比超过“长事务深水线比例”这
原创
发布博客 2017.03.13 ·
6007 阅读 ·
0 点赞 ·
1 评论

Orca优化器--基本结构和基本对象

1 Orca框架结构1.1 Orca与database的关系  图一 Orca与数据的关系图 1.2 Orca内部架构 图二Orca内部架构图 说明:图一和图二源自Orca:A Modular Query Optimizer Architecture for Big Data 2 基本对象2.1 作业2.1.1作业Job的概念一个Job,可
原创
发布博客 2017.03.13 ·
1941 阅读 ·
1 点赞 ·
1 评论

Greenplum Orca 优化器目录结构

├─cmake              构建相关├─data               测试数据├─libgpdbcost        代价模型│  ├─include│  │  └─gpdbcost│  └─src├─libgpopt│  ├─include         头文件│  │  └─gpopt        ...│  └─src│      ├─base        实现
原创
发布博客 2017.03.13 ·
1388 阅读 ·
0 点赞 ·
1 评论

事务的属性--严格性(Strictness)

严格性(Strictness)    A schedule is strict - has the strictness property - if for any twotransactions T1, T2, if a write operation of T1 precedes a conflictingoperation of T2 (either read or write),
原创
发布博客 2017.03.13 ·
1319 阅读 ·
0 点赞 ·
0 评论

事务的属性--可恢复性(Recoverability)

可恢复性(Recoverability)Recoverability means that committedtransactions have not read data written by aborted transactions (whose effectsdo not exist in the resulting database states)。可恢复性是并发的事务后期、表
原创
发布博客 2017.03.13 ·
3456 阅读 ·
0 点赞 ·
0 评论
加载更多