MySQL优化调优有没有做过_MySQL 调优/优化的 100 个建议

MySQL是一个强大的开源数据库。随着MySQL上的应用越来越多,MySQL逐渐遇到了瓶颈。这里提供 101 条优化 MySQL 的建议。有些技巧适合特定的安装环境,但是思路是相通的。我已经将它们分成了几类以帮助你理解。MySQL监控MySQL服务器硬件和OS(操作系统)调优:1、有足够的物理内存,能将整个InnoDB文件加载到内存里 —— 如果访问的文件在内存里,而不是在磁盘上,InnoDB会快很多。2、全力避免 Swap 操作 — 交换(swapping)是从磁盘读取数据,所以会很慢。3、使用电池供电的RAM(Battery-Backed RAM)。4、使用一个高级磁盘阵列 — 最好是 RAID10 或者更高。5、避免使用RAID5 — 和校验需要确保完整性,开销很高。6、将你的操作系统和数据分开,不仅仅是逻辑上要分开,物理上也要分开 — 操作系统的读写开销会影响数据库的性能。7、将临时文件和复制日志与数据文件分开 — 后台的写操作影响数据库从磁盘文件的读写操作。8、更多的磁盘空间等于更高的速度。9、磁盘速度越快越好。10、SAS优于SATA。11、小磁盘的速度比大磁盘的更快,尤其是在 RAID 中。12、使用电池供电的缓存 RAID(Battery-Backed Cache RAID)控制器。13、避免使用软磁盘阵列。14. 考虑使用固态IO卡(不是磁盘)来作为数据分区 — 几乎对所有量级数据,这种卡能够支持 2 GBps 的写操作。15、在 Linux 系统上,设置 swappiness 的值为0 — 没有理由在数据库服务器上缓存文件,这种方式在Web服务器或桌面应用中用的更多。16、尽可能使用 noatime 和 nodirtime 来挂载文件系统 — 没有必要为每次访问来更新文件的修改时间。17、使用 XFS 文件系统 — 一个比ext3更快的、更小的文件系统,拥有更多的日志选项,同时,MySQL在ext3上存在双缓冲区的问题。18、优化你的 XFS 文件系统日志和缓冲区参数 – -为了获取最大的性能基准。19、在Linux系统中,使用 NOOP 或 DEADLINE IO 调度器 — CFQ 和 ANTICIPATORY 调度器已经被证明比 NOOP 和 DEADLINE 慢。20、使用 64 位操作系统 — 有更多的内存能用于寻址和 MySQL 使用。21、将不用的包和后台程序从服务器上删除 — 减少资源占用。22、将使用 MySQL 的 host 和 MySQL自身的 host 都配置在一个 host 文件中 — 这样没有 DNS 查找。23、永远不要强制杀死一个MySQL进程 — 你将损坏数据库,并运行备份。24、让你的服务器只服务于MySQL — 后台处理程序和其他服务会占用数据库的 CPU 时间。MySQL 配置:25、使用 innodb_flush_method=O_DIRECT 来避免写的时候出现双缓冲区。26、避免使用 O_DIRECT 和 EXT3 文件系统 — 这会把所有写入的东西序列化。27、分配足够 innodb_buffer_pool_size ,来将整个InnoDB 文件加载到内存 — 减少从磁盘上读。28、不要让 innodb_log_file_size 太大,这样能够更快,也有更多的磁盘空间 — 经常刷新有利降低发生故障时的恢复时间。29、不要同时使用 innodb_thread_concurrency 和 thread_concurrency 变量 — 这两个值不能兼容。30、为 max_connections 指定一个小的值 — 太多的连接将耗尽你的RAM,导致整个MySQL服务器被锁定。31、保持 thread_cache 在一个相对较高的数值,大约是 16 — 防止打开连接时候速度下降。32、使用 skip-name-resolve — 移除 DNS 查找。33、如果你的查询重复率比较高,并且你的数据不是经常改变,请使用查询缓存 — 但是,在经常改变的数据上使用查询缓存会对性能有负面影响。34、增加 temp_table_size — 防止磁盘写。35、增加 max_heap_table_size — 防止磁盘写。36、不要将 sort_buffer_size 的值设置的太高 — 可能导致连接很快耗尽所有内存。37、监控 key_read_requests 和 key_reads,以便确定 key_buffer 的值 — key 的读需求应该比 key_reads 的值更高,否则使用 key_buffer 就没有效率了。38、设置 innodb_flush_log_at_trx_commit = 0 可以提高性能,但是保持默认值(1)的话,能保证数据的完整性,也能保证复制不会滞后。39、有一个测试环境,便于测试你的配置,可以经常重启,不会影响生产环境。MySQL Schema 优化:40、保证你的数据库的整洁性。41、归档老数据 — 删除查询中检索或返回的多余的行42、在数据上加上索引。43、不要过度使用索引,评估你的查询。44、压缩 text 和 blob 数据类型 — 为了节省空间,减少从磁盘读数据。45、UTF 8 和 UTF16 比 latin1 慢。46、有节制的使用触发器。47、保持数据最小量的冗余 — 不要复制没必要的数据.48、使用链接表,而不是扩展行。49、注意你的数据类型,尽可能的使用最小的。50、如果其他数据需要经常需要查询,而 blob/text 不需要,则将 blob/text 数据域其他数据分离。51、经常检查和优化表。52、经常做重写 InnoDB 表的优化。53、有时,增加列时,先删除索引,之后在加上索引会更快。54、为不同的需求选择不同的存储引擎。55、日志表或审计表使用ARCHIVE存储引擎 — 写的效率更高。56、将 session 数据存储在 memcache 中,而不是 MySQL 中 — memcache 可以设置自动过期,防止MySQL对临时数据高成本的读写操作。57、如果字符串的长度是可变的,则使用VARCHAR代替CHAR — 节约空间,因为CHAR是固定长度,而VARCHAR不是(utf8 不受这个影响)。58、逐步对 schema 做修改 — 一个小的变化将产生的巨大的影响。59、在开发环境测试所有 schema 变动,而不是在生产环境的镜像上去做。60、不要随意改变你的配置文件,这可能产生非常大的影响。61、有时候,少量的配置会更好。62、质疑使用通用的MySQL配置文件。

