首页 > 数据库 >【MySQL 服务器参数优化】

【MySQL 服务器参数优化】

时间:2023-03-03 12:56:21浏览次数:55  
标签:buffer cache -- 参数 MySQL 缓冲区 服务器 size

http://www.hainiubl.com/topics/75823

 https://www.cnblogs.com/msjhw/p/15816582.html

https://blog.csdn.net/weixin_39735909/article/details/127371686

1.优化MySQL的参数#

innodb_buffer_pool_size

--表示InnoDB类型的 表 和索引的最大缓存
--它不仅仅缓存 索引数据 ,还会缓存 表的数据 。这个值越大,查询的速度就会越快。这个值太大会影响操作系统的性能。

key_buffer_size

--索引缓冲区的大小
索引缓冲区是所有的 线程共享 。增加索引缓冲区可以得到更好处理的索引(对所有读和多重写)。
当然,这个值不是越大越好,它的大小取决于内存的大小。
如果这个值太大,就会导致操作系统频繁换页,也会降低系统性能。
对于内存在 4GB 左右的服务器该参数可设置为 256M 或 384M 。

table_cache

--同时打开的表的个数
这个值越大,能够同时打开的表的个数越多。
物理内存越大,设置就越大。默认为2402,调到512-1024最佳。
这个值不是越大越好,因为同时打开的表太多会影响操作系统的性能。

query_cache_size

--查询缓冲区的大小
可以通过在MySQL控制台观察,
如果Qcache_lowmem_prunes的值非常大,则表明经常出现缓冲不够的情况,就要增加Query_cache_size的值;
如果Qcache_hits的值非常大,则表明查询缓冲使用非常频繁,如果该值较小反而会影响效率,那么可以考虑不用查询缓存;Qcache_free_blocks,如果该值非常大,则表明缓冲区中碎片很多。
MySQL8.0之后失效。该参数需要和query_cache_type配合使用。

query_cache_type

--值是0时,所有的查询都不使用查询缓存区   
但是query_cache_type=0并不会导致MySQL释放query_cache_size所配置的缓存区内存

当query_cache_type=1时,所有的查询都将使用查询缓存区,除非在查询语句中指定SQL_NO_CACHE,
如SELECT SQL_NO_CACHE * FROM tbl_name。

当query_cache_type=2时,只有在查询语句中使用 SQL_CACHE 关键字,查询才会使用查询缓存区。使用查询缓存区可以提高查询的速度,这种方式只适用于修改操作少且经常执行相同的查询操作的情况。

sort_buffer_size

--表示每个 需要进行排序的线程分配的缓冲区的大小
增加这个参数的值可以提高 ORDER BY 或 GROUP BY 操作的速度。默认数值是2 097 144字节(约2MB)。对于内存在4GB
左右的服务器推荐设置为6-8M,如果有100个连接,那么实际分配的总共排序缓冲区大小为100 × 6 = 600MB

join_buffer_size = 8M

--表示 联合查询操作所能使用的缓冲区大小 ,
和sort_buffer_size一样,该参数对应的分配内存也是每个连接独享。

read_buffer_size

表示 每个线程连续扫描时为扫描的每个表分配的缓冲区的大小(字节) 。
当线程从表中连续读取记录时需要用到这个缓冲区。
SET SESSION read_buffer_size=n可以临时设置该参数的值。默认为64K,可以设置为4M。

innodb_flush_log_at_trx_commit

--表示 何时将缓冲区的数据写入日志文件
并且将日志文件写入磁盘中。该参数对于innoDB引擎非常重要。该参数有3个值,分别为0、1和2。该参数的默认值为'1'。
    值为 0 时,表示 每秒1次 的频率将数据写入日志文件并将日志文件写入磁盘。每个事务的commit并不会触发前面的任何操作。该模式速度最快,但不太安全,mysqld进程的崩溃会导致上一秒钟所有事务数据的丢失。
    值为 1 时,表示 每次提交事务时 将数据写入日志文件并将日志文件写入磁盘进行同步。该模式是最安全的,但也是最慢的一种方式。因为每次事务提交或事务外的指令都需要把日志写入(flush)硬盘。
    值为 2 时,表示 每次提交事务时 将数据写入日志文件, 每隔1秒 将日志文件写入磁盘。该模式速度较快,也比0安全,只有在操作系统崩溃或者系统断电的情况下,上一秒钟所有事务数据才可能丢失。

