摘要: 线程池是Mysql5.6的一个核心功能,对于服务器应用而言,无论是web应用服务还是DB服务,高并发请求始终是一个绕不开的话题。当有大量请求并发访问时,一定伴随着资源的不断创建和释放,导致资源利用率低,降低了服务质量。线程池是一种通用的技术,通过预先创建一定数量的线程,当有请求达到时,线程池分配一个 阅读全文
posted @ 2015-05-17 17:04 天士梦 阅读(29772) 评论(0) 推荐(3) 编辑
摘要: 在生产环境中,数据库字符集因为各种原因需要升级,比如为了支持汉字,从latin1字符集升级到GBK,后面为了支持多个语言文字,需要将GBK升级到UTF8等。迁移过程网上有很多,我今天主要想讲下字符集转换后,可能对业务产生的影响,我以GBK转换到UTF8为例说明。主要有两点: 这篇文章主要为了说明编码 阅读全文
posted @ 2015-04-21 22:01 天士梦 阅读(2107) 评论(2) 推荐(1) 编辑
摘要: 组提交(group commit)是MYSQL处理日志的一种优化方式,主要为了解决写日志时频繁刷磁盘的问题。组提交伴随着MYSQL的发展不断优化,从最初只支持redo log 组提交,到目前5.6官方版本同时支持redo log 和binlog组提交。组提交的实现大大提高了mysql的事务处理性能, 阅读全文
posted @ 2015-04-19 14:33 天士梦 阅读(13770) 评论(3) 推荐(3) 编辑
摘要: 今天我们聊聊复制,复制对于mysql的重要性不言而喻,mysql集群的负载均衡,读写分离和高可用都是基于复制实现。下文主要从4个方面展开,mysql的异步复制,半同步复制和并行复制,最后会简单聊下第三方复制工具。由于生产环境中,innodb存储引擎支持事务,并且行级复制使用广泛,所以下文的讨论都是基 阅读全文
posted @ 2015-04-14 12:47 天士梦 阅读(5181) 评论(7) 推荐(2) 编辑
摘要: 前言: Mysql是一个支持插件式存储引擎的数据库系统,本文讨论的锁机制也主要包含两部分SERVER层的锁和存储引擎的锁,存储引擎是指innodb,其它存储引暂不讨论。 1. 数据库中锁相关的基本概念 1) 乐观锁,悲观锁 乐观锁和悲观锁都是一种并发控制策略。悲观锁假定多个事务会同时访问同一个资源, 阅读全文
posted @ 2015-03-27 08:13 天士梦 阅读(2664) 评论(0) 推荐(3) 编辑
摘要: 前言 MDL锁主要用来保护Mysql内部对象的元数据,通过MDL机制保证DDL与DML以及SELECT查询操作的并发。MySQL Meta Lock(一)和MySQL Meta Lock(二)已经讲了一些关于MDL知识,本文将会对MDL进行一个补充,并解释查询堵塞和mysqldump获取一致性备份的 阅读全文
posted @ 2015-03-24 23:40 天士梦 阅读(4518) 评论(0) 推荐(0) 编辑
摘要: 字符集&字符编码方式 字符集(Character set)是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,这里的字符可以是英文字符,汉字字符,或者其他国家语言字符。 常见字符集包括:ASCII字符集、LATIN1字符集、GB2312字符集、GBK字符集、GB18030字符集、Unic 阅读全文
posted @ 2015-03-10 19:32 天士梦 阅读(6492) 评论(5) 推荐(6) 编辑
摘要: 上一篇《mysql metadata lock(一)》介绍了为什么引入MDL,MDL作用以及MDL锁导致阻塞的几种典型场景,文章的最后还留下了一个小小的疑问。本文将更详细的介绍MDL,主要侧重介绍MDL的原理和实现。一般而言,商业数据库系统实现锁,一般将锁划分为读锁(共享锁)和写锁(排它锁),为了进 阅读全文
posted @ 2015-02-27 18:08 天士梦 阅读(4914) 评论(3) 推荐(1) 编辑
摘要: Innodb是mysql数据库中目前最流行的存储引擎,innodb相对其它存储引擎一个很大的特点是支持事务,并且支持行粒度的锁。今天我重点跟大家分享下innodb行锁实现的基础知识。由于篇幅比较大,文章会按如下的目录结构展开。 { innodb锁结构 锁机制关键流程 innodb行锁开销 innod 阅读全文
posted @ 2015-01-28 14:00 天士梦 阅读(6389) 评论(2) 推荐(3) 编辑
摘要: 当多个线程共享相同的内存时,需要确保每个线程看到一致的数据视图,当多个线程同时去修改这片内存时,就可能出现偏差,得到与预期不符合的值。为啥需要同步,一件事情逻辑上一定是有序的,即使在并发环境下;而操作系统对于多线程不会自动帮我们串行化,所以需要我们通过操作系统提供的同步方式api,结合自己的业务逻辑 阅读全文
posted @ 2015-01-27 12:06 天士梦 阅读(3097) 评论(1) 推荐(2) 编辑
摘要: mysql double write (二次写)是mysql innodb存储引擎的一个重要特性,本人这两天翻阅了相关的资料,结合自己已有的知识,说说自己对double write的理解,供各位看官参考。 页断裂(partial write) double write技术innodb为解决页断裂(p 阅读全文
posted @ 2014-09-08 12:19 天士梦 阅读(6296) 评论(2) 推荐(4) 编辑
摘要: 大家在使用mysql过程中,可能会遇到类似一下的问题: root@chuck 07:42:00>select * from test where c1 like 'ab%'; + + | c1 | + + | abc | | ABD | + + 模糊匹配 ab%,结果以AB开头的字符串也出现在结果集 阅读全文
posted @ 2014-09-03 08:23 天士梦 阅读(7364) 评论(0) 推荐(1) 编辑
摘要: 前几天开发童鞋反馈一个利用load data infile命令导入数据主键冲突的问题,分析后确定这个问题可能是mysql的一个bug,这里提出来给大家分享下。以免以后有童鞋遇到类似问题百思不得其解,难以入眠,哈哈。废话少说,进入正题。 拿到问题后,首先查看现场,发现问题表的中记录的最大值比自增列的值 阅读全文
posted @ 2014-08-15 15:18 天士梦 阅读(11322) 评论(1) 推荐(4) 编辑
摘要: 这两天有同学使用数据校验工具时发现进程hang住了,也不知道什么原因,我简单看了看进程堆栈,问题虽然很简单,但能导致程序hang住,也一定不是小问题。简单说明下程序组件的结构,程序由两部分构成,dbchk和dbchk_inner,dbchk采用python代码实现,dbchk_inner采用C语言实 阅读全文
posted @ 2014-08-08 17:28 天士梦 阅读(11066) 评论(1) 推荐(2) 编辑
摘要: 互联网网站应用大多采用mysql作为DB存储,限于mysql单机性能的瓶颈,为了支撑更大容量和更大的访问量,dba一般通过建立分布式集群,让多个mysql共同提供服务。所谓的mysql分布式集群,实质就是将原有的数据拆成多份,放在多个mysql数据库上存储,应用通过中间层路由到对应的数据库分片,访问 阅读全文
posted @ 2014-07-22 10:30 天士梦 阅读(3031) 评论(1) 推荐(2) 编辑