摘要: 上篇文章简单讨论了虚拟机的原理,这篇文章我们详细讨论下指令,具体从几种典型的SQL语句来看看每种SQL对应的指令流,以及每个指令的含义。通过explain语句,可以看到语句对应的指令流;通过pragma vdbe_trace=on指令,我们甚至可以得到语句对应的指令执行流程,包括跳转等。测试表结构 阅读全文
posted @ 2016-01-21 09:22 天士梦 阅读(1107) 评论(0) 推荐(0) 编辑
摘要: 前言 我们知道任何一种关系型数据库管理系统都支持SQL(Structured Query Language),相对于文件管理系统,用户不用关心数据在数据库内部如何存取,也不需要知道底层的存储结构,熟悉SQL,就能熟练使用数据库。SQL的引入,使得数据库系统需要将SQL转换为内部的数据结构,然后与底层 阅读全文
posted @ 2016-01-20 08:59 天士梦 阅读(2661) 评论(1) 推荐(4) 编辑
摘要: 概述 SQLite提供了一系列接口供用户访问数据库,主要包括连接数据库,处理SQL,迭代查询结果等。本文会针对我们使用SQLite的主要场景,列出核心的API,详细介绍API的用法并给出代码用例。1.打开关闭数据库sqlite3_open_v2原型: 作用:打开一个数据库连接关键的参数:flagsS 阅读全文
posted @ 2016-01-12 08:29 天士梦 阅读(21914) 评论(0) 推荐(4) 编辑
摘要: 1.概述 我们熟知的数据库引擎大部分采用静态数据类型,即列定义的类型定义了值的存储,并且值要严格满足列的定义,同一列所有值的存储方式都相同,比如定义了一个列类型为整型 int,不能在该列上输入'abc'。SQLite的数据类型则采用了动态类型,列定义不能决定值的存储,值的存储由值本身决定,因此在SQ 阅读全文
posted @ 2016-01-11 09:22 天士梦 阅读(1908) 评论(1) 推荐(0) 编辑
摘要: 1.问题背景 默认情况下,线上的mysql复制都是异步复制,因此在极端情况下,主备切换时,会有一定的概率备库比主库数据少,因此切换后,我们会通过工具进行回滚回补,确保数据不丢失。半同步复制则要求主库执行每一个事务,都要求至少一个备库成功接收后,才真正执行完成,因此可以保持主备库的强一致性。为了确保主 阅读全文
posted @ 2016-01-05 08:57 天士梦 阅读(3782) 评论(13) 推荐(2) 编辑
摘要: mysql复制简单介绍了mysql semi-sync的出现的原因,并说明了semi-sync如何保证不丢数据。这篇文章主要侧重于semi-sync的实现,结合源码将semi-sync的实现过程展现给大家。最新的semi-sync源码可以参考官方5.7版本的实现,https://github.com 阅读全文
posted @ 2016-01-05 08:56 天士梦 阅读(4546) 评论(0) 推荐(0) 编辑
摘要: 前一篇文章我们分析了Performance-Schema中每个表的用途,以及主要字段的含义,比较侧重于理论的介绍。这篇文章我主要从DBA的角度出发,详细介绍如何通过Performance-Schema得到DBA关心的数据,比如哪个SQL执行次数最多,哪个表访问最频繁,哪个锁最热等信息。通过充分利用P 阅读全文
posted @ 2015-12-21 09:07 天士梦 阅读(10093) 评论(0) 推荐(3) 编辑
摘要: MySQL Performance-Schema中总共包含52个表,主要分为几类:Setup表,Instance表,Wait Event表,Stage Event表Statement Event表,Connection表和Summary表。上一篇文章已经着重讲了Setup表,这篇文章将会分别就每种类 阅读全文
posted @ 2015-12-20 16:24 天士梦 阅读(4139) 评论(0) 推荐(0) 编辑
摘要: 使用mysql数据库的第一步必然是建立连接登录,然后在上面执行SQL命令。无论是通过mysql的客户端,还是通过C-API,JDBC标准接口连接数据库,这个过程一定少不了。今天我们聊一聊mysql登陆具体过程,里面会涉及client与server的交互,并通过tcpdump抓包给大家展现这一过程。 阅读全文
posted @ 2015-12-07 14:02 天士梦 阅读(8234) 评论(0) 推荐(1) 编辑
摘要: performance-schema最早在MYSQL 5.5中出现,而现在5.6,5.7中performance-Schema又添加了更多的监控项,统计信息也更丰富,越来越有ORACLE-AWR统计信息的赶脚,真乃DBA童鞋进行性能诊断分析的福音。本文主要讲Performance-Schema中的配 阅读全文
posted @ 2015-12-06 08:22 天士梦 阅读(10899) 评论(0) 推荐(0) 编辑
摘要: 随着移动互联网的发展,手机使用越来越广泛,sqlite作为手机端存储的一种解决方案,使用也非常普遍。但是sqlite本身安全特性却比较弱,比如不支持用户权限,只要能获取到数据库文件就能进行访问;另外也没有加密功能,任何人获取到文件后,就可以查到明文数据。这使得大家对于sqlite又爱又不敢用,毕竟用 阅读全文
posted @ 2015-11-25 09:26 天士梦 阅读(8644) 评论(0) 推荐(4) 编辑
摘要: 概述 通过上一篇文章的分析,我们知道了pager模块在整个sqlite中所处的位置。它是sqlite的核心模块,充当了多种重要角色。作为一个事务管理器,它通过并发控制和故障恢复实现事务的ACID特性,负责事务的原子提交和回滚;作为一个页管理器,它处理从文件中读写数据页,并执行文件空间管理工作;作为日 阅读全文
posted @ 2015-11-16 14:12 天士梦 阅读(3444) 评论(4) 推荐(0) 编辑
摘要: 该系列的前面一些文章我重点讲了sqlite的核心功能,比如封锁机制,共享缓存,以及事务管理等。但对于sqlite的整体没有作一个全面的介绍,本文将从实现的层面,整体介绍sqlite的框架、各个核心模块以及功能。后续再针对核心模块作进一步的分析。我们说sqlite是一个关系型的嵌入式数据库。提到关系型 阅读全文
posted @ 2015-11-14 12:15 天士梦 阅读(2717) 评论(0) 推荐(0) 编辑
摘要: 说到事务一定会提到ACID,所谓事务的原子性,一致性,隔离性和持久性。对于一个数据库而言,通常通过并发控制和故障恢复手段来保证事务在正常和异常情况下的ACID特性。sqlite也不例外,虽然简单,依然有自己的并发控制和故障恢复机制。Sqlite学习笔记(五)&&SQLite封锁机制 已经讲了一些锁机 阅读全文
posted @ 2015-10-25 21:42 天士梦 阅读(3271) 评论(0) 推荐(3) 编辑
摘要: 通常情况下,sqlite中每个连接都会一个独立的pager对象,pager对象中管理了该连接的缓存信息,通过pragma cache_size指令可以设置缓存大小,默认是2000个page,每个page是1024B。这样导致了对于同一个数据文件,多个连接各自维护了自己的一份缓存,在高并发情况下,可能 阅读全文
posted @ 2015-10-21 22:38 天士梦 阅读(3650) 评论(2) 推荐(1) 编辑