自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 InnoDB MVCC解析

innodb的多版本控制主要是依靠readview+undo log实现的,其中readview为事务当前系统的可见性视图,即当前时刻的事务系统trx_sys快照,通过readview来判断记录对当前事务的可见性;undo log以链表的形式按新旧顺序存储一行记录的历史数据。下面分别解析readview和undo log原理。Readviewinnodb中的插入、修改或者删除操作总是直...

2019-03-25 23:19:32 743

原创 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 3995

原创 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 2541 1

原创 CockroachDB分布式事务解析

事务层事务层实现了对并发操作的ACID事务支持。 CRDB事务分为两个阶段: write & reads,即事务执行阶段,当进行写操作时,CRDB并不会直接对硬盘的数据进行修改,而是使用另外两个东西来进行辅助,这两个东西也避免了锁的使用: Transaction record,存储在range第一个被修改的key处,表明了修改当前key...

2018-08-11 21:21:27 3034

原创 高性能CockroachDB--如何获得更好的性能

 Gain better performance for CRDB 节点参数设置: --attrs,标记node的特点,比如ram大小,硬盘种类,大小等。主要跟replication zone配合使用,zone能通过这些特点来进行库、表、行级别的数据分离存储。比如限制某个表的数据只能存储在attrs硬盘为ssd的store上。 --cache,分给rocksdb...

2018-07-22 00:07:18 6324

原创 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 2819

原创 CockroachDB生产环境成功应用案例

百度云业务类型业务分成三部分:在线交易、轻量级的在线分析(例如实时营销类业务根据用户画像推送相关联的产品)、重量级的离线分析(例如构建用户画像)。在线交易和轻量级分析直接由CockroachDB集群处理,离线分析部分由Spark集群通过CockroachDB提供的KV接口读取数据运行离线分析,把离线分析业务和在线业务之间的影响降到最低,同时二者共享一份数据。数据量两个产品布置在百度云上,一共30个...

2018-07-15 00:09:51 3587

转载 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 7416

翻译 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 2853

原创 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 5335 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 2435 1

原创 主从复制的问题与解决方案

       *日志损坏。当主库日志损坏时,备库会因为读取不到目标偏移量的语句而停止,需要找出主库正常的首个语句的偏移量然后备库change master to重新定位。当备库日志损坏时通过最后执行的日志位置(execmaster log pos)找到主库对应的位置然后change master to重新定位。       日志损坏的类型:1.数据改变,但sql仍然有效,这种损坏不容易找出来,不过...

2018-06-16 10:56:17 767

原创 MySQL主从复制的拓扑结构

复制拓扑       *所有拓扑都应该遵循一个备库只能拥有一个主库,每个备库只能有一个server id的规则。       *一主多备。简单的拓扑,但是能够满足大部分需求:1.为不同的角色使用不同的备库。2.选用一个备库当作待用主库,以备主备切换。3.可以用于灾难恢复。4.可以将一个备库用作测试。对于这种结构需要关注多个备库的延迟,对于延迟特别严重的需要进行一些处理。另外就是虽然多个备库可以缓解...

2018-06-16 10:55:35 432

原创 高性能MySQL读书笔记--主从复制

    总的来说在复制的时候你需要做的事情:1.使用pt-table-checksum保证主备数据一致。2.监控备库延迟保证它们没有过于延迟。3.理解复制的异步本质,设计你的应用避免或者容忍从备库读取脏数据。4.不要写入超过一个服务器,把备库变为只读。5.选用对复制更安全的参数(sync master info等)。你可以带着疑问读下面的文章。复制概述       *mysql支持两种复制方式:基...

2018-06-16 10:53:51 465

转载 innodb下的记录锁,间隙锁,next-key锁

你需要知道的 之前我们介绍了排他锁,其实innodb下的记录锁(也叫行锁),间隙锁,next-key锁统统属于排他锁。行锁 记录锁其实很好理解,对表中的记录加锁,叫做记录锁,简称行锁。生活中的间隙锁 编程的思想源于生活,生活中的例子能帮助我们更好的理解一些编程中的思想。 生活中排队的场景,小明,小红,小花三个人依次站成一排,此时,如何让新来的小刚不能站在小红旁边,这时候只要将小红和她前面的小明之间...

2018-06-16 00:03:38 249

原创 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 577

转载 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 672

转载 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 2548

转载 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 288

原创 myisam增删改查过程学习

