解决mysql安装在Window服务器上后出现查询缓慢,死机的问题优化

       最近一个项目,数据库使用公司linux服务器开发时没有任何问题,后来项目上线,客户要求平台和数据库必须使用他们的服务器,客户的服务器是windows的,简单嘛,安装mysql,配置java运行环境,配置虚拟服务器和端口映射就行了嘛,然而,奇怪的问题出现了,平台运行在我们服务器上,响应速度都是很快的,sql该优化的都优化过,部署到客户的服务器后,并发量稍微一高,数据查询就非常的缓慢,特别是涉及到排序分组的sql,那真是慢到想砸电脑,同样的sql,在我们公司服务器上执行只需要1s左右的,在他们服务器上居然跑了2min多才查询出来,多几个并发量,这可好,mysql服务直接挂了,死机了,在确定安装,环境都没问题后,而且客户的服务器配置和带宽比我们公司服务器配置要高的多,非常纳闷,后来仔细想了下,是不是缓冲区给的不够,我安装的是mysql57,默认数据库引擎是innodb,innodb简介如下,以下摘自百度百科解决mysql安装在Window服务器上后出现查询缓慢,死机的问题优化_第1张图片;

从这里好像找到了思路,查了下数据库的innodb各项参数show variables like '%innodb_buffer_pool%';

解决mysql安装在Window服务器上后出现查询缓慢,死机的问题优化_第2张图片

没错,windows默认innodb_buffer_pool_size大小只有8M,然后看了下mysql的配置文件C:\ProgramData\MySQL\MySQL Server 5.7\my文件,

果然就8M,8M能干嘛,稍微数据量大一点的表来个分组排序就满了,不卡死才怪了,而我们公司服务器是linux的,linux默认是128M,所以没有出现过这种情况,首先介绍一个Innodb最重要的参数:
innodb_buffer_pool_size 这个参数和MyISAM的key_buffer_size有相似之处,但也是有差别的。这个参数主要缓存
innodb表的索引,数据,插入数据时的缓冲。为Innodb加速优化首要参数。
该参数分配内存的原则:这个参数默认分配只有8M,可以说是非常小的一个值。如果是一个
专用DB服务器,那么他可以占到内存的70%-80%。这个参数不能动态更改,所以分配需多考虑
。分配过大,会使Swap占用过多,致使Mysql的查询特慢。如果你的数据比较小,那么可分配是
你的数据大小+10%左右做为这个参数的值,在MySQL5.5之前,广泛使用的和默认的存储引擎是MyISAM。MyISAM使用操作系统缓存来缓存数据。InnoDB需要innodb buffer pool中处理缓存。所以非常需要有足够的InnoDB buffer pool空间。

于是 直接改为了512M,set global innodb_buffer_pool_size =  536870912 ; 

解决mysql安装在Window服务器上后出现查询缓慢,死机的问题优化_第3张图片

果然,平台数据查询飞一般了快了,甚至比之前使用公司服务器更快,当然,这个参数也不是随便设置的,也不是越大越好,

确定当前配置的innodb_buffer_pool_size是否合适,可以通过分析InnoDB缓冲池的性能来验证。

可以使用以下公式计算InnoDB缓冲池性能:

Performance = innodb_buffer_pool_reads / innodb_buffer_pool_read_requests * 100

innodb_buffer_pool_reads:表示InnoDB缓冲池无法满足的请求数。需要从磁盘中读取。

innodb_buffer_pool_read_requests:表示从内存中读取逻辑的请求数。

执行命令 show status like 'innodb_buffer_pool_read%';

解决mysql安装在Window服务器上后出现查询缓慢,死机的问题优化_第4张图片

Performance = 5002581/ 190358748 * 100 = 0.000262797536365389

0.000262797536365389意味着InnoDB可以满足缓冲池本身的大部分请求。从磁盘完成读取的百分比非常小。因此无需增加innodb_buffer_pool_size值。

你可能感兴趣的:(java,mysql,数据库,服务器)