MySQL 中,可以通过两个方面来优化服务器,即硬件和配置参数的优化。通过这些优化方式,可以提高 MySQL 的运行速度。

本节内容需要较全面的知识,可能很难理解,一般只有专业的数据库管理员才能进行这一类的优化。下面为读者介绍优化 MySQL 服务器的方法。

优化服务器硬件

服务器的硬件直接决定着 MySQL 数据库的性能。例如,增加内存和提高硬盘的读写速度,可以提高 MySQL 数据库的查询、更新的速度。

优化服务器硬件的方法主要有以下几种:

  • 配置较大的内存
  • 配置高速磁盘系统,以减少读盘的等待时间,提高响应速度
  • 合理分布磁盘 I/O,把磁盘 I/O 分散在多个设备上,以减少资源竞争,提高并行操作能力
  • 配置多处理器,MySQL 是多线程的数据库,多处理器可同时执行多个线程

随着硬件技术的成熟,硬件的价格也随之降低。现在普通的个人电脑都已经配置了 8GB 内存,甚至一些个人电脑配置 16GB 内存。因为内存的读写速度比硬盘的读写速度快。可以在内存中为 MySQL 设置更多的缓冲区,这样可以提高 MySQL 的访问的速度。如果将查询频率很高的记录存储在内存中,那么查询速度就会很快。

如果条件允许,可以将内存提高到 16GB。并且选择 my-innodb-heavy-4G.ini 作为 MySQL 数据库的配置文件。但是,这个配置文件主要支持 InnoDB 存储引擎的表。如果使用 8GB 内存,可以选择 my-huge.ini 作为配置文件。MySQL 所在的计算机最好是专用数据库服务器,这样数据库就可以完全利用该机器的资源。

服务器类型分为 Developer Machine、Server Machine 和 Dedicate MySQL Server
Machine。其中 Developer Machine 用来做软件开发的时候使用,数据库占用的资源比较少。后面两者占用的资源比较多,尤其是
Dedicate MySQL Server Machine,其几乎要占用所有的资源。

还可以使用多块磁盘来存储数据。这样可以从多个磁盘上并行读取数据,提高数据库读取数据的速度。通过镜像机制可以将不同计算机上的 MySQL 服务器进行同步,这些 MySQL 服务器中的数据都是一样的。通过不同的 MySQL 服务器来提供数据库服务,这样可以降低单个 MySQL 服务器的压力,从而提高 MySQL 的性能。

优化MySQL参数

和大多数数据库一样,MySQL 提供了很多参数来进行服务器的优化设置。数据库服务器第一次启动时,很多参数都是默认设置的,这在实际应用中并不能完全满足需求,为此数据库管理员要进行必要的设置。

1. 查看性能参数的方法
MySQL 服务器启动之后,可以使用 SHOW VARIABLES; 命令查看系统参数,也可称为静态参数。这些参数是系统默认或者 DBA 调整优化后的参数,可以通过 SET 命令或在配置文件中修改。

使用 SHOW STATUS; 命令查询服务器运行的实时状态信息,也就是动态参数。便于 DBA 查看当前 MySQL 运行的状态,做出相应优化,不能手动修改。

例 1
下面为使用 SHOW VARIABLES 和 SHOW STATUS 命令的实例。

mysql> SHOW VARIABLES LIKE 'key_buffer_size';
+-----------------+----------+
| Variable_name   | Value    |
+-----------------+----------+
| key_buffer_size | 33554432 |
+-----------------+----------+
1 row in set, 1 warning (0.00 sec)
mysql> SHOW STATUS LIKE 'key_read_requests';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| Key_read_requests | 149   |
+-------------------+-------+
1 row in set (0.01 sec)

2. 设置优化性能参数
在 MySQL 中,有些参数直接影响到系统的性能。我们可以通过优化 MySQL 的参数提高资源利用率,从而达到提高 MySQL 服务器性能的目的。以下配置参数都在 my.cnf 或者 my.ini 文件的 [mysqld] 组中。

下面对几个重要参数进行详细介绍。

1)key_buffer_size(针对MyISAM存储引擎)
表示索引缓存的大小,这个参数是对 MyISAM 表性能影响最大的一个参数。值越大,索引进行查询的速度越快。

通过检查状态值 key_read_requests 和 key_reads,可以知道 key_buffer_size 的值是否合理。正常情况下,key_reads / key_read_requests 的比例值需小于 0.01。

2)table_cache(针对MyISAM存储引擎)
表示数据库用户同时打开的表的个数。值越大,能够同时打开的表的个数越多。需要注意的是,这个值不是越大越好,因为同时打开的表太多会影响操作系统的性能。

在设置该参数的时候,可以通过 open_tables 和 opened_tables 变量的值来确定该参数的值。open_tables 参数表示当前打开的表缓存数,opened_tables 参数表示曾经打开的表缓存数。

