高性能的MySQL(8)优化服务器配置一并发和负载

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介:

当MySQL遇到高并发时,可能会遇到不曾遇到的瓶颈。


一、InnoDB并发配置


InnoDB是为高性能设计的,在最近几年他的提升非常明显,但依然不完美。

InnoDB有自己的 “线程调度器”控制线程怎么进入内核访问数据,以及他们在内核中一次可以做哪些事情。最基本的限制并发的方式是使用innodb_thread_concurrency变量,它会限制一次性可以有多少个线程进入内核,0表示不限制。

理论上,下面的公式可以给出一个这样的值

并发值 = CPU数量 * 磁盘数量 * 2

但是在实践中,使用更小的值会更好一点,必须做实验来找出合适系统的最好值。

如果已经进入内核的线程超过了允许的数量,新的线程就无法进入内核。

InnoDB使用两段处理来尝试让线程尽可能高校的进入内核。两段策略减少了减少了因为操作系统调度引起的切换。线程第一次休眠innodb_thread_sleep_delay微妙,然后再重试进入内核,如果依然不能进入内核,则放入一个等待线程队列,让操作系统来处理。

第一阶段的默认休眠时间是10000微秒,当CPU有大量的线程处在“进入队列前的休眠”状态,因而没有被充分利用时,改变这个值在高并发环境里可能会有帮助,特别是有大量小查询时。

一旦线程进入内核,他会有一定数量的“票据(tickets)”,可以让它“免费”返回内核,不需要再做并发检查。innodb_concurrency_tickets选项控制票据的数量,很少需要改动,除非有很多运行时间极长的查询。

还有另一个提交阶段的并发瓶颈,这个时候I/O非常密集,因为需要做刷新操作。innodb_commit_concurrency变量控制有多少个线程可以在同一时间提交,如果线程冲突比较多,可以修改这个值。

有一个新的方法是使用线程池来限制并发,MariaDB已经实现了,并且Oracle一个商业插件可以为MySQL5.5提供线程池功能。


二、MyISAM并发配置


某些条件下MyISAM也允许并发插入和读取,但是首先要理解MyISAM是怎样删除和插入行的。

MyISAM的删除操作不会重新整理整个表,它们只是把行标记为删除,在表中留下“空洞”。MyISAM在插入时重新利用填满这些空洞,如果没有空洞,就把新行插到表的末尾。

尽管MyISAM是表级锁,它依然可以一边读取,一边并发追加新行,这中情况只能读取到查询开始时的所有数据,新插入的数据是不可见的,这样避免不一致读。

然而,若表中间的某些数据变动了的话,还是难以提供一致读。MVCC解决了这个问题,通过版本号来校验,但是MyISAM并不支持,所以除非插入操作在表的结尾,否则不能支持并发插入。

通过设置concurrent_insert这个变量,可以配置MyISAM打开并发插入,可以配如下的值

0:不允许并发插入,所有插入都会对表加互斥锁。

1:默认值,只要表中没有空洞,MyISAM就允许并发插入。

2:MySQL5.0以后有效,强制并发插入到表的末尾,即使表中有空洞。如果没有线程从表读取数据,MySQL将把新行放到空洞里,使用这个设置通常使表更加碎片化。


三、负载配置


当服务器在满载的情况下运行时,请尝试记录所有的查询语句,因为这是最好的方式来查看占用资源情况。

优化BLOB和TEXT的场景BLOB和TEXT对MySQL来说是特殊的类型,一个最重要的事项是,服务器不能在内存临时表中存放BLOB和TEXT值,Percona Server没有这个限制,因此如果一个查询涉及到BLOB和TEXT,又需要使用临时表,都会立即在磁盘上创建临时表。

通常使用SUBSTRING()函数把值转换为varchar可以好一点。

对于InnoDB来说,如果有很多大字段,最好是把他们组合一起来单独存到一个列里面,共享一个扩展空间,比每个字段用自己的空间要好。也可以用compress压缩后再存储为BLOB和TEXT。