innodb_log_buffer_size

这是 InnoDB 存储引擎的 事务日志所使用的缓冲区 。
为了提高性能,也是先将信息写入 Innodb Log Buffer 中,当满足 innodb_flush_log_trx_commit 参数所设置的相应条件(或者日志缓冲区写满)之后,才会将日志写到文件(或者同步到磁盘)中。

max_connections

--表示 允许连接到MySQL数据库的最大数量  (默认值是 151)
如果状态变量connection_errors_max_connections 不为零,并且一直增长,则说明不断有连接请求因数据库连接数已达到允许最大值而失败,这是可以考虑增大max_connections 的值。在Linux 平台下,性能好的服务器,支持 500-1000 个连接不是难事,需要根据服务器性能进行评估设定。这个连接数 不是越大 越好 ,因为这些连接会浪费内存的资源。过多的连接可能会导致MySQL服务器僵死。

back_log

用于 控制MySQL监听TCP端口时设置的积压请求栈大小 。如果MySql的连接数达到max_connections时,新来的请求将会被存在堆栈中,以等待某一连接释放资源,该堆栈的数量即back_log,如果等待连接的数量超过back_log,将不被授予连接资源,将会报错。5.6.6 版本之前默认值为 50 , 之后的版本默认为 50 + (max_connections / 5), 对于Linux系统推荐设置为小于512的整数,但最大不超过900。如果需要数据库在较短的时间内处理大量连接请求, 可以考虑适当增大back_log 的值。

thread_cache_size

--线程池缓存线程数量的大小
当客户端断开连接后将当前线程缓存起来,当在接到新的连接请求时快速响应无需创建新的线程 。这尤其对那些使用短连接的应用程序来说可以极大的提高创建连接的效率。
那么为了提高性能可以增大该参数的值。默认为'60',可以设置为120。
可以通过如下几个MySQL状态值来适当调整线程池的大小:
mysql> show global status like 'Thread%';

当 Threads_cached 越来越少,但 Threads_connected 始终不降,且 Threads_created 持续升高,可
适当增加 thread_cache_size 的大小。

wait_timeout

指定 一个请求的最大连接时间 ,对于4GB左右内存的服务器可以设置为5-10。

interactive_timeout

表示服务器在关闭连接前等待行动的秒数。

my.cnf的参考配置:#

[mysqld]
port = 3306 serverid = 1 socket = /tmp/mysql.sock skip-locking #避免MySQL的外部锁定,减少出错几率增强稳定性。 
skip-name-resolve #禁止MySQL对外部连接进行DNS解析,使用这一选项可以消除MySQL进行DNS解析的时间。但需要注意,如果开启该选项,则所有远程主机连接授权都要使用IP地址方式,否则MySQL将无法正常处理连接请求! 
back_log = 384 
key_buffer_size = 256M 
max_allowed_packet = 4M 
thread_stack = 256K 
table_cache = 128K 
sort_buffer_size = 6M 
read_buffer_size = 4M 
read_rnd_buffer_size=16M 
join_buffer_size = 8M
myisam_sort_buffer_size = 64M 
table_cache = 512
thread_cache_size = 64 
query_cache_size = 64M 
tmp_table_size = 256M
max_connections = 768 
max_connect_errors = 10000000
wait_timeout = 10 
thread_concurrency = 8 #该参数取值为服务器逻辑CPU数量*2,在本例中,服务器有2颗物理CPU,而每颗物理CPU又支持H.T超线程,所以实际取值为4*2=8 
skip- networking #开启该选项可以彻底关闭MySQL的TCP/IP连接方式,如果WEB服务器是以远程连接的方式访问MySQL数据库服务器则不要开启该选项!否则将无法正常连接! 
table_cache=1024 
innodb_additional_mem_pool_size=4M #默认为2M 
innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=2M #默认为1M 
innodb_thread_concurrency=8 #你的服务器CPU有几个就设置为几。建议用默认一般为8 
tmp_table_size=64M #默认为16M,调到64-256最挂
thread_cache_size=120 query_cache_size=32M

