mysql单机性能调整,助你更上一层楼

mysql的执行流程:

(1)首先客户端向mysql服务器发起tcp连接,与mysql建立socket连接

(2)客户端发起一个事物transaction,mysql内部的执行引擎会做如下操作:首先先会向undo/redo日志缓冲区(内存)写入数据,然后在一定的时机flush到undo/redo日志磁盘中(日志先行write ahead log,这样就可以保证事务的原子性,回滚,恢复)。然后开始向data的缓冲区(内存)写入数据,然后也是在一定时机flush到data file磁盘中,然后提交事务。


基于此,性能优化可以对上面说到的环节进行参数的调整。

1.max_connection=1000

调整mysql的最大socket连接数为1000(默认100),该数值对于一般的中型项目,虚拟机配置不是很高的环境下,是足够应对。对于大型的项目来说,上万个连接数也是可能的,所以要根据项目情况,和环境配置进行合理调整。

调整max_connetion的方法:

(1)修改my.ini(或者my.cnf)

(2)进入mysql服务端

查看当前最大连接数

show variables like "max_connections";

设置最大连接数

set global max_connections=500;

查看当前建立的socket连接

SHOW STATUS LIKE 'Threads%';

SELECT substring_index(host, ':',1) AS host_name,state,count(*) FROM information_schema.processlist GROUP BY state,host_name;


2.innodb_file_per_table=1


2.innodb_file_per_table=1

开启独占表空间模式。开启之后,每个表都有自己独立的表空间物理文件,所有的数据以及索引都会存储在该文件中,这样方便备份以及恢复数据。

当项目足够的庞大,有几百张表的时候,如果不开启表独占模式,Innodb默认是会将所有的表数据存储到一个共享表空间中,这样的话就会大大影响数据写入读取性能,同时也方便管理备份数据。


3.innodb_buffer_pool_size=1G

这个配置项对应着图片中的data buffer,该配置的大小推荐配置该服务器内存的60%,或者80%。他的作用有两个:

(1)当数据写入时,他会优先写入buffer区域,前提是这个区域的空间够大,这样的话就能将数据先写入到buffer区中,提高写数据性能。

(2)同样的,如果buffer中的区域足够大,大部分数据在buffer区中,命中缓存中记录就非常的高,从而提高读数据的性能。


4.innodb_log_file_size=256M innodb_log_buffer_size=16M

innodb_log_file_size对应着undo/redo log区域,innodb_log_buffer_size对应着undo/redo buffer区域。

当数据库在不断地对undo/redo log写入数据时,当该文件达到一定大小后,就会进行一次切换分割,在这个期间undo/redo buffer是不能往log文件flush数据的,那就是说明不能执行sql语句,这样就会导致这段时间mysql不能提供服务。所以设置innodb_log_buffer_size的大小来应对当log日志进行切换时,接受这段时间的数据。而innodb_log_file_size也不宜设置得过大,因为当数据崩溃后,重新启动的时候,mysql会重新执行log中内容,如果文件过大的话,就会十分影响性能。


5.innodb_flush_log_at_trx_commit=2 (需放在[mysql_safe]节点上)

innodb_flush_log_at_trx_commit = 1:这是mysql的默认配置,也是保持原子性特性最好的,因为当一个事务进行提交后,log buffer区就会立即flush到磁盘中,对磁盘进行写入。

innodb_flush_log_at_trx_commit = 0:当事务进行提交后,写入到log buffer区中就会返回提示事务提交完成。然后mysql就会每秒区轮询将buffer中数据flush到log file中。这样的性能是最好的,因为不用写入到磁盘中,但同时也是最不安全的,因为一旦mysql崩溃了,就会丢失1秒的数据。

innodb_flush_log_at_trx_commit = 2:该配置就是一个折中的配置,从log buffer到log file中其实是首先要write到系统内容中内存中,然后再flush到系统的磁盘中。该配置就是当一个事务发起时,当write到系统内核的内存时,就相当于完成,然后mysql每秒去轮询flush到磁盘中。这样的话只要保证系统不挂,就不会丢失那一秒的数据。


6.innodb_data_file_path=ibdata1:1G;ibdata2:1G;ibdata3:1G:autoextend

虽然innodb_file_per_table 中将每个表独占一个文件,但如果这个文件无限制增长,他依然是系统文件维度的磁盘性能瓶颈。该配置的意思是当文件大小到达1G的时候就会起一个新的ibdata1文件,如此类推下去。

展开阅读全文

页面更新:2024-03-15

标签:性能   磁盘   这样的话   单机   内存   区域   事务   文件   项目   数据   系统

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top