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

mysqlinnodb的学习(一)_MySQL

mysqlinnodb的学习(一)
bitsCN.com


mysql innodb的学习(一)

mysql下最常用的两个存储引擎一个是Myisam,另一个是innodb,关于这两个引擎的区别和比较,网上有好多,这里就不再说明了,这里主要讲一下innodb的各个参数的作用和对性能的影响。其中对性能影响最明显的两个参数innodbbufferpoolsize和innodblogfilesize。

innodbbufferpool_size 这个参数可以说是对innodb的性能有着决定性的作用,缓冲区的大小决定了innodb性能的好坏。缓冲区不仅缓存innodb的索引,还存储了数据、自适应哈希索引(adaptive hash index)、插入缓存、锁、以及其他的一些内部结构。这个值的大小怎么设置呢,设置多大才合适呢,mysql的配置文件中给出的建议是设置为服务器内存的50%-80%,但是在32位的机器中,mysql的手册中有一个警告:

在32位GNU/Linux x86上,你必须要小心不要设置过高的内存用量。glibc可能允许进程堆积在线程堆栈上发展,它会造成你的服务器崩溃。如果下列表达式的值接近或者超过2GB,系统会面临危机:innodbbufferpool_size + keybuffersize(myisam使用的缓冲区)+ maxconnections*(sortbuffersize+readbuffersize+binlogcachesize)+ maxconnections*2MB

innodb使用这个缓冲区来延缓write,所以可以将多个write合并,然后顺序的写到disk中,这样可以将原来的随机写改进到顺序写,提高数据写的效率。 innodb对写操作的执行过程为先将写操作的改动写到buffer pool中,然后记录操作日志到log file(日志文件的配置参数为innodblogfile_size)中,然后就返回结果到客户端,这样就提高了innodb的响应速度(不需要等写到磁盘后再返回,在内存中的操作会比在磁盘上的操作快),而在buffer pool改动过的记录就是“脏数据(脏页)dirty page”。 那接下来问题就来了:

innodb是怎么把buffer pool中的“脏页”写到磁盘的呢?

innodb的缓冲区中能保存多少dirty page呢?

对于第一个问题,innodb使用一个后台的线程来刷新(flush)数据到磁盘(将多个写操作合并执行,可以将随机写改为顺序写来提高效率) 对于第二个问题,innodb中使用参数innodbmaxdirtypagespct来控制dirty page在buffer pool中的最大比例,当达到这个值时,innodb就会使用flush thread来将数据写到磁盘(如何写将在后续中讨论),当没有达到这个值时,innodb的flush线程会在buffer pool中没有足够的空间来写新数据时执行flush的操作,这个行为称为“懒执行(lazy)”,就是innodb可以延迟flush操作。 延迟执行不代表就不执行了,因为如果在服务器压力比较大的情况下(有大量的并发写),buffer pool中就会有很多的dirty page,那么就会很容易达到innodbmaxdirtypagespct,那么flush thread就会要尽量快将buffer pool中dirty page刷新到磁盘中,以降低脏页在缓冲区中的比例。

虽然buffer pool对innodb的性能有很大影响,但是也不是越大越好,越大的缓冲区对mysql服务的关闭和启动就要执行越长的时间。比如缓冲区中有很多的“脏页”,innodb要花相对长的时间来将脏页刷新到磁盘中,只有等所有的脏页都刷新后,mysql才会关闭。当然也可以使用快速关闭,但是启动的时候,mysql要花相对长的时间来恢复,所以对于关闭和启动这整个流程来说,大的缓冲区还是对这整个流程的时间来说要相对长。 我们可以在mysql运行过程中动态的调整innodbmaxdirtypagespct值,动态的设置相对小一些,可以是flush线程尽快的将脏页刷新到磁盘,后再执行关闭的操作,这样可以从某一方面来说缩短关闭的时间。我们可以通过SHOW INNODB STATUS命令来查看当前脏页的数据innodbbufferpoolpagesdirty。

如果我们有一个大的缓冲区和一个慢的磁盘,那么服务器重启时就会要花一个相对长的时间来预热,这个对于mysql的整体性能也会有一定的影响。

bitsCN.com
推荐阅读
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 搭建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限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
author-avatar
安琪儿
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有