位置: 编程技术 - 正文

MySQL常见的底层优化操作教程及相关建议(mysql底层是什么)

编辑:rootadmin

推荐整理分享MySQL常见的底层优化操作教程及相关建议(mysql底层是什么),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:mysql底层是b+树,mysql底层是什么,mysql底层是b+树,mysql底层是b+树,mysql底层是什么数据结构,mysql底层架构,mysql底层是什么数据结构,mysql底层实现原理,内容如对您有帮助,希望把文章链接给更多的朋友!

1、硬件层相关优化

1.1、CPU相关

在服务器的BIOS设置中,可调整下面的几个配置,目的是发挥CPU最大性能,或者避免经典的NUMA问题:

(1)、选择Performance Per Watt Optimized(DAPC)模式,发挥CPU最大性能,跑DB这种通常需要高运算量的服务就不要考虑节电了;(2)、关闭C1E和C States等选项,目的也是为了提升CPU效率;(3)、Memory Frequency(内存频率)选择Maximum Performance(最佳性能);

(4)、内存设置菜单中,启用Node Interleaving,避免NUMA问题;1.2、磁盘I/O相关

下面几个是按照IOPS性能提升的幅度排序,对于磁盘I/O可优化的一些措施:

(1)、使用SSD或者PCIe SSD设备,至少获得数百倍甚至万倍的IOPS提升;(2)、购置阵列卡同时配备CACHE及BBU模块,可明显提升IOPS(主要是指机械盘,SSD或PCIe SSD除外。同时需要定期检查CACHE及BBU模块的健康状况,确保意外时不至于丢失数据);

(3)、有阵列卡时,设置阵列写策略为WB,甚至FORCE WB(若有双电保护,或对数据安全性要求不是特别高的话),严禁使用WT策略。并且闭阵列预读策略,基本上是鸡肋,用处不大;

(4)、尽可能选用RAID-,而非RAID-5;

(5)、使用机械盘的话,尽可能选择高转速的,例如选用KRPM,而不是7.2KRPM的盘,不差几个钱的;2、系统层相关优化

2.1、文件系统层优化

在文件系统层,下面几个措施可明显提升IOPS性能:

(1)、使用deadline/noop这两种I/O调度器,千万别用cfq(它不适合跑DB类服务);(2)、使用xfs文件系统,千万别用ext3;ext4勉强可用,但业务量很大的话,则一定要用xfs;

(3)、文件系统mount参数中增加:noatime, nodiratime, nobarrier几个选项(nobarrier是xfs文件系统特有的);2.2、其他内核参数优化

针对关键内核参数设定合适的值,目的是为了减少swap的倾向,并且让内存和磁盘I/O不会出现大幅波动,导致瞬间波峰负载:

(1)、将vm.swappiness设置为5-左右即可,甚至设置为0(RHEL 7以上则慎重设置为0,除非你允许OOM kill发生),以降低使用SWAP的机会;(2)、将vm.dirty_background_ratio设置为5-,将vm.dirty_ratio设置为它的两倍左右,以确保能持续将脏数据刷新到磁盘,避免瞬间I/O写,产生严重等待(和MySQL中的innodb_max_dirty_pages_pct类似);

(3)、将net.ipv4.tcp_tw_recycle、net.ipv4.tcp_tw_reuse都设置为1,减少TIME_WAIT,提高TCP效率;

(4)、至于网传的read_ahead_kb、nr_requests这两个参数,我经过测试后,发现对读写混合为主的OLTP环境影响并不大(应该是对读敏感的场景更有效果),不过没准是我测试方法有问题,可自行斟酌是否调整;

3、MySQL层相关优化

3.1、关于版本选择

官方版本我们称为ORACLE MySQL,这个没什么好说的,相信绝大多数人会选择它。

我个人强烈建议选择Percona分支版本,它是一个相对比较成熟的、优秀的MySQL分支版本,在性能提升、可靠性、管理型方面做了不少改善。它和官方ORACLE MySQL版本基本完全兼容,并且性能大约有%以上的提升,因此我优先推荐它,我自己也从年一直以它为主。

另一个重要的分支版本是MariaDB,说MariaDB是分支版本其实已经不太合适了,因为它的目标是取代ORACLE MySQL。它主要在原来的MySQL Server层做了大量的源码级改进,也是一个非常可靠的、优秀的分支版本。但也由此产生了以GTID为代表的和官方版本无法兼容的新特性(MySQL 5.7开始,也支持GTID模式在线动态开启或关闭了),也考虑到绝大多数人还是会跟着官方版本走,因此没优先推荐MariaDB。

3.2、关于最重要的参数选项调整建议

建议调整下面几个关键参数以获得较好的性能:(1)、选择Percona或MariaDB版本的话,强烈建议启用thread pool特性,可使得在高并发的情况下,性能不会发生大幅下降。此外,还有extra_port功能,非常实用, 关键时刻能救命的。还有另外一个重要特色是 QUERY_RESPONSE_TIME 功能,也能使我们对整体的SQL响应时间分布有直观感受;