如果 open_tables 的值已经接近 table_cache 的值,且 opened_tables 还在不断变大,则说明 MySQL 正在将缓存的表释放以容纳新的表,此时可能需要加大table_cache 的值。对于大多数情况,比较适合的值如下:
open_tables / opened_tables >= 0.85
open_tables / table_cache <= 0.95

执行 FLUSH TABLE 操作后,系统会关闭一些当前没有使用的表缓存,因此 FLUSH TABLE 后,open_tables 参数的值会变小,opened_tables 参数的值不会变。

3)query_cache_size
表示查询缓存区的大小。使用查询缓存区可以提高查询的速度。
内存中会为 MySQL 保留部分的缓存区,这些缓存区可以提高 MySQL 的处理速度。

可以从以下几个方面考虑如何设置该参数的大小:

  • 查询缓存对 DDL 和 DML 语句的性能的影响
  • 查询缓存的内部维护成本
  • 查询缓存的命中率以及内存使用率等因素

4)query_cache_type
表示查询缓冲区的开启状态,用于控制查询结果是否放到查询缓存中。这种方式只适用于修改操作少且经常执行相同的查询操作的情况,其默认值为 0。
值为 0 表示关闭;
值为 1 表示开启;
值为 2 表示按要求使用查询缓存区,只有 SELECT 语句中使用了 SQL_CACHE 关键字,查询缓存区才会使用。例如,SELECT SQL_CACHE * FROM student。

5)max_connections
表示数据库的最大连接数,默认值为 100。参数最大值不能超过 16384,即使超过也以 16384 为准。该参数设置过小的最明显特征是出现“Too many connections”错误。当然连接数也不是越大越好,因为这些连接会浪费内存的资源。

6)sort_buffer_size
表示排序缓存区的大小。值越大,排序的速度越快。

7)read_buffer_size
表示为每个线程保留的缓冲区的大小。当线程需要从表中连续读取记录时需要用到这个缓冲区。

8)read_rnd_buffer_size
表示为每个线程保留的缓冲区的大小,与 read_buffer_size 相似。但主要用于存储按特定顺序读取出来的记录。

9)innodb_buffer_pool_size
表示 InnoDB 类型的表和索引的最大缓存。值越大,查询的速度越快。但是这个值太大了也会影响操作系统的性能。

调优参考计算方法:
val = Innodb_buffer_pool_pages_data / Innodb_buffer_pool_pages_total * 100%
val > 95% 则考虑增大 innodb_buffer_pool_size, 建议使用物理内存的 75%
val < 95% 则考虑减小 innodb_buffer_pool_size, 建议设置为:Innodb_buffer_pool_pages_data * Innodb_page_size * 1.05 / (102410241024)
10)innodb_log_file_size
该参数的作用是设置日志组中每个日志文件的大小。该参数在高写入负载尤其是大数据集的情况下很重要,这个值越大则性能相对较高。最好不要超过 innodb_log_files_in_group * innodb_log_file_size 的 0.75。

11)innodb_log_files_in_group
该参数用于指定数据库中有几个日志组,默认为2个,因为有可能出现跨日志的大事务,所以一般来讲,建议使用 3~4 个日志组。

12)innodb_log_buffer_size
该参数的作用是设置日志缓存的大小,一旦提交事务,则将该缓存池中的内容写到磁盘的日志文件上。该参数的设置在中等强度写入负载以及较短事务情况下,一般都可以满足服务器的性能要求。如果服务器负载较大,可以考虑加大该参数的值。一般缓存池中的内存每秒钟写到磁盘一次,所以设置较大会浪费内存空间,一般设置为 8MB~16MB 就足够了。

可以参考 Innodb_os_log_written 的值,如果该值增加过快,可以适当的增加该参数的值。

13)innodb_flush_log_at_trx_commit
表示何时将缓冲区的数据写入日志文件,并且将日志文件写入磁盘中。该参数有 3 个值,分别为 0、1 和 2。
值为 0 时,表示每隔 1 秒将数据写入日志文件并将日志文件写入磁盘;
值为 1 时,表示每次提交事务时将数据写入日志文件并将日志文件写入磁盘;
值为 2 时,表示每次提交事务时将数据写入日志文件,每隔 1 秒将日志文件写入磁盘。

该参数的默认值为 1,是最安全最合理的值。为了保证事务的持久性和一致性,建议将该参数设置为 1。

参数设置的值要根据自己的实际情况来设置,并不是值越大越好,可能设置的数值太大体现不出优化效果,反而造成系统空间被占用,导致操作系统变慢。合理的配置参数可以提高 MySQL 服务器的性能。需要注意的是,配置完参数以后,需要重新启动 MySQL 服务配置才会生效。