2.优化数据结构#

对于 非负型 的数据(如自增ID、整型IP)来说,要优先使用无符号整型 UNSIGNED 来存储
遇到整数类型的字段可以用 INT 型
使用TIMESTAMP存储时间
用DECIMAL代替FLOAT和DOUBLE存储精确浮点数
避免使用ENUM类型

3.其它调优策略#

--服务器语句超时处理
--指定该会话中SELECT语句的超时时间
SET GLOBAL MAX_EXECUTION_TIME=2000;

 

标签:buffer,cache,--,参数,MySQL,缓冲区,服务器,size
From: https://www.cnblogs.com/xincha/p/17175215.html

相关文章

  • 教你在Red Hat Linux 9下架设FTP服务器
    现如今越来越多的人选择了开源的Linux操作系统,其不逊于Windows的性能和平易近人的价格是人们选择它的最好理由,而RedHatLinux9是Linux操作系统中使用最广的一种。RedHat......
  • Linux离线安装mysql5.7
    下载mysql:https://dev.mysql.com/downloads/mysql/5.7.html#downloads  切换到root用户解压mysql压缩包tar-zxvfmysql-5.7.24-linux-glibc2.12-x86_64.tar.......
  • QString 传递带中文的参数
    编码了解欧洲ISO-8859系列中使用最广泛的是ISO-8859-1,就是我们常常听说的Latin-1编码因为这个子集收录了欧洲绝大多数的常用字符。中国最初的GB编码是GB2312,后......
  • MySQL安装
    MySQL安装SQLSQL语言是一种对数据库、数据进行操作、管理、查询的工具MySQL安装官网下载将MySQLServer(版本)\bin的地址配置到系统变量->Path中cmd登陆测试:MyS......
  • springboot jpa hibernate mysql clickhouse 多数据源
    ClickhouseConfig.java@Configuration@EntityScan(basePackages="test.entity.clickhouse")@EnableJpaRepositories(basePackages="test.repository.clic......
  • mysql连接数
    MySQL最大连接数的默认值是100,这个数值对于并发连接很多的数据库的应用是远不够用的,当连接请求大于默认连接数后,就会出现无法连接数据库的错误,因此我们需要把它适当调大......
  • mysql查询近几天的数据;
    代码: SELECT ANY_VALUE(a.click_date)ASclick_date, IFNULL(b.wmzs,0)ASwmzs FROM ( SELECT @s:=@s+1AS`index`, DATE_FORMAT(DATE_SUB(CURDATE(),INT......
  • MySQL优化
    总结一下常见的mysql优化方案1.提高Type的级别最好是使用内存表级别为system最差的是All2.尽量不使用函数3.尽量不适用表达式4.选择索引尽量选择接近1的字段作为......
  • mysql在开始与结束时间过滤出有效的价格且结束时间可以为空
    背景在商品配置中设置有售卖时间,同一个商品可以设置多组不同的售卖时间,其中开始时间必填,结束时间可以不填,但是同一时刻只会有一个正在生效的时间区间。现在要求我们针对......
  • Android Studio 之连接mysql实现添加功能
    昨天经过几个小时的奋斗,终于是连接上了mysql说实话过程十分艰辛,包括查ip换网络改权限改数据库的表改网络等等之后也尝试过在自己电脑上下另一个版本的mysql但是都以......