Kafka 做推广 WorldCloud Vue全家桶 TCP连接 import tfs swift3 linktosql swiper Font Awesome 八大员 vue中文 android经典项目开发实战 java后台框架 jquery遍历子元素 hadoop特点 python编程练习题 不用u盘装双系统 oracle可视化工具 matlab图像滤波 python基础 python界面 python中len函数 python的安装 python中的if语句 python网页编程 python安装程序 python返回值 java日期函数 java实例变量 java中new java如何编写接口 java安装 java字符串操作 linux简介 嵌入式开发教程 win7loader 路由器有没有辐射 js绝对值
当前位置: 首页 > 学习教程  > 编程语言

数据库:mysql:性能调优

2020/8/11 21:01:53 文章标签:

mysql性能调优

mysql性能调优设计到方方面面,我在这里就抛砖引玉

一、CPU选择

1. 选择标准

OLTP需要IO密集型操作 OLAP是CPU密集型操作。所以为了支持更大内存,最好选择支持64位的多核CPU。

2. 调优方式

可以利用CPU多核特性,增大读写线程的个数.

mysql> show variables like 'innodb_%io_threads' ;
+-------------------------+-------+
| Variable_name           | Value |
+-------------------------+-------+
| innodb_read_io_threads  | 4     |
| innodb_write_io_threads | 4     |
+-------------------------+-------+

二、内存选择

内存的大小是最能直接反映数据库的性能。通过之前各个章节的介绍,已经了解到InnoDB存储引擎既缓存数据,又缓存索引,并且将它们缓存于一个很大的缓冲池中,即InnoDB Buffer Pool。因此,内存的大小直接影响了数据库的性能。

1. 选择标准

应该在开发应用前预估“活跃”数据库的大小是多少,并以此确定数据库服务器内存的大小。当然,要使用更多的内存还必须使用64位的操作系统。

当缓冲池的大小已经大于数据文件本身的大小,所有对数据文件的操作都可以在内存中进行。因此这时的性能应该是最优的,再调大缓冲池并不能再提高数据库的性能。

2. 调优方式

(1) 提前预估“活跃”数据库的大小

(2) 对预估值进行压测

这里需要判断当前数据库的内存是否已经达到瓶颈

可以通过查看当前服务器的状态,比较物理磁盘的读取和内存读取的比例来判断缓冲池的命中率,通常InnoDB存储引擎的缓冲池的命中率不应该小于99%。如果小于99%,考虑调大buffer pool size。

mysql> SHOW GLOBAL STATUS LIKE 'innodb%read%';
+---------------------------------------+---------+
| Variable_name                         | Value   |
+---------------------------------------+---------+
| Innodb_buffer_pool_read_ahead_rnd     | 0       |
| Innodb_buffer_pool_read_ahead         | 0       |
| Innodb_buffer_pool_read_ahead_evicted | 0       |
| Innodb_buffer_pool_read_requests      | 2412    |
| Innodb_buffer_pool_reads              | 357     |
| Innodb_data_pending_reads             | 0       |
| Innodb_data_read                      | 6902272 |
| Innodb_data_reads                     | 496     |
| Innodb_pages_read                     | 356     |
| Innodb_rows_read                      | 15      |
+---------------------------------------+---------+

在这里插入图片描述

三、硬盘选择

1. 传统机械硬盘 VS 固态硬盘

(1). 特点

  • 传统机械硬盘:由于磁头需要旋转和定位,因此顺序访问的速度要远高于随机访问。
  • 固态硬盘:读写速度是非对称的。读取速度要远快于写入的速度。

2. 调优方式

(1) 考虑innodb_io_capacity参数

innodb_io_capacity:用来当刷新脏数据时,控制MySQL每秒执行的写IO量。
如果是固态硬盘,考虑适当增大innodb_io_capacity,充分利用固态硬盘带来的高IOPS特性。

(2) 考虑关闭关闭邻接页的刷新

可以选择关闭邻接页的刷新,同样可以为数据库的性能带来一定效果的提升。

四、合理地设置RAID

1. RAID定义

RAID(Redundant Array of Independent Disks,独立磁盘冗余数组)的基本思想就是把多个相对便宜的硬盘组合起来,成为一个磁盘数组,使性能达到甚至超过一个价格昂贵、容量巨大的硬盘。

2. RAID的作用

  • 增强数据集成度
  • 增强容错功能
  • 增加处理量或容量

3. RAID的组合方式

(1) 常见的组合方式

常见的RAID组合方式可分为RAID 0、RAID 1、RAID 5、RAID 10和RAID 50等。

(2) 调优方式

对于数据库应用来说,RAID 10是最好的选择,它同时兼顾了RAID 1和RAID 0的特性。
优点:读取与写入速度快,有镜像备份,可靠性高
缺点:当一个磁盘失效时,性能可能会受到很大的影响,因为条带(strip)会成为瓶颈。

在这里插入图片描述

4. RAID Write Back功能

(1) 定义

RAID Write Back功能是指RAID控制器能够将写入的数据放入自身的缓存中,并把它们安排到后面再执行。

(2) 优点

不用等待物理磁盘实际写入的完成,因此写入变得更快了。对于数据库来说,这显得十分重要。

(3) 调优方式

视情况开启RAID Write Back功能

当操作系统或数据库关机时,Write Back功能可能会破坏数据库的数据。这是由于已经写入的数据库可能还在RAID卡的缓存中,数据可能并没有完全写入磁盘,而这时故障发生了。为了解决这个问题,目前大部分的硬件RAID卡都提供了电池备份单元(BBU,Battery Backup Unit),因此可以放心地开启Write Back的功能。不过我发现每台服务器的出厂设置都不相同,应该将RAID设置要求告知服务器提供商,开启一些认为需要的参数。

如果没有启用Write Back功能,那么在RAID卡设置中显示的就是Write Through。Write Through没有缓冲写入,因此写入性能可能不是很好,但它却是最安全的写入。

五、操作系统的选择

使用64位的操作系统,并且使用64位mysql。

六、文件系统的选择

每个操作系统都默认支持一种文件系统并推荐用户使用,如Windows默认支持NTFS,Solaris默认支持ZFS。而对于Linux这样的操作系统,不同发行版本默认支持的文件系统各不相同,有的默认支持EXT3,有的是ReiserFS,有的是EXT4,有的是XFS。
虽然不同特性的文件系统有很多,但是在实际使用过程中从未感觉到文件系统的性能差异有多大
文件系统可提供的功能也许是DBA需要关注的,例如ZFS文件系统本身就可以支持快照,因此就不需要LVM这样的逻辑卷管理工具。此外,可能还需要知道mount的参数,这些参数在每个文件系统中可能有所不同。

七、基准测试工具的选择

暂略


本文链接: http://www.dtmao.cc/news_show_100462.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?