(2)、设置default-storage-engine=InnoDB,也就是默认采用InnoDB引擎,强烈建议不要再使用MyISAM引擎了,InnoDB引擎绝对可以满足%以上的业务场景;

(3)、调整innodb_buffer_pool_size大小,如果是单实例且绝大多数是InnoDB引擎表的话,可考虑设置为物理内存的% ~ %左右;

MySQL常见的底层优化操作教程及相关建议(mysql底层是什么)

(4)、根据实际需要设置innodb_flush_log_at_trx_commit、sync_binlog的值。如果要求数据不能丢失,那么两个都设为1。如果允许丢失一点数据,则可分别设为2和。而如果完全不用care数据是否丢失的话(例如在slave上,反正大不了重做一次),则可都设为0。这三种设置值导致数据库的性能受到影响程度分别是:高、中、低,也就是第一个会另数据库最慢,最后一个则相反;

(5)、设置innodb_file_per_table = 1,使用独立表空间,我实在是想不出来用共享表空间有什么好处了;

(6)、设置innodb_data_file_path = ibdata1:1G:autoextend,千万不要用默认的M,否则在有高并发事务时,会受到不小的影响;

(7)、设置innodb_log_file_size=M,设置innodb_log_files_in_group=2,基本可满足%以上的场景;

(8)、设置long_query_time = 1,而在5.5版本以上,已经可以设置为小于1了,建议设置为0.(毫秒),记录那些执行较慢的SQL,用于后续的分析排查;

