Mysql性能优化小建议
2014-12-24 12:07
507 查看
Mysql的性能优化主要参考文章[1],[2],和[3],其中已使用且比较有效果的有:
1. 实用优化
(1)禁止autocommit, 防止每次插入都提交,刷新log
(3)当只要一行数据时使用 LIMIT 1
(4)永远为每张表设置一个ID
为数据库里的每张表都设置一个ID做为其主键,而且最好的是一个INT型的(推荐使用UNSIGNED),并设置上自动增加的AUTO_INCREMENT标志。
(5)一次插入多行
(1)innodb_buffer_pool_size 和 innodb_log_file_size
建议设置大小来自文章[5]
(2)query_cache_size
参数的说明见文章[7] ,但并未提到建议大小,反而提到设置太大也会有坏处。本人设置的大小如下:
设置完之后,执行以下操作便可:
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的上限时,就有可能发生错误,所以就要提高此参数。本人的设置是:
注:
1. 查看系统变量的一些命令
InnoDB Performance Tuning Tips
[2]
How to improve MySQL INSERT and UPDATE performance?
[3]
MySQL性能优化的最佳20+条经验
[4]
select 1 from ... sql语句中的1代表什么意思?
[5]
InnoDB Configuration
[6]
How to safely change MySQL innodb variable 'innodb_log_file_size'?
[7]
Query Cache Configuration
[8]
mysql setting variable innodb_flush_method to O_DSYNC or O_DIRECT
1. 实用优化
(1)禁止autocommit, 防止每次插入都提交,刷新logSET 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. 本人的配置
Reference
[1]InnoDB Performance Tuning Tips
[2]
How to improve MySQL INSERT and UPDATE performance?
[3]
MySQL性能优化的最佳20+条经验
[4]
select 1 from ... sql语句中的1代表什么意思?
[5]
InnoDB Configuration
[6]
How to safely change MySQL innodb variable 'innodb_log_file_size'?
[7]
Query Cache Configuration
[8]
mysql setting variable innodb_flush_method to O_DSYNC or O_DIRECT
相关文章推荐
- MySQL性能优化之Open_Table配置参数的合理配置建议
- [mysql] 性能优化20条建议
- mysql 性能优化的几点建议
- 【mysql】MySQL性能优化建议整理
- mysql性能优化的建议
- MySQL性能优化建议
- mysql性能优化十大建议(处理大量数据时)
- Mysql性能优化建议
- mysql性能优化建议
- 从某次测试过程中,得到的MySQL性能优化的建议,和定位问题的方法 推荐
- mysql 性能优化 20 条建议
- mysql性能优化学习笔记-参数介绍及优化建议
- 优化MySQL性能的84个使用建议
- 干货之mysql性能优化建议
- mysql 性能优化的几点建议
- MySQL性能优化建议
- MySQL性能优化之Open_Table配置参数的合理配置建议
- MySql――性能优化建议
- mysql标准的21条实践性能优化经验分享 实用的mysql优化建议
- MySQL性能优化的建议