- 博客(28)
- 收藏
- 关注
原创 InnoDB MVCC解析
innodb的多版本控制主要是依靠readview+undo log实现的,其中readview为事务当前系统的可见性视图,即当前时刻的事务系统trx_sys快照,通过readview来判断记录对当前事务的可见性;undo log以链表的形式按新旧顺序存储一行记录的历史数据。下面分别解析readview和undo log原理。Readviewinnodb中的插入、修改或者删除操作总是直...
2019-03-25 23:19:32
758
原创 CockroachDB集群搭建和配置
CockroachDB集群搭建和配置下载 上crdb官网https://www.cockroachlabs.com/docs/releases/v2.0.5.html 找二进制包 Production releases是已经GA的版本,Testing是最新的测试版本。 选一个版本下载二进制包或者源码包: wget -q https://binaries.cock...
2018-08-29 22:46:19
4037
原创 CockroachDB中一个query是如何执行的?
CockroachDB CockroachDB架构: Postgres wire protocolclient和客户端之间用pgsql的协议通信,用户连接由pgwire包的pgwire.v3conn.serve()维持,它负责读取query,将query发给sql.Executor处理,然后收集结果返回给client。 SQL Executorsql.execut...
2018-08-11 21:33:30
2593
1
原创 CockroachDB分布式事务解析
事务层事务层实现了对并发操作的ACID事务支持。 CRDB事务分为两个阶段: write & reads,即事务执行阶段,当进行写操作时,CRDB并不会直接对硬盘的数据进行修改,而是使用另外两个东西来进行辅助,这两个东西也避免了锁的使用: Transaction record,存储在range第一个被修改的key处,表明了修改当前key...
2018-08-11 21:21:27
3097
原创 高性能CockroachDB--如何获得更好的性能
Gain better performance for CRDB 节点参数设置: --attrs,标记node的特点,比如ram大小,硬盘种类,大小等。主要跟replication zone配合使用,zone能通过这些特点来进行库、表、行级别的数据分离存储。比如限制某个表的数据只能存储在attrs硬盘为ssd的store上。 --cache,分给rocksdb...
2018-07-22 00:07:18
6429
原创 CockroachDB分布式SQL层架构解析
SQL 层SQL层主要用来将SQL语句转化为K-V操作,并将操作送给事务层。SQL Parser, Planner, Executor,CRDB通过yacc将语句解析为抽象语句树(AST),yacc是描述CRDB支持的语法的文件;通过生成的AST,CRDB将其生成计划树,计划树的节点是planNodes,每个planNodes都包含一系列K-V操作,可以通过EXPLAIN查看计划树的具体情况,比如...
2018-07-15 00:12:55
2857
原创 CockroachDB生产环境成功应用案例
百度云业务类型业务分成三部分:在线交易、轻量级的在线分析(例如实时营销类业务根据用户画像推送相关联的产品)、重量级的离线分析(例如构建用户画像)。在线交易和轻量级分析直接由CockroachDB集群处理,离线分析部分由Spark集群通过CockroachDB提供的KV接口读取数据运行离线分析,把离线分析业务和在线业务之间的影响降到最低,同时二者共享一份数据。数据量两个产品布置在百度云上,一共30个...
2018-07-15 00:09:51
3655
转载 Galera replication原理详解
转载自:http://www.gpfeng.com/?p=603这篇文章总结了之前对Galera replication的调研,内容包括Galera特性,原理,Galera cluster配置,参数及性能等Galera replication是什么MySQL DBA及开发应该都知道MySQL源生复制及semi-sync半同步复制,它们都基于MySQL binlog,原生复制是完全异步的,maste...
2018-06-29 21:16:25
7501
翻译 Galera vs Group Replication的区别
这篇文章翻译自percona blog:https://www.percona.com/blog/2017/02/24/battle-for-synchronous-replication-in-mysql-galera-vs-group-replication/Multi-Master vs. Master-SlaveGalera has always been multi-master by ...
2018-06-29 21:12:26
2907
原创 MySQL高可用框架--组复制(group replication)搭建测试
一、框架搭建 1.首先备份主库数据,有两种方法,冷备份和热备份。冷备份需要先停止master服务,sudo/etc/init.d/mysql stop,然后通过cp或者scp等命令将数据文件传输到指定文件夹,这里我选择在一台服务器上启动三个实例来搭建组复制,所以就用sudo cp -R /var/lib/mysql /home/piriineos/data/mysql/data1/来复制...
2018-06-29 20:41:58
5381
1
原创 mysql复制发展历程(从5.1到8.0版本)
mysql5.1之前的版本网上基本上都查不到什么资料了,官网上也只有5.5之后的文档。所以就从5.1开始了解复制的发展历史。MySQL 5.1 mysql5.1版本对于复制的新特性就是引入了基于行的复制,当服务器使用混合模式复制时,基于语句的复制是默认的,在运行时会根据具体情况动态的改变binlog格式。当使用混合模式复制时,如下几种情况会从基于语句的binlog切换到基...
2018-06-17 22:32:00
2491
1
原创 主从复制的问题与解决方案
*日志损坏。当主库日志损坏时,备库会因为读取不到目标偏移量的语句而停止,需要找出主库正常的首个语句的偏移量然后备库change master to重新定位。当备库日志损坏时通过最后执行的日志位置(execmaster log pos)找到主库对应的位置然后change master to重新定位。 日志损坏的类型:1.数据改变,但sql仍然有效,这种损坏不容易找出来,不过...
2018-06-16 10:56:17
795
原创 MySQL主从复制的拓扑结构
复制拓扑 *所有拓扑都应该遵循一个备库只能拥有一个主库,每个备库只能有一个server id的规则。 *一主多备。简单的拓扑,但是能够满足大部分需求:1.为不同的角色使用不同的备库。2.选用一个备库当作待用主库,以备主备切换。3.可以用于灾难恢复。4.可以将一个备库用作测试。对于这种结构需要关注多个备库的延迟,对于延迟特别严重的需要进行一些处理。另外就是虽然多个备库可以缓解...
2018-06-16 10:55:35
455
原创 高性能MySQL读书笔记--主从复制
总的来说在复制的时候你需要做的事情:1.使用pt-table-checksum保证主备数据一致。2.监控备库延迟保证它们没有过于延迟。3.理解复制的异步本质,设计你的应用避免或者容忍从备库读取脏数据。4.不要写入超过一个服务器,把备库变为只读。5.选用对复制更安全的参数(sync master info等)。你可以带着疑问读下面的文章。复制概述 *mysql支持两种复制方式:基...
2018-06-16 10:53:51
496
转载 innodb下的记录锁,间隙锁,next-key锁
你需要知道的 之前我们介绍了排他锁,其实innodb下的记录锁(也叫行锁),间隙锁,next-key锁统统属于排他锁。行锁 记录锁其实很好理解,对表中的记录加锁,叫做记录锁,简称行锁。生活中的间隙锁 编程的思想源于生活,生活中的例子能帮助我们更好的理解一些编程中的思想。 生活中排队的场景,小明,小红,小花三个人依次站成一排,此时,如何让新来的小刚不能站在小红旁边,这时候只要将小红和她前面的小明之间...
2018-06-16 00:03:38
264
原创 reset master和reset slave解析
RESET MASTER 删除所有index file 中记录的所有binlog 文件,将日志索引文件清空,创建一个新的日志文件,这个命令通常仅仅用于第一次用于搭建主从关系的时的主库,注意 reset master 不同于purge binary log的两处地方1 reset master 将删除日志索引文件中记录的所有binlog文件,创建一个新的日志文件 起始值从000001 开始,然而p...
2018-06-16 00:03:16
598
转载 mysqldump的master-data和single-transaction选项解析
1 mysqldump导出数据主要有两种控制:一种是导出的全过程都加锁 lock-all-tables, 另一种则是不加。前者会在导出开始时执行 FLUSH TABLES WITH READ LOCK; 也就是加全局读锁,会阻塞其它写操作,以保证导出是一致性的;因此只有在导出测试数据时或导出时没有业务连接操作时可不加 lock-all-tables .至于说一致性导出的另一种方式 single-t...
2018-06-16 00:02:12
708
转载 show engine innodb status详解
转载自:http://blog.51cto.com/louisyang/1379813,修正了部分错误或者过时信息。Header这部分简单的打印,输出的时间,以及自从上次输出的间隔时间。1 =====================================2 07091310:31:48 INNODB MONITOR OUTPUT3 ============================...
2018-06-12 10:12:14
2597
转载 Spin lock(自旋锁)与mutex 的区别
转载自:https://blog.csdn.net/kyokowl/article/details/6294341POSIX threads(简称Pthreads)是在多核平台上进行并行编程的一套常用的API。线程同步(Thread Synchronization)是并行编程中非常重要的通讯手段,其中最典型的应用就是用Pthreads提供的锁机制(lock)来对多个线程之间共 享的临界区(Crit...
2018-06-11 21:06:06
317
原创 myisam增删改查过程学习
MyISAM引擎*MyISAM引擎的索引与数据分开存储,分别存储为.MYI和.MYD。每个表只有一个MYI文件,因而该表所有的索引都存储在这个文件中,索引文件由五个部分组成:state,base,keydef,recinfo以及key blocks。state存储在文件最前面,主要的用途是标明索引文件的状态,比如包括几个索引,其根指针为多少,当前索引文件大小等。其中一些重要的参数如下:option...
2018-06-11 15:20:56
751
原创 innodb增删改查过程解析
Innodb运行时结构*innodb引擎架构大致如下图: 可以看到主要是两部分组成,一个是许多后台线程,一个是innodb的缓存内存池。*后台线程主要包括如下:1.master thread,这是innodb最核心的一个线程,在早期的innodb版本master thread承担着脏页刷新、合并插入缓冲、刷新redo日志、回收undo日志等作用,在之后的版本用page cleaner thread...
2018-06-11 15:18:20
1956
原创 redo&undo日志解析
redo&undo日志:redo日志大部分为物理日志,其记录时间点为缓冲中页面修改完成,但还没有刷新到硬盘的时间点(事务提交之前),即日至一定要比数据先到硬盘,聚集索引,次级索引,undo页面修改都需要记录redo日志,即可以把redo日志看成大管家,保证所有数据的完整性。undo日志基本是逻辑日志,其记录时间点为修改缓冲中页面之前(先于redo日志,这样redo日志可以记录undo页面的...
2018-06-11 15:11:10
22022
原创 innodb表空间存储结构
存储结构*Innodb的逻辑存储结构如图所示: 其空间管理由段,区和页构成。段包括叶子节点段,即所有索引的叶子节点都存储在这个段里,叶子节点存储数据(次级索引是主键)和键值,这可以方便管理并且减少随机io;还包括非叶子节点,存储的是指向另外节点的指针和键值;回滚段存储的是每个表的undo日志(具体分析可看redo&undo日志解析)。区的大小固定为1M,不过当一个单独表空间刚申请时,仅有9...
2018-06-11 15:08:25
1272
原创 关于服务器碰到性能瓶颈的思考
这是我的一些想法: 当cpu出现瓶颈的时候,首先考虑从软件方面还有没有改进的余地,比如说代码算法的设计,像我写的这个avl树其实还有更好的插入和删除算法,可以用栈和循环来解决循环嵌套问题,从而减少函数栈出栈入栈的消耗;比如说计算无人机传回的两个gps location之间的直角坐标系向量,可以通过近似Δx = (x1.longitude-x2.longitude)*pi/180*α来计...
2018-06-11 10:04:02
2060
原创 OLTP场景服务器配置建议
当服务器出现瓶颈时,对服务器的配置参数调整往往不是优先级最高的。一般来讲优化的效果是:SQL及索引>数据库表结构>系统配置>硬件,而优化的成本却恰好反过来,此外,对于大部分参数配置,mysql默认设置已经够用,也许调整后会有一些小提升,但可能也为其他方面的问题埋下隐患,因而服务器参数配置的一个原则应该是如果非必要,尽量不要随便调整参数。对于OLTP场景,一般是高并发,事务提交要求...
2018-06-11 10:00:09
1098
原创 EXPLAIN字段详解&测试
测试数据库来自mysql示例数据库(https://launchpad.net/test-db)。所用的表为sakila.film以及sakila.film_actor和sakila.language。表结构分别为: CREATE TABLE `film` ( `film_id` smallint(5) unsigned NOT NULLAUTO_INCREMENT, ...
2018-06-11 09:53:46
3412
3
原创 高性能MySQL读书笔记--索引
本章主要介绍了索引的种类,各自的优缺点,如何设计和高效的使用索引,以及维护和修复索引使其保持正常工作状态。总的来说,就我的理解,分析一个较慢或给服务器造成较大压力的查询,可以从索引的设计是否正确(索引列的顺序,索引列的选择),索引的使用是否正确(避免单行和随机I/O,充分利用数据原生顺序避免排序,索引覆盖查询),以及查询语句设计是否正确,是否可以利用现有索引继续优化这三个方面来解决。索引类型 *B...
2018-06-11 09:42:28
330
原创 avl树容器c++实现及其性能测试
这个实现有个问题就是不能用于多线程,因为avl旋转的特性一次需要锁住整棵树。话不多说直接上代码:/* Created on 2018/5/19 author:HZL * 该AVL树容器不带迭代器(偷懒),并且由于MinGW不支持SGI STL, * 故无法使用其内置的高效内存管理器alloc,而是仅仅封装了一下 * new和delete。同时由于关键的插入和删除函数使用递归方式实现 * 因...
2018-06-11 09:38:55
1490
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人