当MySQL必须排序BLOB和TEXT字段时,它只会使用前缀,max_sort_length可以制定这个前缀有多大。




















本文转自shayang8851CTO博客,原文链接:http://blog.51cto.com/janephp/1321073,如需转载请自行联系原作者

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
存储 缓存 前端开发
如何优化 SSR 应用以减少服务器压力
优化SSR应用以减少服务器压力,可采用代码分割、缓存策略、数据预加载、服务端性能优化、使用CDN、SSR与SSG结合、限制并发请求、SSR与CSR平滑切换、优化前端资源及利用框架特性等策略。这些方法能有效提升性能和稳定性,同时保证用户体验。
|
2月前
|
存储 关系型数据库 MySQL
MySQL MVCC全面解读:掌握并发控制的核心机制
【10月更文挑战第15天】 在数据库管理系统中,MySQL的InnoDB存储引擎采用了一种称为MVCC(Multi-Version Concurrency Control,多版本并发控制)的技术来处理事务的并发访问。MVCC不仅提高了数据库的并发性能,还保证了事务的隔离性。本文将深入探讨MySQL中的MVCC机制,为你在面试中遇到的相关问题提供全面的解答。
312 2
|
25天前
|
SQL 安全 关系型数据库
【MySQL基础篇】事务(事务操作、事务四大特性、并发事务问题、事务隔离级别)
事务是MySQL中一组不可分割的操作集合,确保所有操作要么全部成功,要么全部失败。本文利用SQL演示并总结了事务操作、事务四大特性、并发事务问题、事务隔离级别。
【MySQL基础篇】事务(事务操作、事务四大特性、并发事务问题、事务隔离级别)
|
25天前
|
SQL 存储 关系型数据库
MySQL/SqlServer跨服务器增删改查(CRUD)的一种方法
通过上述方法,MySQL和SQL Server均能够实现跨服务器的增删改查操作。MySQL通过联邦存储引擎提供了直接的跨服务器表访问,而SQL Server通过链接服务器和分布式查询实现了灵活的跨服务器数据操作。这些技术为分布式数据库管理提供了强大的支持,能够满足复杂的数据操作需求。
76 12
|
2月前
|
监控 PHP Apache
优化 PHP-FPM 参数配置:实现服务器性能提升
优化PHP-FPM的参数配置可以显著提高服务器的性能和稳定性。通过合理设置 `pm.max_children`、`pm.start_servers`、`pm.min_spare_servers`、`pm.max_spare_servers`和 `pm.max_requests`等参数,并结合监控和调优措施,可以有效应对高并发和负载波动,确保Web应用程序的高效运行。希望本文提供的优化建议和配置示例能够帮助您实现服务器性能的提升。
114 3
|
2月前
|
存储 关系型数据库 MySQL
MySQL MVCC深度解析:掌握并发控制的艺术
【10月更文挑战第23天】 在数据库领域,MVCC(Multi-Version Concurrency Control,多版本并发控制)是一种重要的并发控制机制,它允许多个事务并发执行而不产生冲突。MySQL作为广泛使用的数据库系统,其InnoDB存储引擎就采用了MVCC来处理事务。本文将深入探讨MySQL中的MVCC机制,帮助你在面试中自信应对相关问题。
217 3
|
3月前
|
存储 缓存 前端开发
如何优化 SSR 应用以减少服务器压力?
如何优化 SSR 应用以减少服务器压力?
|
3月前
|
存储 关系型数据库 MySQL
优化 MySQL 的锁机制以提高并发性能
【10月更文挑战第16天】优化 MySQL 锁机制需要综合考虑多个因素,根据具体的应用场景和需求进行针对性的调整。通过不断地优化和改进,可以提高数据库的并发性能,提升系统的整体效率。
199 1
|
3月前
|
监控 关系型数据库 MySQL
MySQL并发控制与管理
【10月更文挑战第17天】MySQL并发控制与管理
54 0
|
3月前
|
存储 监控 关系型数据库
MySQL并发控制与管理:优化数据库性能的关键
【10月更文挑战第17天】MySQL并发控制与管理:优化数据库性能的关键
443 0