10.MySql全局参数优化

news/2024/12/21 20:30:20/

    从上图可以看出SQL及索引的优化效果是最好的,而且成本最低,所以工作中我们要在这块花更多时间。

一、全局参数

配置文件my.ini(windows)或my.cnf(mac)的全局参数:

假设服务器配置为:

  • CPU:32核

  • 内存:64G

  • DISK:2T SSD

下面参数都是服务端参数,默认在配置文件的 [mysqld] 标签下

1.max_connections

max_connections=3000

连接的创建和销毁都需要系统资源,比如内存、文件句柄,业务说的支持多少并发,指的是每秒请求数,也就是QPS。

一个连接最少占用内存是256K,最大是64M,如果一个连接的请求数据超过64MB(比如排序),就会申请临时空间,放到硬盘上。

如果3000个用户同时连上mysql,最小需要内存3000*256KB=750M,最大需要内存3000*64MB=192G。

如果innodb_buffer_pool_size是40GB,给操作系统分配4G,给连接使用的最大内存不到20G,如果连接过多,使用的内存超过20G,将会产生磁盘SWAP,此时将会影响性能。连接数过高,不一定带来吞吐量的提高,而且可能占用更多的系统资源。

2.max_user_connections

max_user_connections=2980

允许用户连接的最大数量,剩余连接数用作DBA管理。

3.back_log

back_log=300

MySQL能够暂存的连接数量。如果MySQL的连接数达到max_connections时,新的请求将会被存在堆栈中,等待某一连接释放资源,该堆栈数量即back_log,如果等待连接的数量超过back_log,将被拒绝。

4.wait_timeout

wait_timeout=300

指的是app应用通过jdbc连接mysql进行操作完毕后,空闲300秒后断开,默认是28800,单位秒,即8个小时。

5.interactive_timeout

interactive_timeout=300

指的是mysql client连接mysql进行操作完毕后,空闲300秒后断开,默认是28800,单位秒,即8个小时。

6.innodb_thread_concurrency

innodb_thread_concurrency=64

此参数用来设置innodb线程的并发数,默认值为0表示不被限制,若要设置则与服务器的CPU核心数相同或是CPU的核心数的2倍,如果超过配置并发数,则需要排队,这个值不宜太大,不然可能会导致线程之间锁争用严重,影响性能。

7.innodb_buffer_pool_size

innodb_buffer_pool_size=40G

innodb存储引擎buffer pool缓存大小,一般为物理内存的60%-70%。

8.innodb_lock_wait_timeout

innodb_lock_wait_timeout=10

行锁锁定时间,默认50s,根据公司业务定,没有标准值。

9.innodb_flush_log_at_trx_commit

innodb_flush_log_at_trx_commit=1

这个参数控制 redo log 的写入策略,它有三种可能取值:

  • 设置为0:表示每次事务提交时都只是把 redo log 留在 redo log buffer 中,数据库宕机可能会丢失数据。

  • 设置为1(默认值):表示每次事务提交时都将 redo log 直接持久化到磁盘,数据最安全,不会因为数据库宕机丢失数据,但是效率稍微差一点,线上系统推荐这个设置。

  • 设置为2:表示每次事务提交时都只是把 redo log 写到操作系统的缓存page cache里,这种情况如果数据库宕机是不会丢失数据的,但是操作系统如果宕机了,page cache里的数据还没来得及写入磁盘文件的话就会丢失数据。

10.sync_binlog

sync_binlog=1

binlog写入磁盘机制主要通过 sync_binlog 参数控制,默认值是 0。

  • 为0的时候,表示每次提交事务都只 write 到page cache,由系统自行判断什么时候执行 fsync 写入磁盘。虽然性能得到提升,但是机器宕机,page cache里面的 binlog 会丢失。

  • 也可以设置为1,表示每次提交事务都会执行 fsync 写入磁盘,这种方式最安全。

  • 还有一种折中方式,可以设置为N(N>1),表示每次提交事务都write 到page cache,但累积N个事务后才 fsync 写入磁盘,这种如果机器宕机会丢失N个事务的binlog。

11.sort_buffer_size

sort_buffer_size=4M

每个需要排序的线程分配该大小的一个缓冲区。增加该值可以加速ORDER BY 或 GROUP BY操作。

sort_buffer_size是一个connection级的参数,在每个connection(session)第一次需要使用这个buffer的时候,一次性分配设置的内存。

sort_buffer_size:并不是越大越好,由于是connection级的参数,过大的设置+高并发可能会耗尽系统的内存资源。例如:500个连接将会消耗500*sort_buffer_size(4M)=2G。

12.join_buffer_size

join_buffer_size=4M

  用于表关联缓存的大小,和sort_buffer_size一样,该参数对应的分配内存也是每个连接独享。

SQL及索引的优化效果是最好的,而且成本最低,所以工作中我们要在这块花更多时间。


http://www.ppmy.cn/news/1537058.html

相关文章

线程同步的机制有哪些?区别是什么

AutoResetEvent、ManualResetEvent、EventWaitHandle 以及 lock 都是 C# 中用于线程同步的机制,但它们在使用方式和功能上有所不同。 AutoResetEvent 功能:允许一个线程将事件的状态设置为有信号状态,从而允许一个正在等待该事件的线程继续…

[已完结] Authentication Lab —— 靶场笔记合集

Authentication Labhttps://authlab.digi.ninja/ 0x01:Authentication Lab 靶场简介 Authentication Lab 是由 DigiNinja 提供的,一个专注于身份验证和授权漏洞的实验平台。该网站旨在提供一个可以让用户探索和实践各种常见与不常见的身份验证与授权漏…

花8000元去培训机构学习网络安全值得吗,学成后就业前景如何?

我就是从培训机构学的网络安全,线下五六个月,当时学费不到一万,目前已成功入行。所以,只要你下决心要入这一行,过程中能好好学,那这8000就花得值~ 因为只要学得好,工作两个多月就能赚回学费&am…

Python简介与入门

如果你要用计算机做很多工作,最后你会发现有一些任务你更希望用自动化的方式进行处理。比如,你想要在大量的文本文件中执行查找/替换,或者以复杂的方式对大量的图片进行重命名和整理。也许你想要编写一个小型的自定义数据库、一个特殊的 GUI …

孩子用的台灯哪个牌子好?必须了解白炽灯和led哪个护眼

我国是近视眼发病率最高的国家之一,尤其在青少年学生中,更有逐年增加的趋势。目前中小学生戴眼镜的现象非常普遍,学生视力下降明显。这既影响我们的学习和生活也影响我们未来对于某些职业的选择。因此,许多家长朋友们试图购买护眼…

性能优化-SQL查询优化技巧全解

SQL查询优化技巧全解 在数据库操作中,SQL查询的性能直接影响到应用程序的响应速度。本文将深入探讨SQL查询优化的关键技术,并结合实例展示如何使用itBuilder这款强大的数据库设计、建模软件,来辅助提升开发效率。 1. SQL查询基础与执行计划…

Anaconda保姆安装教程

步骤1:下载Anaconda安装包 访问官网: 进入Anaconda官网下载页面,官网会根据电脑的操作系统自动选择适合的操作系统安装程序。 尝试进入清华大学开源软件镜像站,选择想要的版本进行下载,通常下载速度较快。 本文以从…

图文深入理解Oracle DB Scheduler

值此国庆佳节,深宅家中,闲来无事,就多写几篇博文。今天继续宅继续写。本篇图文深入介绍Oracle DB Scheduler。 Oracle为什么要使Scheduler? 答案就是6个字:简化管理任务。 • Scheduler(调度程序&#x…