文章目录

  • 一、前言
  • 二、查看服务器的CPU和内存
    • 1、查看CPU的个数
    • 2、查看服务器的内存
    • 3、数据库版本
  • 三、64GB内存的mysql配置参数
  • 四、本机8GB内存的mysql配置参数
    • 1、查看数据库版本
    • 2、具体的配置参数
  • 五、总结
    • 1、数据库偏向于写操作
    • 2、数据库偏向于读操作
    • 3、补充

一、前言

我们新搭建一个LNMP环境之后该如何设置配置文件来达到最佳性能呢?众所周知,mysql的默认配置参数性能是比较底下的,如果我们的服务器配置比较高,那么势必发挥不出来mysql的真正性能。所以,我们必须要设置合适的mysql参数来达到最完美的性能,最起码不能拖了后腿。

二、查看服务器的CPU和内存

博主在配置完LNMP之后,也是一时之间有些恍惚,虽然知道要设置mysql的内存参数,设置连接数之类的,但是一时还真不知道该从何处下手。所幸公司有专门的mysql服务器,并且参数都是经过DBA设置过的,性能强劲,不如咱们就参考mysql服务器上的配置,从而对比咱们的服务器配置,设计出适合咱们mysql的一套配置参数。

下面先查询出来mysql服务器的配置,方便作为对比:

1、查看CPU的个数

 //查看逻辑CPU的个数
cat /proc/cpuinfo| grep "processor"| wc -l
40//查看物理CPU的个数
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l   数
2//查看物理CPU的内核数cat /proc/cpuinfo | grep "cores" | uniq         //查看物理CPU的内核数
cpu cores   : 10

(1)物理cpu数: 主板上实际插入的cpu数量,可以数不重复的 physical id 有几个(physical id)

(2) cpu核数: 单块CPU上面能处理数据的芯片组的数量,如双核、四核等 (cpu cores)