185332iavaazueppig6m4i.jpg 查询优化:63、使用慢查询日志,找出执行慢的查询。64、使用 EXPLAIN 来决定查询功能是否合适。65、经常测试你的查询,看是否需要做性能优化 — 性能可能会随着时间的变化而变化。66、避免在整个表上使用count(*) ,它可能会将整个表锁住。67、保持查询一致,这样后续类似的查询就能使用查询缓存了。68、如果合适,用 GROUP BY 代替 DISTINCT。69、在 WHERE、GROUP BY 和 ORDER BY 的列上加上索引。70、保证索引简单,不要在同一列上加多个索引。71、有时,MySQL 会选择错误的索引,这种情况使用 USE INDEX。72、使用 SQL_MODE=STRICT 来检查问题。73、索引字段少于5个时,UNION 操作用 LIMIT,而不是 OR。74、使用 INSERT ON DUPLICATE KEY 或 INSERT IGNORE 来代替 UPDATE,避免 UPDATE 前需要先 SELECT。75、使用索引字段和 ORDER BY 来代替 MAX。76、避免使用 ORDER BY RAND()。77、LIMIT M,N 在特定场景下会降低查询效率,有节制使用。78、使用 UNION 来代替 WHERE 子句中的子查询。79、对 UPDATE 来说,使用 SHARE MODE 来防止排他锁。80、重启 MySQL 时,记得预热数据库,确保将数据加载到内存,提高查询效率。81、使用 DROP TABLE ,然后再 CREATE TABLE ,而不是 DELETE FROM ,以删除表中所有数据。82、最小化你要查询的数据,只获取你需要的数据,通常来说不要使用 *。83、考虑持久连接,而不是多次建立连接,已减少资源的消耗。84、基准查询,包括服务器的负载,有时一个简单的查询会影响其他的查询。85、当服务器的负载增加时,使用SHOW PROCESSLIST来查看慢的/有问题的查询。86、在存有生产环境数据副本的开发环境中,测试所有可疑的查询。MySQL备份过程:87、在二级复制服务器上进行备份。88、备份过程中停止数据的复制,以防止出现数据依赖和外键约束的不一致。89、彻底停止MySQL之后,再从数据文件进行备份。90、如果使用MySQL dump进行备份,请同时备份二进制日志 — 确保复制过程不被中断。91、不要信任 LVM 快照的备份 — 可能会创建不一致的数据,将来会因此产生问题。92、为每个表做一个备份,这样更容易实现单表的恢复 — 如果数据与其他表是相互独立的。93、使用 mysqldump 时,指定 -opt 参数。94、备份前检测和优化表。95、临时禁用外键约束,来提高导入的速度。96、临时禁用唯一性检查,来提高导入的速度。97、每次备份完后,计算数据库/表数据和索引的大小,监控其增长。98、使用定时任务(cron)脚本,来监控从库复制的错误和延迟。99、定期备份数据。100、定期测试备份的数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/533994.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql核心参数_MySQL技术体系之核心参数

