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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

当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,如需转载请自行联系原作者

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
17天前
|
关系型数据库 MySQL 索引
mysql 分析5语句的优化--索引添加删除
mysql 分析5语句的优化--索引添加删除
13 0
|
23天前
|
存储 关系型数据库 MySQL
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)
|
23天前
|
存储 SQL 关系型数据库
轻松入门MySQL:加速进销存!利用MySQL存储过程轻松优化每日销售统计(15)
轻松入门MySQL:加速进销存!利用MySQL存储过程轻松优化每日销售统计(15)
|
23天前
|
存储 关系型数据库 MySQL
轻松入门MySQL:优化进销存管理,掌握MySQL索引,提升系统效率(11)
轻松入门MySQL:优化进销存管理,掌握MySQL索引,提升系统效率(11)
|
17天前
|
SQL 缓存 关系型数据库
mysql性能优化-慢查询分析、优化索引和配置
mysql性能优化-慢查询分析、优化索引和配置
83 1
|
23天前
|
存储 关系型数据库 MySQL
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
|
23天前
|
缓存 关系型数据库 MySQL
MySQL查询优化:提速查询效率的13大秘籍(合理使用索引合并、优化配置参数、使用分区优化性能、避免不必要的排序和group by操作)(下)
MySQL查询优化:提速查询效率的13大秘籍(合理使用索引合并、优化配置参数、使用分区优化性能、避免不必要的排序和group by操作)(下)
|
1天前
|
SQL 关系型数据库 MySQL
不允许你不知道的 MySQL 优化实战(一)
不允许你不知道的 MySQL 优化实战(一)
|
2天前
|
存储 缓存 关系型数据库
掌握MySQL数据库这些优化技巧,事半功倍!
掌握MySQL数据库这些优化技巧,事半功倍!
|
2天前
|
缓存 关系型数据库 MySQL
MySQL数据库优化技巧:提升性能的关键策略
索引是提高查询效率的关键。根据查询频率和条件,创建合适的索引能够加快查询速度。但要注意,过多的索引可能会增加写操作的开销,因此需要权衡。