数据库架构,分布式与并行编程

Enjoy life! Love Program!

  • 博客访问: 433688
  • 博文数量: 42
  • 用 户 组: 普通用户
  • 注册时间: 2015-01-01 22:46
  • 认证徽章:
个人简介

资深Oracle RAC及Exadata部署实施运维专家,曾从事PostgreSQL内核开发与性能优化。丰富的大规模数据库管理架构设计经验。目前在阿里巴巴从事数据库架构工作以及新技术引进,对分布式存储,云计算及并行编程有一定研究。技术讨论请加微信:ljs521688

ITPUB论坛APP

ITPUB论坛APP



APP发帖 享双倍积分

文章分类

全部博文(42)

文章存档

2017年(13)

2015年(29)

微信关注

IT168企业级官微



微信号:IT168qiye



系统架构师大会



微信号:SACC2013

订阅
热词专题

发布时间:2017-04-07 19:39:33

InnoDB实现IO Flush通过“os_file_flush”宏收敛,macro展开后为”os_file_flush_func”。 接下来,我们重点看一下,还有其它哪些场景会调用到这个os_file_flush_func函数: 1. buf_dblwr_init_or_load_pages中,在double buffer 做crash恢复时,如果设置了reset_space_ids为”true” 2. fil_create_new_single_table_table.........【阅读全文】

阅读(650) | 评论(0) | 转发(0)

发布时间:2015-04-23 00:31:46

从上篇“PostgreSQL MVCC 源码实现”中,我们知道,PG并没有像Oracle那样的undo来存放旧版本;而是将旧版本直接存放于relation文件中。那么带来的问题就是dead tuple过多,导致relation文件 不断增大而带来空间膨胀问题。为了解决这个问题,PG中引入了vacuum后台进程,专门来清理这些dead tuple,并回缩空间。当然vacuum的.........【阅读全文】

阅读(7549) | 评论(0) | 转发(2)

发布时间:2015-01-31 00:36:38

      这张时序图比较大,但是大致上描述了PG 处理简单SQL的大致流程。       由客户端发起SQL 语句,PG服务端进程backend接收到语句后,开始执行exec_simple_query()代码。后面所有方法调用均有exec_simple_query()函数直接或者间接发起。 大体上分为以下几个过程:pg_.........【阅读全文】

阅读(8224) | 评论(1) | 转发(0)

发布时间:2015-02-07 22:02:16

一、前言     最近看了MySQL和PostgreSQL源码对于mutex处理,Semaphore和mutex的关系,有些地方模糊了。想想也是,从大学那会儿学linux内核后,后面很少看那块了,更多的是研究数据库的一些东西。因此,刚好可以补习下,找回记忆。 二、概况     其实从本质上来讲,两都并没有太大区别,.........【阅读全文】

阅读(8835) | 评论(0) | 转发(0)

发布时间:2015-01-08 01:21:01

PostgreSQL的xlog,即WAL(Write Ahead Log),位于pg_xlog目录下,是PostgreSQL 完全或者PITR(Point In-Time Recovery)恢复所依赖的日志。       为什么会有WAL日志呢?这个跟目前主流的数据库如Oracle,MySQL等一样,保证事务的持久性。即任何已经commit的事务,必须是持久的。 如果我把redo.........【阅读全文】

阅读(11623) | 评论(3) | 转发(0)

发布时间:2015-01-01 23:05:05

PostgreSQL FSM(Free Space Map) 源码解读一、FSM设计目的FSM,即空闲空间管理的设计初衷是为了能够快速找到一个页是否有足够的自由空间用来容纳新增的数据。如果没有这样的页,则分配新页。在PG 8.4版本以后,每个relation有自己独立的的FSM空间(以_fsm后辍的文件)。fsm文件:二、FSM原理.........【阅读全文】

阅读(6835) | 评论(0) | 转发(0)

发布时间:2015-01-01 23:06:12

PostgreSQL中page页结构源码解析    在PG中,磁盘存储和内存中的最小管理单位都是page,也是通常所说的block。一般PG页的大小为8K,在源码编译时可以设置。此后都不可更改,因为许多PG内存结构设计都是以此为基础的。在一个page中,表的记录是从page的底部开始存储,然后慢慢向上涨。Page结构图如.........【阅读全文】