(3)逻辑cpu数: 一般情况下,逻辑cpu=物理CPU个数×每颗核数,如果不相等的话,则表示服务器的CPU支持超线程技术(HT:简单来说,它可使处理器中的1 颗内核如2 颗内核那样在操作系统中发挥作用。这样一来,操作系统可使用的执行资源扩大了一倍,大幅提高了系统的整体性能,此时逻辑cpu=物理CPU个数×每颗核数x2

也就是说,实际用到的核数是:40 /2 = 20核 ,比着上面的10核多,相当于服务器支持CPU超线程技术

2、查看服务器的内存

grep MemTotal /proc/meminfo
MemTotal:       65936452 kB             //大概是62.8G,也就是64G的机器

3、数据库版本

select version();
+------------+
| version()  |
+------------+
| 5.6.34-log |

OK,根据咱们上面的这些操作,已经知道公司的Mysql服务器配置是:10核64GB内存的。

三、64GB内存的mysql配置参数


show global variables like 'key_buffer_size';                     256Mshow global variables like 'max_allowed_packet';                  32Mshow global variables like 'table_open_cache';                 16384   show global variables like 'sort_buffer_size';                32Mshow global variables like 'net_buffer_length';                16384show global variables like 'read_buffer_size';                   16Mshow global variables like 'read_rnd_buffer_size';             32Mshow global variables like 'myisam_sort_buffer_size';          128M
(经常需要调用临时表,所以大了一些)show global variables like 'thread_cache_size';                    64根据物理内存设置规则如下:
1G ---> 8
2G ---> 16
3G ---> 32
>3G ---> 64show global variables like 'query_cache_size';                   0 当开启了 Query Cache 之后,尤其是当我们的 query_cache_type 参数设置为 1 以后,
MySQL 会对每个 SELECT 语句都进行Query Cache 查找,查找操作虽然比较简单,
但仍然也是要消耗一些 CPU 运算资源的。而由于 Query Cache 的失效机制的特性,
可能由于表上的数据变化比较频繁,大量的 Query Cache 频繁的被失效,所以
Query Cache 的命中率就可能比较低下。所以有些场景下
,Query Cache 不仅不能提高效率,反而可能造成负面影响。 参考:https://blog.csdn.net/u014044812/article/details/78924315show global variables like 'tmp_table_size';                   128M
//临时表相关,不常用的话可以小一点show global variables like 'explicit_defaults_for_timestamp';    ON
//是否显示默认时间戳show global variables like 'max_connections';                  100000  //最大连接数,并发连接数show global variables like 'max_connect_errors';              10000000  show global variables like 'open_files_limit';                  500000
//mysql打开最大文件数show global variables like 'expire_logs_days';                  10
启用二进制日志后,保留日志的天数。show global variables like 'innodb_file_per_table';               ONshow global variables like 'innodb_data_file_path';             ibdata1:1G:autoextend
用来容纳InnoDB为数据表的表空间: 可能涉及一个以上的文件; 每一个表空间文件
的最大长度都必须以字节(B)、兆字节(MB)或千兆字节(GB)为单位给出;
表空间文件的名字必须以分号隔开; 最后一个表空间文件还可以带一个autoextend
属性和一个最大长度(max:n)。===innodb引擎相关配置====show global variables like 'innodb_buffer_pool_size';           32Gshow global variables like 'innodb_log_file_size';                4G
//事务日志文件写操作缓存区的最大长度show global variables like 'innodb_log_buffer_size';           64M
//经常用到事务的场景,这个值应该大一些show global variables like 'innodb_flush_log_at_trx_commit';   2
这个参数要配合sync_binlog参数来设置,在设置为:
innodb_flush_log_at_trx_commit=2
sync_binlog=1000
mysql的写入性能最高,可以参考:https://www.jianshu.com/p/74b03a792ff8show global variables like 'innodb_lock_wait_timeout';          30sshow global  variables like 'back_log';                            4096
//参考:https://www.cnblogs.com/angryprogrammer/p/6667741.html

注意:以上参数均为博主计算后的数额,通过show variables查出来的数值都是以字节为单位,这块大家自己到时候自己转换一下就行,博文为了方便展示,故而选用MB来展示。

上面这些参数是影响mysql服务器性能的主要原因,关于这些参数的具体含义,大家可以参考:MariaDB/MySQL配置文件my.cnf解读 ,注释部分只是列出来部分参数的含义,建议是先弄懂各个参数的含义再对比设置会比较好。

四、本机8GB内存的mysql配置参数

咱们的服务器是2核8G,当然是不能像专门的数据库服务器一样,绝大部分内存都分配给mysql,由于业务会有大量的连接,所以决定留下一半的内存给mysql,也就是4GB。剩下的4GB内存交给服务器的线程。

1、查看数据库版本

MariaDB [(none)]> select version();
+--------------------------+
| version()                |
+--------------------------+
| 10.1.41-MariaDB-0+deb9u1 |
+--------------------------+

这个版本具有MySQL 5.65.7的后端和重新实现的功能,可以参考文档:https://mariadb.com/kb/en/library/mariadb-10141-release-notes/
不过网上有种说法是10.1-35.7对应,也就是说咱们这个版本也是对标的mysql5.7

2、具体的配置参数

show global variables like 'key_buffer_size';          64M     //默认16M     //64G的机器设置:256Mshow global variables like 'max_allowed_packet';    32M     // 默认16M        //64G的机器设置:32Mshow global variables like 'table_open_cache';   2048    // 默认2000       //64G的机器设置:16384 show global variables like 'sort_buffer_size';    4M      //默认是2M     //64G的机器设置:32Mshow global variables like 'net_buffer_length';   16384  //默认16384       //64G的机器设置:16384show global variables like 'read_buffer_size';        1M       //默认128k        //64G的机器设置:16Mshow global variables like 'read_rnd_buffer_size';   512k    //默认256k        //64G的机器设置:32Mshow global variables like 'myisam_sort_buffer_size';128M    //默认128M        //64G的机器设置:128Mshow global variables like 'thread_cache_size';     64      //默认8           //64G的机器设置:64show global variables like 'query_cache_size';    0           //默认16M     //64G的机器设置:0show global variables like 'tmp_table_size';       32M     //默认16M     //64G的机器设置:128Mshow xx like 'explicit_defaults_for_timestamp';  ON         //默认OFF     //64G的机器设置:ONshow global variables like 'max_connections';     5000    //默认151     //64G的机器设置:100000show global variables like 'max_connect_errors';  500000  //默认100     //64G的设置:10000000show global variables like 'open_files_limit';        65535   //默认4184        //64G的机器设置:500000    show global variables like 'expire_logs_days';        10      //默认10          //64G的机器设置:10show global variables like 'innodb_file_per_table';   ON      //默认ON          //64G的机器设置:ONshow global variables like 'innodb_data_file_path';   64M     //默认12M         //64G的机器设置:1G===innodb相关====show global variables like 'innodb_buffer_pool_size';   2G  //默认128M    //64G的机器设置:32Gshow global variables like 'innodb_log_file_size';   256M    //默认48M         //64G的机器设置:4Gshow global variables like 'innodb_log_buffer_size'; 32M  //默认16M         //64G的机器设置:64Mshow xx like 'innodb_flush_log_at_trx_commit';       2       //默认1           //64G的机器设置:2show global variables like 'sync_binlog';      1000        //默认0           //64G的机器设置:1000show global variables like 'innodb_lock_wait_timeout';30s   //默认50          //64G的机器设置:30show global  variables like 'back_log';               500     //默认80          //64G的机器设置:4096

(PS:对齐实在是太难了,这个样式调了老半天。。)

mysql的参数很多,但主要影响性能的就是上面这些,针对大部分的情况(中小型业务),修改这些设置可以有效提升mysql的性能,其他的设置
用默认的就可以。关于查看mysql各种性能指标,可以参考:通过查看mysql 配置参数、状态来优化你的mysql

五、总结

通过对比可以看到,mysql有些默认的值实在是太小了,根本发挥不出来机器的性能。明明内存那么大,结果却放着不用,这性能也是非常糟糕了。还有innodb_flush_log_at_trx_commitsync_binlog,这两个默认的设置恰恰是写入性能最低的搭配。

1、数据库偏向于写操作

具体的配置还是要根据自己数据库的偏好来的,如果数据库用到的事务比较多,那么建议加大事务相关的配置。如果更偏向于写并且表很大的话,要增加表空间大小,并且增加缓冲区大小,同时事务相关的也要大一些,因为每次插入也是要经过事务处理的,主要是innodb_log_file_size参数要设置的大一些。

2、数据库偏向于读操作

如果是更偏向于读,那么事务相关的空间可以小一些,table_open_cacheopen_files_limit也可以设置的大一些,当 Mysql 访问一个表时,如果该表在缓存中已经被打开,则可以直接访问缓存。临时表空间可以适当增大,因为大数据量的查询,用到临时表也很正常,还有read_buffer_size等参数也要注意。

3、补充

以上更多的是一种大致的建议,设计要设置的参数很多,偏重于读或者写的配置侧重点也是不同的,大家先了解各个配置代表的意思,这样就能设计出最合适自己机器的配置了。

根据上面的分析,我们可以发现,mysql的性能是根据不同的配置而变化的,并不是单一的调大某个参数,性能就能来个飞速上涨。还是木桶原理,木桶能装多少水,取决的是最短的那个板子,我们只能尽量让板子都均衡一些,尽量多装一些水而已。

end

mysql配置参数调优(8GB内存和64GB内存)相关推荐

  1. php+php-fom+nginx配置参数调优详解

    文章目录 一.前言 1.mysql配置参数: 2.注意 二.php参数配置及讲解 1.phpini的基本设置 2.php参数设置 三.php-fpm设置 1.设置子进程数,增加并发量 2.防止频繁出现 ...

  2. Springboot内置Tomcat配置参数调优

    Springboot内置Tomcat配置参数调优,首先,线程数是一个重点,每一次HTTP请求到达Web服务器,Web服务器都会创建一个线程来处理该请求,该参数决定了应用服务同时可以处理多少个HTTP请 ...

  3. Ceph性能优化 之 配置参数调优

    该文同时发表在盛大游戏G云微信公众号,粘贴于此,方便各位查阅 Ceph,相信很多IT朋友都听过.因为搭上了Openstack的顺风车,Ceph火了,而且越来越火.然而要用好Ceph却也不是件易事,在Q ...

  4. mysql forward_only_mysql参数调优

    query_cache_type = 0 关闭mysql查询缓存功能 query_cache_size = 0 用于缓存sql语句查询结果的缓冲区大小,在一次查询之后,会将查询结果缓存,如果涉及到的表 ...

  5. mysql性能参数调优

    1 优化连接池 连接池运行机制 MySQL连接器中的连接池,用以提高数据库密集型应用程序的性能和可扩展性,默认启用.MySQL连接器负责管理连接池中的多个连接,自动创建.打开.关闭和破坏连接,多个连接 ...

  6. MySQL 数据库规范--调优篇(终结篇)

    前言 这篇是MySQL 数据库规范的最后一篇--调优篇,旨在提供我们发现系统性能变弱.MySQL系统参数调优,SQL脚本出现问题的精准定位与调优方法. 目录 1.MySQL 调优金字塔理论 2.MyS ...

  7. Spark Submit提交及参数调优

    https://www.cnblogs.com/LHWorldBlog/p/8414342.html https://www.cnblogs.com/haoyy/p/6893943.html spar ...

  8. spark 资源参数调优

    资源参数调优 了解完了Spark作业运行的基本原理之后,对资源相关的参数就容易理解了.所谓的Spark资源参数调优,其实主要就是对Spark运行过程中各个使用资源的地方,通过调节各种参数,来优化资源使 ...

  9. Java架构学习(十二)java内存结构新生代老年代JVM参数调优堆内存参数配置解决堆栈溢出

    JVM参数调优与垃圾回收机制 一.java内存结构 Java内存模型:是多线程里面的,jmm与线程可见性有关 Java内存结构:是JVM虚拟机存储空间. Java内存结构图 Java内存机构分为:方法 ...

最新文章

  1. Oracle11 expdp0734,oracle 11g expdp impdp 跨平台迁移数据
  2. 一些关于Rust在2019年的思考
  3. hadoop分布式文件系统hdfs的概念和特性
  4. springboot3.x 集成持久层框架
  5. python中while语句是_如何在Python中使用while语句[适合初学者]
  6. button设置disabled属性不生效_jQuery属性节点
  7. 换掉 Postman + Swagger + JMeter,这 5 个 Java 项目绝了!
  8. nginx ngx_core_module(main event)
  9. WebService服务发布与使用(JDK自带WebService)
  10. Matlab基本知识概况
  11. 资源 |不要再问我什么数学水平才能学机器学习啦【文末彩蛋】
  12. C语言Ip获取mac,C语言怎么实现Windows下获取IP和MAC地址?
  13. P2731 骑马修栅栏 欧拉函数
  14. 用php写一个单例类,PHP里的单例类写法实例
  15. 【Vue.js】iconfont中unicode引用和unicode引用失败,无法显示icon
  16. DSP学习笔记——基于TMS320F28335
  17. python建模_python建模实例详解
  18. 基因组信息学参考习题
  19. 中芯国际:Q1营收同比增长22%至11亿美元,预计年底产能仍供不应求|看财报
  20. 国外问卷调查怎么做?谁都能做吗?

热门文章

  1. linux触摸屏两指缩放_自定义TextView实现单指拖动,双指缩放旋转
  2. python服务器同步
  3. skimage 学习笔记
  4. pytorch训练过程中loss出现NaN的原因及可采取的方法
  5. MySQL 5.7 中TIMESTAMP with implicit DEFAULT value is deprecated错误
  6. fftw_plan_dft_2d优化
  7. 交叉编译并移植opencv3.0.0到arm板
  8. Linux的iptables在指定的防火墙规则序号前添加防火墙规则
  9. ios 扑克牌效果轮播_iOS一行代码实现立体轮播图
  10. steamvr unity 连接眼镜_Unity SteamVR插件集成