
MySQL高级及性能优化
文章平均质量分 83
笑天居士
天下风云出我辈,一入江湖岁月催。皇图覇业谈笑中,不胜人生一场醉。
展开
-
PHP Client for Mysql Binlog
PHP解析Mysql Binlog,依赖于mysql-replication-listener库 详见: https://github.com/bullsoft/php-binlog 这个贴里的“MySQL Replication Listener Library”的参考地址:https://github.com/BullSoft/mysql-replication-listener 的源码是原创 2015-08-13 17:09:52 · 3377 阅读 · 0 评论 -
如何解决秒杀的性能问题和超卖的讨论
最近业务试水电商,接了一个秒杀的活。之前经常看到淘宝的同行们讨论秒杀,讨论电商,这次终于轮到我们自己理论结合实际一次了。ps:进入正文前先说一点个人感受,之前看淘宝的ppt感觉都懂了,等到自己出解决方案的时候发现还是有很多想不到的地方其实都没懂,再次验证了“细节是魔鬼”的理论。并且一个人的能力有限,只有大家一起讨论才能想的更周全,更细致。好了,闲话少说,下面进入正文。 一、转载 2014-05-14 09:44:21 · 1978 阅读 · 1 评论 -
MySQL优化原则
数据库已成为互联网应用必不可少的底层依赖,其中MySQL作为开源数据库得到了更加广泛的应用。最近一直专注于项目工程的开发,对开发过程中使用到的一些关于数据库的优化原则进行了总结,希望能够帮助更多的应用开发人员更好的使用MySQL数据库。 MySQL的优化主要包括三个方面,首先是SQL语句的优化,其次是表结构的优化,这里主要指索引的优化,最后是服务器配置的优化。转载 2014-05-20 10:27:13 · 1742 阅读 · 0 评论 -
安装完 MySQL 后必须调整的 10 项配置
当我们被人雇来监测MySQL性能时,人们希望我们能够检视一下MySQL配置然后给出一些提高建议。许多人在事后都非常惊讶,因为我们建议他们仅仅改动几个设置,即使是这里有好几百个配置项。这篇文章的目的在于给你一份非常重要的配置项清单。我们曾在几年前在博客里给出了这样的建议,但是MySQL的世界变化实在太快了!转载 2014-05-13 09:36:16 · 1018 阅读 · 0 评论 -
利用硬链接和truncate降低drop table对线上环境的影响
这篇文章可以做为《》这篇文章的续篇和原理篇转载 2014-05-15 10:17:52 · 1694 阅读 · 0 评论 -
MySQL之thread cache
最近突然对MySQL的连接非常感兴趣,从status根据thread关键字可以查出如下是个状态show global status like 'thread%';+-------------------+-------+| Variable_name | Value |+-------------------+-------+| Threads_cached |转载 2014-05-09 11:11:55 · 6439 阅读 · 0 评论 -
InnoDB 主键的选择:自增ID & 业务ID
这篇文章是我从淘宝的一个PPT文档中整理的,就不好意思的定为原创吧,截图也挺麻烦的,呵呵CREATE TABLE `a` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `message_id` int(11) NOT NULL, `user_id` int(11) NOT NULL, `msg` varch原创 2013-11-13 11:09:16 · 3664 阅读 · 0 评论 -
Cobar的架构与实践
Cobar是提供分布式数据库服务的中间件,是阿里巴巴B2B前台应用访问数据库的统一入口。本文讲述的就是Cobar的架构演变与应用实践。2008年,阿里巴巴B2B成立了平台技术部,为各个业务部门的产品提供底层的基础平台。这些平台涵盖Web框架、消息通信、分布式服务、数据库中间件等多个领域的产品。它们有的源于各个产品线在长期开发过程中沉淀出来的公共框架和系统,有的源于对现有产品和运维过程中新需转载 2013-11-13 10:40:00 · 9028 阅读 · 5 评论 -
MySQL分区表(总结)
分区表是一种粗粒度,简易的索引策略,适用于大数据的过滤场景.最适合的场景是,没有合适的索引时,对其中几个分区表进行全表扫描.或者只有一个分区表和索引是热点,而且这个分区和索引能够全部存储在内存中.限制单表分区数不要超过150个,并且注意某些导致无法做分区过滤的细节,分区表对于单条记录的查询没有优势,需要注意这类查询的性能.分区表语法分区表分为RANGE,LIST,HASH,KEY四种类原创 2013-11-18 10:25:19 · 22907 阅读 · 3 评论 -
MySQL5.5半同步复制实现原理
在semi-sync replication中,master等待binlog被成功写入到至少一个slave的relay log之后才会继续执行commit,否则会出现等待。当超过预定的等待时间之后,semi-syncreplication会被禁用,切换回异步再提交。Semi-sync replication在一定程度上保证提交的事务至少有一个已经传到slave上了。google提出转载 2013-12-06 09:55:13 · 3826 阅读 · 1 评论 -
基于MySQL的高可用可扩展架构探讨
随着信息量飞涨,信息的存储成为了这个时代至关重要的一项技术。如何来保证数据存储技术能够适应信息量的增长速度和我们对信息的高度依赖,成为一个非常重要的课题。本文将从数据库架构的层面,通过以开源的数据存储软件来构建分布式数据层的思路,期望实现一个低成本的高可用可扩展的数据层架构。传统数据库架构纵观各传统商业数据库软件,多以集中式架构为主,鲜有以分布式为设计理念的架构。这些传统数转载 2013-12-06 09:58:47 · 1724 阅读 · 0 评论 -
Q4M使用手册
Q4M (queue for mysql) 是开源的实现队列功能的工作于MySQL5.1版本下的存储引擎,目前最高版本仅支持mysql 5.1版本。一、概述1. Q4M模型是基于MySQL存储引擎的轻量级消息队列,通过扩展SQL语法来操作消息队列,使用简单,容易上手,开发人员基本不用再进行学习和熟悉。Q4M支持多发送方,多接收方,接收方相互不影响,支转载 2013-11-29 15:45:53 · 2120 阅读 · 0 评论 -
网易云数据库架构设计实践(摘要摘录)
完整文章在《程序员》第2013.11期第108页云计算并不是天生为数据库设计的,在云端使用关系型数据库面临着软硬件可靠性差、可预测性低和控制能力弱等诸多挑战,网易云数据库在架构设计中充分考虑了上述因素影响,并通过相应的技术手段解决了这些问题。架构设计图1为网易云数据库的总体架构图,下面将详细介绍各个模块扮演的角色和主要功能。管理服务器:整个系统的调度控制模块,负责实转载 2013-11-23 14:48:31 · 3361 阅读 · 0 评论 -
秒杀场景下MySQL的低效原因和改进
在「中国数据库技术大会」上,淘宝分享了「秒杀场景下MySQL的低效」,详细分析了秒杀的技术难点及改进措施,简而言之,主要就是在高并发事务请求的情况下,数据库性能由于死锁检测等因素直线下降,在这种场景下,单纯的关闭死锁检测虽然可以提升一定的性能,但这顶多是治标而已,如何治本?淘宝给出来两个改进方法:请求排队:如果请求一股脑的涌入数据库,势必会由于争抢资源造成性能下降,通过排队,让请求从混沌到原创 2013-11-12 16:44:54 · 7495 阅读 · 0 评论 -
使用MySQL构建一个队列表
使用MySQL来实现队列表是一个取巧的做法,我们看到很多系统在高流量、高并发的情况下表现并不好。典型的模式是一个表包含多种类型的记录:未处理记录、已处理记录、正在处理记录等。一个或者多个消费者线程在表中查找未处理的记录,然后声称正在处理,当处理完成后,再将记录更新成已处理状态。一般的,例如邮件发送、多命令处理、评论修改等会使用类似模式。通常有两个原因使得大家认为这样的处理方式并不适合。原创 2013-12-01 18:58:01 · 5921 阅读 · 0 评论 -
MySQL性能优化的最佳20+条经验
今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显。关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情。当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能。这里,我们不会讲过多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库。希望下面的这些优化技巧对你有用。1. 为转载 2013-12-07 09:36:09 · 2506 阅读 · 0 评论 -
MySQL的LIMIT与分页优化(续)
分页的时候,另一个常用的技巧是在LIMIT语句中加上SQL_CALC_FOUNT_ROWS提示(hint),这样就可以获得去掉LIMIT以后满足条件的行数,因此可以作为分页的总数。看起来,MySQL做了一些非常“高深”的优化,像是通过某种方法预测了总行数。但实际上,MySQL只有在扫描了所有满足条件的行以后,才会知道行数,所以加上这个提示以后,不管是否需要,MySQL都会扫描所有满足条件的行,然后再抛弃掉不需要的行,而不是在满足LIMIT的行数后就终止扫描。所以该提示的代价可能非常高。一个更好的设计是将原创 2013-12-07 13:02:18 · 6612 阅读 · 0 评论 -
使用batch insert解决MySQL的insert吞吐量问题
最近使用了一个非常简单易用的方法解决了业务上的一个insert吞吐量的问题,在此总结一下。 首先我们明确一下,insert吞吐量其实并不是指的IPS(insert per second),而是指的RPS(effect rows per second)。其次我们再说一下batch insert,其实顾名思义,就是批量插入。这种优化思想是很基本的,MySQL中最出名的应用就是group c转载 2014-06-17 15:31:40 · 3517 阅读 · 0 评论 -
Cobar的使用与心得(持续更新)
关于淘宝Cobar中间件使用中一些问题总结,会在使用中不断完善该文档1、LOAD DATA LOCAL FILE ...不支持 mysql> load data local infile "/usr/jfy/tmp/scpcdr.txt" into table scpcdr fields TERMINATED by '|'; ERROR 1148 (42000): The原创 2013-11-05 20:05:53 · 4661 阅读 · 2 评论 -
MySQL闪回原理与实战
MySQL闪回原理与实战原文地址: https://github.com/danfengcao/binlog2sql/blob/master/example/mysql-flashback-priciple-and-practice.md https://github.com/danfengcao/binlog2sqlDBA或开发人员,有时会误删或者误更新数据,如果是线上环境并且影响较大,就需要转载 2017-02-14 09:29:31 · 625 阅读 · 0 评论 -
binlog2sql
binlog2sql原文地址:https://github.com/danfengcao/binlog2sql从MySQL binlog解析出你要的SQL。根据不同选项,你可以得到原始SQL、回滚SQL、去除主键的INSERT SQL等。用途数据快速回滚(闪回)主从切换后数据不一致的修复从binlog生成标准SQL,带来的衍生功能项目状态正常维护。应用于大众点评线上环境。线上环境的操作,请在转载 2017-02-14 09:26:18 · 2650 阅读 · 0 评论 -
mysql binlog in realtime
http://guweigang.com/blog/2013/11/18/mysql-binlog-in-realtime/众所周知,MySQL是最受欢迎的互联网数据库(没有之一)———————为开源而生。发展初期,很多公司都受益于其易用性和经济性。随着这些公司的成长,越来越多的公司投入到MySQL的开发中,因此MySQL的特性也越来越丰富,如:不同特性的存储引擎、Binlog转载 2016-06-23 14:58:44 · 890 阅读 · 0 评论 -
58同城数据库架构最佳实践
数据库的基本概念基本概念这一块,主要是让大家就一些数据库方面的概念达成一致。首先是“单库”,最初的时候数据库都是这么玩的,几乎所有的业务都有这样的一个库。接下来是“分片”,数据库的分片是解决数据量大的问题。如果数据量非常大,就要做水平切分,有一些数据库支持auto sharding。之前58同城也用过两年mongoDB,后来发现auto sharding功能转载 2016-05-10 13:10:02 · 2043 阅读 · 0 评论 -
SSD 下的 MySQL IO 优化
https://dbarobin.com/2015/08/29/mysql-optimization-under-ssd/一 目录一 目录二 背景三 SSD 特性四 基于 SSD 的数据库优化五 A 项目 MySQL 主从关系图六 程序切换之前调优6.1 修改系统 IO 调度算法6.2 修改 innodb_io_capacity = 40006.3转载 2016-04-06 13:38:41 · 6394 阅读 · 0 评论 -
微博MySQL优化之路
http://www.cnblogs.com/billyxp/p/5257647.html微博MySQL优化之路数据库是所有架构中不可缺少的一环,一旦数据库出现性能问题,那对整个系统都回来带灾难性的后果。并且数据库一旦出现问题,由于数据库天生有状态(分主从)带数据(一般还不小),所以出问题之后的恢复时间一般不太可控,所以,对数据库的优化是需要我们花费很多精力去做的。转载 2016-04-06 13:12:15 · 1305 阅读 · 0 评论 -
xtrabackup新版详细说明
http://www.cnblogs.com/billyxp/p/5305676.html Percona Xtrabackup 2.4.1编译及软件依赖centos5,6 需要升级cmake至2.8.2版本以上,解决:安装cmake版本3.4.3测试通过centos5 gcc g++ 需要升级gcc至4.4以上上 ,解决:安装4.4.7测试通过转载 2016-04-06 13:10:18 · 5054 阅读 · 2 评论 -
mysql in 子查询 效率慢 优化
现在的CMS系统、博客系统、BBS等都喜欢使用标签tag作交叉链接,因此我也尝鲜用了下。但用了后发现我想查询某个tag的文章列表时速度很慢,达到5秒之久!百思不解(后来终于解决),我的表结构是下面这样的,文章只有690篇。文章表article(id,title,content)标签表tag(tid,tag_name)标签文章中间表article_tag(id,tag_id,arti转载 2015-06-01 16:30:43 · 3279 阅读 · 0 评论 -
MySQL5.6新特性之Index Condition Pushdown
一 概念介绍 Index Condition Pushdown (ICP)是MySQL 5.6 版本中的新特性,是一种在存储引擎层使用索引过滤数据的一种优化方式。a 当关闭ICP时,index 仅仅是data access 的一种访问方式,存储引擎通过索引回表获取的数据会传递到MySQL Server 层进行where条件过滤。b 当打开ICP时,如果部分where条件能使用转载 2015-06-01 11:32:09 · 1112 阅读 · 0 评论 -
MySQL5.7版本 Semisync Replication 增强
原文地址:http://blog.itpub.net/22664653/viewspace-1183057/一 前言前文 介绍了5.5/5.6 版本的MySQL semi sync 基础原理和配置,随着MySQL 5.7 的发布,新版本的MySQL修复了semi sync 的一些bug 并且增强了功能。支持发送binlog和接受ack的异转载 2015-06-01 11:00:10 · 1987 阅读 · 0 评论 -
MySQL 加锁处理分析
背景 MySQL/InnoDB的加锁分析,一直是一个比较困难的话题。我在工作过程中,经常会有同事咨询这方面的问题。同时,微博上也经常会收到MySQL锁相关的私信,让我帮助解决一些死锁的问题。本文,准备就MySQL/InnoDB的加锁问题,展开较为深入的分析与讨论,主要是介绍一种思路,运用此思路,拿到任何一条SQL语句,都能完整的分析出这条语句会加什么锁?会有什么样的使用风险转载 2015-04-02 11:20:57 · 925 阅读 · 0 评论 -
MYSQL Handler Socket插件(三)优势和缺陷阐述
HandlerSocket的优势和特点:1) 支持多种查询模式HandlerSocket目前支持索引查询(主键索引和非主键的普通索引均可),索引范围扫描,LIMIT子句,也即支持增加、删除、修改、查询完整功能,但还不支持无法使用任何索引的操作。另外支持execute_multi() 一次网络传输多个Query请求,节省网络传输时间。2) 处理大量并发连接Handle转载 2013-12-07 09:37:05 · 1417 阅读 · 0 评论 -
MYSQL Handler Socket插件(四)安装与使用
一、安装HandlerSocket-Plugin-for-MySQLhttps://github.com/ahiguti/HandlerSocket-Plugin-for-MySQL#cd HandlerSocket-Plugin-for-MySQL#sh ./autogen.sh#./configure --with-mysql-source=/home/jfy/soft/Percona-Server-5.5.18-rel23.0 --with-mysql-bindir=/usr/local/m原创 2014-11-24 15:09:00 · 1814 阅读 · 0 评论 -
MYSQL Handler Socket插件(二)性能测试
HandlerSocket Oprofile测试报告(MySQL通过SQL执行K/V查询的Oprofile信息)MySQL执行SQL语句,首先要经过SQL解析阶段,调用MYSQLparse() 和MYSQLlex() 进行语法和词法解析;然后进入查询优化阶段,调用make_join_statistics() 和JOIN::optimize() 获得统计信息和生成执行转载 2013-12-07 09:36:59 · 1740 阅读 · 0 评论 -
MYSQL Handler Socket插件(一)原理
HandlerSocket的应用场景:MySQL自身的局限性,很多站点都采用了MySQL+Memcached的经典架构,甚至一些网站放弃MySQL而采用NoSQL产品,比如Redis/MongoDB等。不可否认,在做一些简单查询(尤其是PK查询)的时候,很多NoSQL产品比MySQL要快很多,而且前台网站上的80%以上查询都是简洁的查询业务。MySQL通过HandlerSocket转载 2013-12-07 09:36:53 · 1939 阅读 · 0 评论 -
安装完 MySQL 后必须调整的 10 项配置
当我们被人雇来监测MySQL性能时,人们希望我们能够检视一下MySQL配置然后给出一些提高建议。许多人在事后都非常惊讶,因为我们建议他们仅仅改动几个设置,即使是这里有好几百个配置项。这篇文章的目的在于给你一份非常重要的配置项清单。我们曾在几年前在博客里给出了这样的建议,但是MySQL的世界变化实在太快了!写在开始前…即使是经验老道的人也会犯错,会引起很多麻烦。所以在盲目的运转载 2014-08-07 08:34:06 · 1233 阅读 · 0 评论 -
MySQL的LIMIT与分页优化
这样考虑的于是就有了下面四个优化的建议来提高性能1、首次查询的时候缓存结果。这样情况就变得简单了,无论是结果条目的数量,总共的页面数量,还是取出其中的部分条目。2、不显示总共有多少条目。Google搜索结果的分页显示就用了这个特性。很多时候你可能看了前几页,就够了。那么我可以这样,每次我都把结果限制在500条(这个数据越大 资源消耗越大)然后你每次查询的时候,都查询501条记录,这样,如果结果真有501个,那么我们就显示链接 “显示下500条记录”。3、不显示总页面数。只给出“下一页”的链接,如果有原创 2013-12-07 09:34:23 · 3812 阅读 · 0 评论 -
NoSQL to MySQL with Memcached
前些年,HandlerSocket的横空出世让人们眼前一亮,当时我还写了一篇文章介绍了其用法梗概,时至今日,由于种种原因,HandlerSocket并没有真正流行起来,不过庆幸的是MySQL官方受其启发,研发了基于InnoDB的Memcached插件,总算是在MySQL中延续了NoSQL的香火,以前单独架设Memcached服务器不仅浪费了内存,而且还必须自己维护数据的不一致问题,有了Memcac转载 2013-12-07 09:37:14 · 1414 阅读 · 0 评论 -
MySQL单机多实例方案
MySQL单机多实例方案,是指在一台物理的PC服务器上运行多个MySQL数据库实例,为什么要这样做?这样做的好处是什么?1.存储技术飞速发展,IO不再是瓶颈普通PC服务器的CPU与IO资源不均衡,因为磁盘的IO能力非常有限,为了满足应用的需要,往往需要配置大量的服务器,这样就造成CPU资源的大量浪费。但是,Flash存储技术的出现改变了这一切,单机的IO能力不再是瓶颈,可以在单机运转载 2013-11-14 10:06:42 · 1919 阅读 · 0 评论 -
MySQL主从复制延迟的监测及缓解
MySQL的主从复制有多种原因可以导致延迟,这个是公认的了,下面我们谈谈怎样监测复制的延迟,以及怎样尽量的解决延迟的问题。 延迟的监测Seconds_behind_master在SLAVE上执行SHOW SLAVE STATUS,监控Seconds_behind_master列值,备库Seconds_Behind_Master值是通过将服务器当前的时间戳(这里其实有个主从服务器时间原创 2013-11-10 13:46:33 · 7108 阅读 · 0 评论 -
relay fetch解决MySQL主从复制延迟
Mysql复制单线程的本质意味着从服务器效率的降低,即使从服务器有很多磁盘、cpu、和内存,也很容易落后于主服务器,因为从服务器的单线程只能有效的使用一个cpu和磁盘。 从服务器上的锁定也是一个问题,运行在从服务器上的另外的查询也会加锁并阻塞复制线程。复制是单线程,复制线程(sql_thread)除了等待也不能做别的事情。 为了解决这个问题,业界开发了一些补丁解决这类问题,一个思路原创 2013-11-10 13:56:30 · 2061 阅读 · 0 评论