网站地图    收藏   

主页 > 后端 > mysql数据库 >

Mysql性能优化小建议 - mysql数据库栏目 - 自学php

来源:自学PHP网    时间:2015-04-16 10:50 作者: 阅读:

[导读] Mysql的性能优化主要参考文章[1],[2],和[3],其中已使用且比较有效果的有:1 实用优化(1)禁止autocommit, 防止每次插入都提交,刷新logSET autocommit=0; SQL import statements COMM...

Mysql的性能优化主要参考文章[1],[2],和[3],其中已使用且比较有效果的有:

1. 实用优化

(1)禁止autocommit, 防止每次插入都提交,刷新log

 

SET autocommit=0;
... SQL import statements ...
COMMIT;
(2) 对频繁查询的字段建立索引,但要注意加入索引后,执行插入操作时会变慢

 

(3)当只要一行数据时使用 LIMIT 1

 

SELECT 1 FROM tbl_name LIMIT 1
注:SELECT 1 是用来查看是否有记录的,并一般用作条件查询(normally it will be used with WHERE and often EXISTS), 返回的所有行的值都是1。效率上来说,1>anycol>*,因为不用查字典表。[4]

 

(4)永远为每张表设置一个ID
数据库里的每张表都设置一个ID做为其主键,而且最好的是一个INT型的(推荐使用UNSIGNED),并设置上自动增加的AUTO_INCREMENT标志。

(5)一次插入多行

 

INSERT INTO yourtable VALUES (1,2), (5,5), ...;

 

2. 配置优化

 

下面对Disk I/O和query_cache的优化做一个总结,并假设我们使用的机器内存为8GB。以下的参数都在文件my.cnf的[mysqld]下设置。

(1)innodb_buffer_pool_size 和 innodb_log_file_size

建议设置大小来自文章[5]

 

#
# Set buffer pool size to 50-80% of your computer's memory
innodb_buffer_pool_size=4G
innodb_additional_mem_pool_size=256M
#
# Set the log file size to about 25% of the buffer pool size
innodb_log_file_size=1G
innodb_log_buffer_size=256M
怎么安全的更改这个配置,来自于[6]

 

 

mysql -uroot -p... -e"SET GLOBAL innodb_fast_shutdown = 0"
service mysqld stop
rm -f /var/lib/mysql/ib_logfile[01]
service mysqld start
其中 service mysqld stop是centos下的命令,但ubuntu等其他Linux系统可能实用service mysql stop
(2)query_cache_size

 

参数的说明见文章[7] ,但并未提到建议大小,反而提到设置太大也会有坏处。本人设置的大小如下:

 

query_cache_type=1
query_cache_limit=2M
query_cache_size=128M
其中query_chache_type=1表示打开查询缓存,query_cache_size是总的查询缓存大小,query_cahce_limit表示单个查询最大的缓存大小。

 

设置完之后,执行以下操作便可:

 

service mysqld restart
(3) innodb_flush_method

innodb_flush_method设置成O_DIRECT还是O_DSYNC,文章[2]中说设置成O_DIRECT会增加性能,但在文章[8]和[2]中这两个参数在实际使用时差不多,并且跟具体使用的硬件相关。所以设置成O_DIRECT是否会优化性能,还不是很确定

(4)max_allowed_packet

此参数是当网络传输数据时,需要控制的参数,如果传输的数据太大(特别是当存在large BLOB columns or long strings数据时),超过max_allowed_packet的上限时,就有可能发生错误,所以就要提高此参数。本人的设置是:

 

max_allowed_packet = 16M

 

注:

1. 查看系统变量的一些命令

 

show variables like 'innodb_buffer%';
SHOW GLOBAL STATUS LIKE '%innodb%';
show global status like 'Qc%';
2. 本人的配置
\

 

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论