阅读(6081) | 评论(0) | 转发(0)

发布时间:2017-06-06 23:46:28

Ceph的数据分布是由CRUSH Map解决定的,而CRUSH算法是伪HASH的,所以在一定时间内,数据会存在倾斜,这就需要我们用脚本来进行定期的reweight: #author jesse.js.lyu@gmail.com #reweight for ceph osds     import hashlib import commands import threading import sys from time import ctime,sleep import ur.........【阅读全文】

阅读(84) | 评论(0) | 转发(0)

发布时间:2017-05-18 13:28:59

  转https://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Data/endian.html Big and Little Endian Basic Memory ConceptsIn order to understand the concept of big and little endian, you need to understand memory. Fortunately, we only need a very high level abstraction for memory. You don't need to kn.........【阅读全文】

阅读(117) | 评论(0) | 转发(0)

发布时间:2017-04-07 19:52:24

#!/bin/sh STAP_FILE_PATH="/tmp/moderate-ext4.stp" MODERATE_EXT4_FUNCTIONS=( #ext4 direct io function "ext4_direct_IO" #ext4 page related functions #"ext4_readpages" #"ext4_writepage" #ext4 aio related functions "generic_file_aio_read" "ext4_file_write" #ext4 sync function "ext4_sync_file" ) func.........【阅读全文】

阅读(143) | 评论(0) | 转发(0)

发布时间:2017-04-07 19:47:17

  一、背景 面对着业务的发展,不管是在线,近线还是离线系统,其所需要的存储规模以及存储成本,成倍上涨。如果还是采取传统的分散式存储管理方式,不但带来高昂的管理分散式存储的成本,而且还会增加存储成本。 因此,我们极需要有一种即高效且省成本的数据存储以及存储管理方式。自然的,我们把目光聚焦在了分布式.........【阅读全文】

阅读(1574) | 评论(0) | 转发(0)

发布时间:2017-04-07 19:31:12

1.1clone repository 源码打包docker 7u机器: lvjian100081200005.et15sqa git clone --recursive https://github.com/ceph/ceph.git #checkout 出某一个版本 git clone –b v10.2.2 https://github.com/ceph/ceph.git cd ceph git status git submodule update --init --recursive git checkout master 1.2编译Ceph .........【阅读全文】

阅读(204) | 评论(0) | 转发(0)

发布时间:2017-04-05 23:52:01