MyISAM引擎*MyISAM引擎的索引与数据分开存储,分别存储为.MYI和.MYD。每个表只有一个MYI文件,因而该表所有的索引都存储在这个文件中,索引文件由五个部分组成:state,base,keydef,recinfo以及key blocks。state存储在文件最前面,主要的用途是标明索引文件的状态,比如包括几个索引,其根指针为多少,当前索引文件大小等。其中一些重要的参数如下:option...

2018-06-11 15:20:56 737

原创 innodb增删改查过程解析

Innodb运行时结构*innodb引擎架构大致如下图: 可以看到主要是两部分组成,一个是许多后台线程,一个是innodb的缓存内存池。*后台线程主要包括如下:1.master thread,这是innodb最核心的一个线程,在早期的innodb版本master thread承担着脏页刷新、合并插入缓冲、刷新redo日志、回收undo日志等作用,在之后的版本用page cleaner thread...

2018-06-11 15:18:20 1914

原创 redo&undo日志解析

redo&undo日志:redo日志大部分为物理日志,其记录时间点为缓冲中页面修改完成,但还没有刷新到硬盘的时间点(事务提交之前),即日至一定要比数据先到硬盘,聚集索引,次级索引,undo页面修改都需要记录redo日志,即可以把redo日志看成大管家,保证所有数据的完整性。undo日志基本是逻辑日志,其记录时间点为修改缓冲中页面之前(先于redo日志,这样redo日志可以记录undo页面的...

2018-06-11 15:11:10 21955

原创 innodb表空间存储结构

存储结构*Innodb的逻辑存储结构如图所示: 其空间管理由段,区和页构成。段包括叶子节点段,即所有索引的叶子节点都存储在这个段里,叶子节点存储数据(次级索引是主键)和键值,这可以方便管理并且减少随机io;还包括非叶子节点,存储的是指向另外节点的指针和键值;回滚段存储的是每个表的undo日志(具体分析可看redo&undo日志解析)。区的大小固定为1M,不过当一个单独表空间刚申请时,仅有9...

2018-06-11 15:08:25 1257

原创 关于服务器碰到性能瓶颈的思考

这是我的一些想法:       当cpu出现瓶颈的时候,首先考虑从软件方面还有没有改进的余地,比如说代码算法的设计,像我写的这个avl树其实还有更好的插入和删除算法,可以用栈和循环来解决循环嵌套问题,从而减少函数栈出栈入栈的消耗;比如说计算无人机传回的两个gps location之间的直角坐标系向量,可以通过近似Δx = (x1.longitude-x2.longitude)*pi/180*α来计...

2018-06-11 10:04:02 2029

原创 OLTP场景服务器配置建议

当服务器出现瓶颈时,对服务器的配置参数调整往往不是优先级最高的。一般来讲优化的效果是:SQL及索引>数据库表结构>系统配置>硬件,而优化的成本却恰好反过来,此外,对于大部分参数配置,mysql默认设置已经够用,也许调整后会有一些小提升,但可能也为其他方面的问题埋下隐患,因而服务器参数配置的一个原则应该是如果非必要,尽量不要随便调整参数。对于OLTP场景,一般是高并发,事务提交要求...

2018-06-11 10:00:09 1065

原创 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 3376 3

原创 高性能MySQL读书笔记--索引

本章主要介绍了索引的种类,各自的优缺点,如何设计和高效的使用索引,以及维护和修复索引使其保持正常工作状态。总的来说,就我的理解,分析一个较慢或给服务器造成较大压力的查询,可以从索引的设计是否正确(索引列的顺序,索引列的选择),索引的使用是否正确(避免单行和随机I/O,充分利用数据原生顺序避免排序,索引覆盖查询),以及查询语句设计是否正确,是否可以利用现有索引继续优化这三个方面来解决。索引类型 *B...

2018-06-11 09:42:28 319

原创 avl树容器c++实现及其性能测试

这个实现有个问题就是不能用于多线程,因为avl旋转的特性一次需要锁住整棵树。话不多说直接上代码:/* Created on 2018/5/19 author:HZL * 该AVL树容器不带迭代器(偷懒),并且由于MinGW不支持SGI STL, * 故无法使用其内置的高效内存管理器alloc,而是仅仅封装了一下 * new和delete。同时由于关键的插入和删除函数使用递归方式实现 * 因...

2018-06-11 09:38:55 1459

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除