本文主要基于MySQL 5.7版本的数据库环境,总结my.cnf文件中核心参数的配置使用,让更多的人对MySQL技术体系有更全面、更专业的深度了解。一、客户端核心参数1、port端口号,默认33062、socketSocket文件地址,默认以.sock为文件名称后…

jtag引脚定义_从逆向分析的角度学习硬件调试技巧JTAG,SSD和固件提取

我想从逆向的角度做了深入了解JTAG,JTAG是许多嵌入式CPU使用的硬件级别调试机制,我希望通过这篇文章从逆向工程师的角度解释如何使用JTAG,并在此过程中提供一些实际示例。0x01 研究目标通过这篇文章,我希望做到以下几点&#xff1…

python virtualenv conda_在vscode中启动conda虚拟环境的思路详解

问题:cudatoolkit cudnn 通过conda 虚拟环境安装,先前已经使用virtualenv安装tf,需要在conda虚拟环境中启动外部python虚拟环境思路:conda prompt即将 [虚拟环境位置] 以参数形式传入 [activate.bat]VSOCDE中的设置添加以下语句{&…

远程过程调用失败_Java开发大型互联网RPC远程调用服务实现之问题处理方案

引言RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络…

chrome 新的session 设置_为什么还是由这么多人搞不懂Cookie、Session、Token?

作者:不学无数的程序员链接:https://urlify.cn/Yfm6Vr# Cookie洛:大爷,楼上322住的是马冬梅家吧? 大爷:马都什么? 夏洛:马冬梅。 7大爷:什么都没啊? 夏洛…

eview面板数据之混合回归模型_【视频教程】Eviews系列25|面板数据回归分析之Hausman检验及本章常见问题解答...

点击上方关注我们!本期我们学习Eviews统计建模最后一部分--面板数据回归分析Hausman检验及本章常见问题解答。实操:Hausman检验判断是固定效应模型还是随机效应模型上期我们讲到模型判断若选择模型2,需进一步通过Hausman检验判断固定效应还是随机效应,接…

mybatis mysql selectkey_Mybatis示例之SelectKey的应用

SelectKey在Mybatis中是为了解决Insert数据时不支持主键自动生成的问题,他可以很随意的设置生成主键的方式。不管SelectKey有多好,尽量不要遇到这种情况吧,毕竟很麻烦。SelectKey需要注意order属性,像Mysql一类支持自动增长类型的…

java treetable_在Swing中创建TreeTable | 学步园

TreeTable是Tree和Table的一个结合-就是一个即能够展开和收起行,同时也能够显示多个列的组件。在Swing的标准包里没有一个叫做JtreeTable的组件,但是我们很容易通过把Jtree做成Jtable的渲染器来创建一个这样的组件。这篇文章就是关于如何使用…

python期末大作业_大一期末考试很重要,考得好不仅有机会有钱拿,还有机会换专业...

现阶段很多高校放寒假的时间已经公布,这也就意味着,大学期末考试即将到来。对于大一新生来说,大学的期末考试是比较新鲜的,因为大家都没有经历过。经历过大学考试的学生,都知道大学的大概学习模式,一般情况…

java http 302重定向_Java 纯HTTP请求 禁止302自动重定向

Java 纯HTTP Get请求获取响应内容,如果发生302重定向,继而模拟请求域获取重定向后的响应内容。关键点:设置conn.setInstanceFollowRedirects为false即可示例代码public static void main(String[] args) {try {StringBuffer buffer new Stri…

python 且_Pyface库:一个基于pyqt、pyside、wx且简化的python的GUI

1 说明:1.1 Pyface库由大名鼎鼎的enthought出品。1.2 介绍:1.2.1 英文:traits-capable windowing framework.The pyface project contains a toolkit-independent GUI abstraction layer, which is used to support the "visualization&…

java方法的参数类型_Java 基础 14 方法的重载 与 方法参数类型详解

1.1 方法重载的概述和特点方法重载概述在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。方法重载特点与返回值类型无关,只看方法名和参数列表在调用时,虚拟机通过参数列表的不同来区分同名方法…

crv仪表上的i是什么指示灯_汽车打不着火是怎么回事,仪表盘汽车发动机故障灯亮是什么情况故障指示灯图解大全集...

如果打不着火,那有可能是起动机坏了,有可能是电池没电了,有可能是电路出现了问题,还有可能是点火系统出现了问题。汽车发动机的点火系统主要部件是火花塞和点火线圈,火花塞是一个需要定期更换的易损件。如果火花塞长时…

restful风格_什么是RESTful风格的API设计?

随着移动互联网的兴起,RESTful风格的API设计也随之流行起来,但我们说了那么多RESTful设计,它到底是什么?本篇文章带大家来了解一下它的真实面目。RESTful概念首先,我们需要明确的是RESTful,它是一个理念&am…

zookeeper 分布式锁_关于redis分布式锁,zookeeper分布式锁原理的一些学习与思考

编辑:业余草来源:https://www.xttblog.com/?p4946首先分布式锁和我们平常讲到的锁原理基本一样,目的就是确保,在多个线程并发时,只有一个线程在同一刻操作这个业务或者说方法、变量。在一个进程中,也就是一…

网页无法调用java9_JAVA 9 (内部类,异常,包)

内部类:将一个类定义在另一个类里面,称里面那个类为内部类。举例:class Zx{public static void main(String []arr){Outer o new Outer();o.method();}}class Outer{class Inner //内部类,可以定义多个内部类{void function(){S…

spark算子_Spark篇之持久化算子

一、前述Spark中控制算子也是懒执行的,需要Action算子触发才能执行,主要是为了对数据进行缓存。控制算子有三种,cache,persist,checkpoint,以上算子都可以将RDD持久化,持久化的单位是partition。cache和persist都是懒执…

java g1 gc ref proc_深入理解垃圾收集器的G1及日志分析

尽管Hotspot 最新的垃圾回收器G1是在2006年推出的。但是G1从推行至今的市场反响来看,但现在足以证明这款垃圾收集器是经得起考验的,从java9开始,就默认为G1垃圾收集器。G1是一款面向服务端应用的垃圾收集器。HotSpot开发团队赋予它的使命是(在…

gif透明背景动画_【超实用干货! 】iPad上的动画App大推荐

作者/立夏编辑/彼方大家好,我是立夏。大概在两年前吧我为大家写过几款动画APP的评测,这一次我也想给大家推荐一些我的新宠,供大家参考。我在这里就不过多提及如Animation Desk、Procreate或是Callipeg之类知名度相对更高一些的动画App了&…

iphone如何信任软件_【手机软件】千禾影院:全新观影神器,支持安卓+iOS,最新、最全、高清、免费!...

Hello,大家好,我是春哥!每天记得打卡哦!感谢每一位小伙伴们的关注和支持!免责声明大部分资源来源于网络,仅供学习和交流使用,如有侵权请联系我们删除。每期文章末尾都会有关键词,在公众号发消息…