(9)、根据业务实际需要,适当调整max_connection(最大连接数)、max_connection_error(最大错误数,建议设置为万以上,而open_files_limit、innodb_open_files、table_open_cache、table_definition_cache这几个参数则可设为约倍于max_connection的大小;

()、常见的误区是把tmp_table_size和max_heap_table_size设置的比较大,曾经见过设置为1G的,这2个选项是每个连接会话都会分配的,因此不要设置过大,否则容易导致OOM发生;其他的一些连接会话级选项例如:sort_buffer_size、join_buffer_size、read_buffer_size、read_rnd_buffer_size等,也需要注意不能设置过大;

()、由于已经建议不再使用MyISAM引擎了,因此可以把key_buffer_size设置为M左右,并且强烈建议关闭query cache功能;3.3、关于Schema设计规范及SQL使用建议

下面列举了几个常见有助于提升MySQL效率的Schema设计规范及SQL使用建议:

(1)、所有的InnoDB表都设计一个无业务用途的自增列做主键,对于绝大多数场景都是如此,真正纯只读用InnoDB表的并不多,真如此的话还不如用TokuDB来得划算;

(2)、字段长度满足需求前提下,尽可能选择长度小的。此外,字段属性尽量都加上NOT NULL约束,可一定程度提高性能;

(3)、尽可能不使用TEXT/BLOB类型,确实需要的话,建议拆分到子表中,不要和主表放在一起,避免SELECT * 的时候读性能太差。

(4)、读取数据时,只选取所需要的列,不要每次都SELECT *,避免产生严重的随机读问题,尤其是读到一些TEXT/BLOB列;

(5)、对一个VARCHAR(N)列创建索引时,通常取其%(甚至更小)左右长度创建前缀索引就足以满足%以上的查询需求了,没必要创建整列的全长度索引;

(6)、通常情况下,子查询的性能比较差,建议改造成JOIN写法;

(7)、多表联接查询时,关联字段类型尽量一致,并且都要有索引;

(8)、多表连接查询时,把结果集小的表(注意,这里是指过滤后的结果集,不一定是全表数据量小的)作为驱动表;

(9)、多表联接并且有排序时,排序字段必须是驱动表里的,否则排序列无法用到索引;

()、多用复合索引,少用多个独立索引,尤其是一些基数(Cardinality)太小(比如说,该列的唯一值总数少于)的列就不要创建独立索引了;

()、类似分页功能的SQL,建议先用主键关联,然后返回结果集,效率会高很多;3.4、其他建议

关于MySQL的管理维护的其他建议有:

(1)、通常地,单表物理大小不超过GB,单表行数不超过1亿条,行平均长度不超过8KB,如果机器性能足够,这些数据量MySQL是完全能处理的过来的,不用担心性能问题,这么建议主要是考虑ONLINE DDL的代价较高;

(2)、不用太担心mysqld进程占用太多内存,只要不发生OOM kill和用到大量的SWAP都还好;

(3)、在以往,单机上跑多实例的目的是能最大化利用计算资源,如果单实例已经能耗尽大部分计算资源的话,就没必要再跑多实例了;

(4)、定期使用pt-duplicate-key-checker检查并删除重复的索引。定期使用pt-index-usage工具检查并删除使用频率很低的索引;

(5)、定期采集slow query log,用pt-query-digest工具进行分析,可结合Anemometer系统进行slow query管理以便分析slow query并进行后续优化工作;

(6)、可使用pt-kill杀掉超长时间的SQL请求,Percona版本中有个选项 innodb_kill_idle_transaction 也可实现该功能;

(7)、使用pt-online-schema-change来完成大表的ONLINE DDL需求;

(8)、定期使用pt-table-checksum、pt-table-sync来检查并修复mysql主从复制的数据差异;

MySQL中Nested-Loop Join算法小结 不知不觉的玩了两年多的MySQL,发现很多人都说MySQL对比Oracle来说,优化器做的比较差,其实某种程度上来说确实是这样,但是毕竟MySQL才到5.7版本,Oracl

Windows7下如何在命令行使用MySQL 我在Win7下安装的MySQL版本是mysql-5.0.-win、在Win7环境下安装MySQL,关于安装方法可以参考文章:Win7系统安装MySQL5.5.图解教程、win7安装MySql2、将MySQL的

简单谈谈MySQL的loose index scan 众所周知,InnoDB采用IOT(indexorganizationtable)即所谓的索引组织表,而叶子节点也就存放了所有的数据,这就意味着,数据总是按照某种顺序存储的。所

标签: mysql底层是什么

本文链接地址:https://www.jiuchutong.com/biancheng/312421.html 转载请保留说明!

上一篇:使用mysqldump对MySQL的数据进行备份的操作教程(mysqldump -s)

下一篇:MySQL中Nested-Loop Join算法小结

  • 研发销售型企业
  • 公司申报个税流程
  • 延期缴纳税款是纳税争议吗
  • 2023增值税最新税率
  • 普通发票可以抵税点吗
  • 工程 开办费
  • 小规模申请自开专票
  • 租地建厂房合同
  • 城市生活垃圾费是业主出还是物业出
  • 建筑业一般计税税率
  • 企业支付投资者股利属于什么引起的财务活动
  • 会计凭证传递的终点是
  • 年化收益率和年利率的区别的例子
  • 应付职工薪酬账务处理例题
  • 股权转让个人交的印花税可以入账吗
  • 投资理财产品的优势和劣势
  • 广告公司广告费会计分录
  • 什么税不计入税金及附加科目
  • 物业公司小规模纳税人如何报税
  • 案例分析个人心得体会
  • 案例分析正当防卫
  • 我的初级备考日记--你都没坚持,还谈什么未来
  • 小规模纳税人所得税申报表如何填写
  • 员工租赁宿舍开几个点发票
  • 免抵退免抵额何时申报附加税?
  • 个体户对私账户
  • 什么是汇兑损益,汇兑损益产生的原因有哪些?(10分)
  • realpopup.exe - realpopup是什么进程
  • 公司赞助商
  • jquery向下滑动元素
  • 出口退税退的是啥
  • 转让土地使用权的条件是什么
  • 手机忘记密码怎么解开锁华为
  • input输入框限制输入数字范围
  • Joomla调用系统自带编辑器的实现方法
  • 无形资产属于哪一类
  • WP Smart Preloader 为你的WordPress添加预加载动画
  • 自费出版违法吗
  • 现金流量表的填列方法
  • 其他收益结转到什么账户
  • 接待客户的住宿费计入什么科目
  • 个税手续费返还计入哪个科目
  • 个税申报数据有误
  • 营改增后建筑企业如何正确开具发票
  • 购买材料增值税税率
  • 车辆维修费如何赔偿
  • 税金及附加需不需要计提
  • 专项应付款和政府补助的区别
  • 广告牌制作计入什么科目
  • 残保金缴纳计算方法2021
  • 其他税后扣减
  • 负库存金额
  • 财务建账应关注哪些内容
  • 房地产开发企业资质管理规定
  • 发票过账是什么意思
  • sql server 错误
  • MySQL删除重复数据只保留一条
  • 怎么在电脑上设置快捷图标
  • 苹果mac录制屏幕
  • linux dd 系统
  • 彻底关闭windows10自动更新工具
  • js 正则验证
  • jquery插件是干什么的
  • linux中查看命令怎么使用
  • CCProgressTimer 进度条动画在cocos2dx+lua中的使用
  • linux中crontab的用法
  • unity开发手游
  • python sha256加密解密
  • jQuery继承extend用法详解
  • 安卓listview控件map的用法前面每行加图片
  • 保险是不是跟车走
  • 四川省地方税务局2017年1号公告
  • 财产转让所得适用税率
  • 浙江省工伤停工留薪期分类目录
  • 远程视频监控设备
  • 生育登记网上服务大厅山东
  • 国家管网集团下属企业
  • 新能源车需要缴纳购置税吗?
  • 办税服务厅是税收工作的
  • 2021年税务高雅春联带横批
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设