前景:分析底层mysql sync的IO数据大小,用于条带化分析和优化 安装kernel debug info yum install kernel-debuginfo kernel-debuginfo-common   probe module("ext4").function("ext4_sync_file") { if( execname()=="mysqld") { printf("%s , %s, %d %u \n",pp(),tz_ctime(gettimeofday_s()),cpu(),gettimeofday_ns.........【阅读全文】

阅读(139) | 评论(0) | 转发(0)

发布时间:2017-04-05 23:47:31

[global] fsid = 740988c7-045c-455b-9301-cd50f527f2a2 mon_host=11.180.137.117 #for auth and crc auth_cluster_required = none auth_service_required = none auth_client_required = none auth_supported = none cephx_sign_messages = false cephx_require_signatures = false ms_nocrc = true max_open_files = 131.........【阅读全文】

阅读(147) | 评论(0) | 转发(0)

发布时间:2017-04-05 23:35:39

如何利用客户端在itpub发博客 一、Linux环境 1.安装blogilo sudo apt-get install blogilo 如果你不是kde环境也许还得安装 libqt4-sql-sqlite sudo apt-get install libqt4-sql-sqlite 2.配置blogilo 打开blogilo=>设置=>配置Blogilo=>博客=>添加 在URL一栏填入:http://blog.itpub.net/xmlrpc.php?r=rpc/server .........【阅读全文】

阅读(147) | 评论(0) | 转发(0)

发布时间:2017-04-05 22:36:30

RocksDB引擎的加载,具体操作是通过DB:Open()方法进行的,具体实现类是DBImpl类。 1.引擎加载call stack Rocksdb引擎注册和加载时call stack: ###Step 1.在storage engine plugin中的声明,在ha_rocksdb.cc源文件中 myrocks::rocksdb_init_func, /* Plugin Entry Point */ ### Step 2.初始化plugin,在加载时被调用,在.........【阅读全文】

阅读(193) | 评论(0) | 转发(0)

发布时间:2017-04-05 22:30:05

rocksdb相关的重要参数......【阅读全文】

阅读(270) | 评论(0) | 转发(0)

发布时间:2015-06-28 22:03:26

       每种数据库都有自己的SQL执行流程图,PostgreSQL也不例外。下面这张图基本上概括了PG处理SQL的整个逻辑。我下面分开来细讲一下:   1.Main Main是整个后台的入口,基本上不处理任何逻辑,只是简单的分发处理逻辑。 但是像检查当前用户是否是”root”,还是会做的。因为我们知.........【阅读全文】

阅读(11388) | 评论(0) | 转发(3)

发布时间:2015-06-14 22:48:39

    像其它数据库一样,PostgreSQL数据库不仅有表级别的锁,同时也有行级别的锁。行锁对于提高系统的并行度至关重要。那么PostgreSQL是如何实现行锁的呢? PostgreSQL获取行锁的大致分为以下两个阶段: 1.获取buffer page级别的锁    这是一个buffer content锁,不是单纯的buffer pin,当然buffer.........【阅读全文】

阅读(10191) | 评论(0) | 转发(1)

发布时间:2015-06-07 21:16:40

    今天来谈一下PostgreSQL 的checkpoint原理。检查点功能在现有流行的数据库中都具备。如Oracle,MySQL等,尤其是Oracle 对检查点功能的实现,非常完善。Oracle不 仅有全局检查点,还有增量检查点,即非常著名的 “Incremental checkpoint”。虽然各大数据库实现的方式不同,但是主要目的都是一样的,都是.........【阅读全文】

阅读(10945) | 评论(0) | 转发(1)

发布时间:2015-05-24 21:45:31

    基于RDS云上需求,最近实现了类似于MySQL global read only的功能。PG的read only功能,也不再需要通过重起PG实现来实现。直接可以online更改PG实例级别 global read only 和 global read write功能, 以达到快速实现主备切换的功能。大大缩短了主备切换时间,提高了PG的高可性。弥补了PG在这一功能上的.........【阅读全文】

阅读(10174) | 评论(0) | 转发(0)

发布时间:2015-05-17 15:50:10

    PostgreSQL有自己的事务实现模型。总体上分为三层:top layer, middle layer和bottom layer。 1. Top Layer Top Layer主要由用户控制,对用户可见。这一层的事务,主要由用户来决定事务的发起与结束。事务生命周期由用户控制,是high-level的。 也就是通常所说的事务块,transaction block。当用户发起.........【阅读全文】

阅读(10354) | 评论(0) | 转发(2)

发布时间:2015-05-10 20:42:51

    我们知道,在PG中,每个relation,也就是表,都有好几个fork对应。存放主表数据的为“MAIN” fork;管理空余空间的为“FSM” fork;存放可视化视图的为“visibility” fork。 那么PG又是如何将每个表的fork管理起来,并跟pg_class中的relfileno对应起来的呢?这可以分为两类:一类是常规表;一类是系统.........【阅读全文】

阅读(8179) | 评论(0) | 转发(1)

发布时间:2015-05-10 15:16:12

    PG中事务号有两个概念,一个就是通常意义上的事务号transaction id。如tuple中的xmin,xmax等。另外一个意义是虚拟事务ID,即virtual transaction ID。那么这两个有 什么区别呢?   1.Transaction Id      它是用来标识事务的顺序的,类似于Oracle的LSN(Logical Sequence Numb.........【阅读全文】

阅读(8931) | 评论(0) | 转发(0)

发布时间:2015-05-02 16:38:14

      为了能全面理解PG整个vacuum的过程,专门绘制了下面一个完整的过程图,用以记录其内核源码实现机理。整个过程比较复杂。大致分为以下几个部分: 一、pg_ctl     这个负责PG server起动,调用start_postmaster后,起动PG主server进程postmaster。后面任务交给postmaster来处理.........【阅读全文】

阅读(8686) | 评论(0) | 转发(0)
给主人留下些什么吧!~~
留言热议
请登录后留言。

登录 注册