如何利用工具,迅猛定位低效SQL? | 1分钟系列
《两个工具分析SQL死锁》《SQL空值带来的大坑》两个案例分析,展现了MySQL性能分析工具explain的强大。《同一个SQL语句,为啥性能差异咋就这么大呢?》详细叙述了explain结果中最重要的type字段(连接类型)的含义。其实,explain结果中还有一个Extra字段,对分析与优化SQL
同一个SQL语句,为啥性能差异咋就这么大呢?(1分钟系列)
《数据库允许空值,往往是悲剧的开始》一文通过explain来分析SQL的执行计划,来分析null对索引命中情况的影响,有不少朋友留言,问explain结果中的type字段,ref,ALL等不一样的值究竟是什么含义。今天花1分钟简单说下,常见的type结果及代表的含义,并且通过同一个SQL语句的性能差
数据库允许空值(null),往往是悲剧的开始(1分钟系列)
数据库字段允许空值,会遇到一些问题,此处包含的一些知识点,和大家聊一聊。数据准备:createtableuser(idint,namevarchar(20),index(id))engine=innodb;insertintouservalues(1,'shenjian');insertintous
两类非常隐蔽的全表扫描,不能命中索引(一分钟系列)
《MySQL死锁分析的两个工具》中,举了一个强制类型转换导致死锁的例子,有朋友询问是不是类型转换都不能命中索引,花1分钟细说一下。第一类:“列类型”与“where值类型”不符,不能命中索引,会导致全表扫描(fulltablescan)。数据准备:createtablet1(cellvarchar(3
两个小工具,MySQL死锁分析,新技能又Get!!!
数据库死锁,是最难调试与追踪的。场景如下:同一个表,事务内先插入一条记录,再更新这条记录,并发时会死锁。并且能够复现。可以通过什么工具模拟并发事务,查看信息,解决问题呢?这是今天要分享的内容。一、前置准备setsessiontransactionisolationlevelrepeatablerea
数据库架构设计中,最重要的“基概”!!!
所有概念均以“用户中心”举例。画外音:这是一个提供用户注册、登录、信息查询与修改的常见业务。一、单库架构单库架构,是业务初期最常见的数据库架构。user-service:用户中心服务,对调用者提供友好的RPC接口user-db:一个库进行数据存储二、分组架构数据库分组架构,即最常见的一主多从,主从同
“搜索”的原理,架构,实现,实践,面试不用再怕了(值得收藏)!!!
可能99%%%%的同学不做搜索引擎,但99%%%%的同学一定实现过检索功能。搜索,检索,这里面到底包含哪些技术的东西,希望本文能够给大家一些启示。全网搜索引擎架构与流程如何?全网搜索引擎的宏观架构如上图,核心子系统主要分为三部分(粉色部分):(1)spider爬虫系统;(2)search&i
一次彻底搞透协议设计(没做过通讯底层也没有关系)!
系统设计,协议先行。大部分人不了解协议的设计细节,更多使用已有协议进行应用层设计,例如:(1)使用HTTP,设计get/post/cookie参数,以及json包格式;(2)使用dubbo,而不用去深究内部的二进制包头包体细节;无论如何,了解协议设计的原则,对深入理解系统通信非常有帮助。一、协议的分
离不开的微服务架构,脱不开的RPC细节(值得收藏)!!!
上一篇《微服务架构,多“微”才合适?》聊了微服务的粒度。微服务离不开RPC框架,RPC框架的原理、实践及细节,是本篇要分享的内容。服务化有什么好处?服务化的一个好处就是,不限定服务的提供方使用什么技术选型,能够实现大公司跨团队的技术解耦,如下图所示:服务A:欧洲团队维护,技术背景是Java服务B:美
memcache内核,一文搞定!面试再也不怕了!!!(值得收藏)
memcache是互联网分层架构中,使用最多的的KV缓存。面试的过程中,memcache相关的问题几乎是必问的,关于memcache的面试提问,你能回答到哪一个层次呢?画外音:很可能关乎,你拿到offer的薪酬档位。第一类问题:知道不知道这一类问题,考察用没用过,知不知道,相对比较好回答。关于mem
批量删除数据,常见的大坑!!!
行数据批量delete时,InnoDB如何处理自增ID,是一个潜在的大坑。整个实验步骤如上图:第一步:建表,设定自增列;第二步:指定id=1插入,锚定第一行是id是1;第三步:不指定id,依赖自增机制,插入3行;画外音:此时id应该变为2,3,4了?第四步:delete删除所有记录;画外音:坑就容易
事务已提交,数据却丢了,赶紧检查下这个配置!!! | 数据库系列
为什么要有redolog?事务提交后,必须将事务对数据页的修改刷(fsync)到磁盘上,才能保证事务的ACID特性。这个刷盘,是一个随机写,随机写性能较低,如果每次事务提交都刷盘,会极大影响数据库的性能。随机写性能差,有什么优化方法呢?架构设计中有两个常见的优化方法:(1)先写日志(writelog
InnoDB到底支不支持哈希索引,为啥不同的人说的不一样?
继续回答水友提问(最近问MySQL的多):沈老师,我在网上看到不同的资料,有的说InnoDB支持哈希索引,有的说不支持,到底哪个是正确的呢?对于InnoDB的哈希索引,确切的应该这么说:(1)InnoDB用户无法手动创建哈希索引,这一层上说,InnoDB确实不支持哈希索引;(2)InnoDB会自调优
double write buffer,你居然没听过?
MySQL采用buffer机制,避免每次读写进行磁盘IO,提升效率:《缓冲池(bufferpool)》《写缓冲(changebuffer)》《日志缓冲(logbuffer)》MySQL的buffer一页的大小是16K,文件系统一页的大小是4K,也就是说,MySQL将buffer中一页数据刷入磁盘,要
缓冲池(buffer pool),这次彻底懂了!!!
应用系统分层架构,为了加速数据访问,会把最常访问的数据,放在缓存(cache)里,避免每次都去访问数据库。操作系统,会有缓冲池(bufferpool)机制,避免每次访问磁盘,以加速数据的访问。MySQL作为一个存储系统,同样具有缓冲池(bufferpool)机制,以避免每次查询数据都进行磁盘IO。今
写缓冲(change buffer),这次彻底懂了!!!
上篇《缓冲池(bufferpool),彻底懂了!》介绍了InnoDB缓冲池的工作原理。简单回顾一下:(1)MySQL数据存储包含内存与磁盘两个部分;(2)内存缓冲池(bufferpool)以页为单位,缓存最热的数据页(datapage)与索引页(indexpage);(3)InnoDB以变种LRU算
InnoDB架构,一幅图秒懂!
网上写MySQL架构的文章比较多,写InnoDB架构的文章比较少,今天简单说说InnoDB架构。画外音:一分钟,一幅图,秒懂。MySQL简要架构是怎么样的?MySQL整体分为三层:(1)客户端,是各种编程语言的connector;(2)MySQL服务,内部包含各种组件,实现各种功能;(3)文件系统,