5、优化MySQL服务器相关推荐

  1. 数据库调优策略:优化MySQL服务器、优化数据库结构、大表优化、隐藏索引对调优的帮助

    文章目录 1. 数据库调优的措施 1.1 调优的目标 1.2 定位调优问题 1.3 调优的维度和步骤 2. 优化MySQL服务器 2.1 优化服务器硬件 2.2 优化MySQL的参数 3. 优化数据库 ...

  2. MySQL8.0优化 - 优化MySQL服务器、优化MySQL的参数、优化数据类型

    文章目录 学习资料 优化MySQL服务器 优化服务器硬件 配置较大的内存 配置高速磁盘系统 合理分布磁盘I/O 配置多处理器 优化MySQL的参数 innodb_buffer_pool_size ke ...

  3. 根据status信息对MySQL服务器进行优化-1

    网上有很多的文章教怎么配置MySQL服务器,但考虑到服务器硬件配置的不同,具体应用的差别,那些文章的做法只能作为初步设置参考,我们需要根据自己的情况进行配置优化,好的做法是MySQL服务器稳定运行了一 ...

  4. mysql 服务器优化_如何对MySQL服务器进行调优

    如今,社会讲求的就是快速,什么事都要有效率,当然服务器也是要有效率.开发人员不断地开发和部署使用LAMP(?.Apache.MySQL 和 PHP/Perl)架构的应用程序.但是,服务器管理员常常对应 ...

  5. mysql 服务器如何优化_mysql服务器优化

    摘自:叶金荣 老叶茶馆 在对一下mysql服务器进行优化时,需要优化的项目如下: 1.  硬件层相关优化 1.1.        cpu相关 在服务器BIOS中设置,可以调整的配置有如下几方面, 目的 ...

  6. 根据status信息对MySQL服务器进行优化-2

    六.进程使用情况 mysql> show global status like 'Thread%'; +-------------------+-------+ | Variable_name ...

  7. tcmalloc mysql 缓存_Tcmalloc优化Mysql内存管理

    实验环境: OS:Redhat 5.3 64bit Mysql:mysql 5.5.29 TCMalloc(Thread-Caching Malloc)与标准glibc库的malloc实现一样的功能, ...

  8. web架构之mysql服务器

    SQL概述 结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询.更新和管理关系数据库系统:同 ...

  9. 项目性能优化(MySQL读写分离、MySQL主从同步、Django实现MySQL读写分离)

    当项目中数据库表越来越多,数据量也逐渐增多时,需要做数据库的安全和性能的优化.对于数据库的优化,可以选择使用MySQL读写分离实现. 1.MySQL主从同步 1.主从同步机制 1.1.主从同步介绍和优 ...

最新文章

  1. 组态王延时启动程序_怎样用组态王软件实现延时功能?比如按下按钮4秒之后,一个指示灯亮,再过5秒,指示灯闪烁(闪烁4S)。谢谢...
  2. Vue 状态管理 Vuex
  3. vslabel隐藏了怎么找_vscode菜单栏与工具栏隐藏之后怎么找回来
  4. java中间件是什么意思_数据库中间件漫谈
  5. Epos消费管理系统复制迁移SQL SERVER 2005数据库
  6. windows上jupyter notebook主题背景、字体及扩展插件配置(集成vim环境)
  7. 6163. 给定条件下构造矩阵——每日一难(phase2_day1)
  8. 提升Windows xp系统运行速度的九大技巧
  9. lenovo启动热键_联想笔记本进bios按什么键|联想笔记本开机进入bios热键是哪个
  10. MySQL基础(约束 多表查询)
  11. UIAutomatorViewer基础
  12. 达威尔CHERRY樱桃轴 铝合金有线背光电竞吃鸡游戏机械键盘
  13. 阿里云-印刷文字识别-营业执照识别
  14. (转)[视频压制/转换技术] I帧 B帧 P帧 IDR帧 等帧用途详细说明
  15. python自定义cmap_python自定义cmap_Python matplotlib的使用并自定义colormap的方法
  16. 手机APP如何远程控制PLC
  17. Qcom 平台 LK 阶段配置 I2C
  18. 22春天津大学《建筑施工》在线作业一
  19. 海康设备改造成ehome之后服务器收不到注册信息原因
  20. 学点简单的Django之第一个Django程序

热门文章

  1. SQLServer:GUI方式、SQL语句两种方式建立视图和GUI方式设置主键、约束等
  2. DL之ANN/DNN: 人工神经网络ANN/DNN深度神经网络算法的简介、应用、经典案例之详细攻略
  3. pycharm专业版-2017.3.3 安装+anaconda3-2019.03-windows
  4. 网络编程-计算机网络
  5. 【转】6 Reasons Why JavaScript’s Async/Await Blows Promises Away (Tutorial)
  6. 解决java web前后台乱码
  7. jdk7 for Mac
  8. supersocket中quickstart文件夹下的MultipleCommandAssembly的配置文件分析
  9. stm32 bootloader跳转
  10. RV1108开发环境搭建