热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

资深数据库工程师点评MySQL5.5的"罪与罚"_MySQL

作者简介BaronSchwartzBaronSchwartz是一名软件工程师,他住在弗吉尼亚州的Charlottesville,在网上用的名字是Xaprb,这是他名字的第一部分按QWERTY键盘的顺序打在Dvorak键盘上时显示出来的名字。当
作者简介

Baron Schwartz

Baron Schwartz

Baron Schwartz 是一名软件工程师,他住在弗吉尼亚州的Charlottesville,在网上用的名字是Xaprb,这是他名字的第一部分按QWERTY键盘的顺序打在Dvorak键盘上时显示出来的名字。当他不忙于解决有趣的编程挑战时,Baron就会和他的妻子Lynn、狗Carbon一起享受闲暇时光。他的关于软件工程的博客地址是http://www.xaprb.com/blog。其著作《High Performance MySQL》曾荣获2009年Jolt图书大奖。

Baron Schwartz著作

想查看本书完整中文版,请链接:http://book.bitscn.com/art/201001/180988.htm

最近一段时间我很少在博客文章中讨论MySQL的功能改变。不过近几年以来MySQL和InnoDB工程师确实一直在进行着大量的工作,现在随着MySQL 5.5版的发布,他们的工作成果得以向人们展示,因此现在我们有必要对他们表示祝贺和感激,同时也有必要谈谈我对该版本的看法。

在近日举行MySQL大会上,我曾经非常激动的等待MySQL 5.5的到来,不过事实证明我对其有些高估。当然,MySQL 5.5中值得谈论的地方很多,InnoDB和MySQL团队也发表了多篇相关博客文章。以下是我对MySQL 5.5善恶丑的个人意见。

选择InnoDB作为默认存储引擎

最初看到这一点时,我并没有对其太在意。资深用户能够以各种方式来实现这一点。但是MySQL专家摩根·托克(Morgan Tocker)表示,这实际上是一个重大改变。它将引发MySQL使用方式的巨变。过去用户通常是最初使用MyISAM存储引擎,然后学习转向数据管理功能更强大的InnoDB;现在是从一开始就使用更高级和更复杂的存储引擎。我们将看到更多的人开始学习了解InnoDB,而知道MyISAM引擎的人则会减少很多。人们讨论的话题不再是“为什么我要从MyISAM转向InnoDB?”而是“我听说还有一个MyISAM引擎,什么情况下我应该试用它?”

对MySQL来说,这是一个非常明智的举动。

InnoDB完善

这是一个复杂的话题。某些改变非常不错。某些改变则看上去很像是XtraDB功能的改良实现,当然XtraDB同样也是有个优秀的存储引擎。

在以前讨论XtraDB的文章中,我提到了还原时间和独立清理线程的改进,以及支持多重回滚区域的改变。这些概念已经被XtraDB用户证明了在真实世界中的效果,我希望InnoDB进行了大量工作来实施这些概念。InnoDB的还原功能看上去非常不错,尽管目前还不清楚它是否比XtraDB的相应功能更快速。通过实现这些改进,InnoDB实现了一个巨大的飞跃。

对于多缓冲池(multiple buffer pools)功能,我并不感到十分激动。该功能也是无奈之举,因为目前没有一个最佳方案来解决这个难题。缓冲池本身已经非常难于管理(运行时无法改变大小,以及不能对其索引等)”,新版MySQL数据库在这一方面看似也并无多大改进。至于所谓的真正提升内在架构,就像一个零和(zero-sum)游戏而已,仅仅只是提高了性能,我认为这不是一个符合未来考验(future-proof)的狭隘式优化。我认为将来这种方案将会发生变化。除非缓冲池的其它问题得以解决,未来对其进行的任何增强都将可能带来诸如存储残片的问题。当然,只是一味批评而未提出任何建设性意见,不会对它有任何帮助,但是我知道我的所有建议缺乏足够的证据。

剥离互斥锁是一件非常复杂的工作,我目前对此还没有什么看法。基准点不错,但现实世界往往会发生意料之外的事情。因此我们应该看一下其真正的性能改变。我知道InnoDB在这方面做了大量工作,不过我认为Percona无需模仿InnoDB,不过前者可以静观后者该功能的表现,然后吸取其教训作出更好的改进。

同步I/O令我十分担忧;I/O不容易控制,这是一个复杂的变动。它是又一件令人难于甚至无法理解的事情。

我怀疑删除缓冲功能可能已经完全偏离轨道,它采取了与插入缓冲相同的方式。在写缓冲的时候,对缓冲机制的控制非常简陋。无法控制缓冲的大小,无法在后台卸载缓冲(XtraDB可以实现此点)。但是如果InnoDB解决此缺陷,也不是一件令人吃惊的事情,我认为这不是一件难于实现的事情。插入缓冲的操作有时是非常奇怪的,缺乏必要的控制,这将带来性能问题。从这一点上来说,即使最新版的InnoDB也与XtraDB有差距。

元数据信息库Performance Schema

元数据信息库Performance Schema从诞生的第一天起,就不曾获得过我的好感。它属于闭门造车的一个象牙塔项目,创建者缺乏实际工作经验。对于普通用户来说用处不大;对于MySQL和InnoDB开发者来说,它或许还有些用处,但也不是最佳解决方案。在那些介绍它的博客或技术文章中,都没有列出该功能的实际案例,原因是人们无法列举出证明它实际用途的好例子。我们只是看到一些泛泛之谈,诸如“它可以把问题追溯到相关文件和源代码行,能够让用户真正了解发生在后端的秘密。”

结束语

令我感到振奋的是,MySQL团队不仅继续大力进行服务器和InnoDB方面的开发研究,而且最近数年的辛勤工作最终转化为实际的产品功能。因此应该将更多的赞誉之词赠送给MySQL和InnoDB,并希望它们继续这种步伐,同时广纳谏言、不断改进。

推荐阅读
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • PHP设置MySQL字符集的方法及使用mysqli_set_charset函数
    本文介绍了PHP设置MySQL字符集的方法,详细介绍了使用mysqli_set_charset函数来规定与数据库服务器进行数据传送时要使用的字符集。通过示例代码演示了如何设置默认客户端字符集。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了如何找到并终止在8080端口上运行的进程的方法,通过使用终端命令lsof -i :8080可以获取在该端口上运行的所有进程的输出,并使用kill命令终止指定进程的运行。 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • 本文详细介绍了云服务器API接口的概念和作用,以及如何使用API接口管理云上资源和开发应用程序。通过创建实例API、调整实例配置API、关闭实例API和退还实例API等功能,可以实现云服务器的创建、配置修改和销毁等操作。对于想要学习云服务器API接口的人来说,本文提供了详细的入门指南和使用方法。如果想进一步了解相关知识或阅读更多相关文章,请关注编程笔记行业资讯频道。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 如何基于ggplot2构建相关系数矩阵热图以及一个友情故事
    本文介绍了如何在rstudio中安装ggplot2,并使用ggplot2构建相关系数矩阵热图。同时,通过一个友情故事,讲述了真爱难觅的故事背后的数据量化和皮尔逊相关系数的概念。故事中的小伙伴们在本科时参加各种考试,其中有些沉迷网络游戏,有些热爱体育,通过他们的故事,展示了不同兴趣和特长对学习和成绩的影响。 ... [详细]
author-avatar
手机用户2602923721
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有