my.cnf(my.ini)重要参数优化配置说明

论坛 期权论坛 脚本     
niminba   2021-5-23 04:17   1573   0

MyISAM存储引擎

MyISAM存储引擎适用于读多写少,对读性能要求比较高的系统

官方文档:http://dev.mysql.com/doc/refman/5.6/en/myisam-storage-engine.html

Key_buffer_size,可以设置为内存的30%-40%左右。通过show variables like ‘%key_buffer_size%';

通过 show global status like ‘%key_blocks_unused%' 查看是否还有剩余,如果剩余很多,就不需要再加大key_buffer_size了
如果不用MyISAM,建议设置16m到32m就可以了

Query_cache 如果应用程序有大量读且应用程序级别没有缓存,设置这个会比较有用,但是也别太大,维护开销比较大,mysql反而会变慢,建议32m到512m

Sort_buffer_size当进行复杂查询时候用到,建议8m到16m

Query_cache_size缓存select查询结果,如果有大量相同查询,可以将这个值加大。

Bulk_insert_buffer_size 批量insert时候使用,必须小于key_buffer_size

Read_rnd_buffer_size sql有order by的情况下并且第二次查询时候就会用到,他会记录排序,将直接从内存中读取。

Thread_cache_size cache中保留多少线程重用,如果再设置的值内,线程断开也不会销毁,等待新链接。减少线程创建的开销。

参数官方参考文档:http://dev.mysql.com/doc/refman/5.6/en/optimizing-myisam.html

Innodb 存储引擎

Innodb 存储引擎 1

并发线程数:Innodb_thread_concurrency=0[默认],并不是说没有并发,而是指无限并发,没有并发检查。innodb内部自己控制
取值0到1000

建议:

Cpu数量+磁盘数量 * 2,如果有RAID主备,就不乘2,因为有备份磁盘

Innodb 存储引擎 2

Innodb_io_capacity默认值是200,个人认为是表示磁盘IO的吞吐量,innodb每秒后台进程处理IO操作的数据页上限

Innodb_io_capacity_max默认2000,设置IO上线

源码:在innodb存储引擎层搜索srv_io_capacity(主要在srv0srv.c文件中)

当使用SSD可以再调高一些,直到符合磁盘IO吞吐量即可

Innodb 存储引擎 3

innodb_max_dirty_pages_pct innodb从innodb buffer中刷新脏页的比例15% - 80%

源码:在innodb存储引擎层搜索srv_max_buf_pool_modified_pct(主要在srv0srv.c文件中)

Innodb 存储引擎 4 [重要]

innodb_flush_method( O_DSYNC 、 O_DIRECT )

O_DSYNC:InnoDB使用O_SYNC模式打开并更新日志文件,用fsync()函数去更新数据文件。

O_DIRECT:InnoDB使用O_DIRECT模式打开数据文件,用fsync()函数去更新日志和数据文件

在raid设备上,为了避免数据被innodb_buffer和raid多次cache,设置为O_DIRECT方式。也就是说直接打开数据文件,不用打开日志文件了。

源码:在innodb存储引擎层搜索srv_unix_file_flush_method(主要在log0log.c、os0file.c文件中)

Innodb 存储引擎 5 【重要】

innodb_buffer_pool_size

Innodb会遵循lru,在录入数据的时候会根据数据的情况,会加载到innodb_buffer_pool_size 中。如果操作数据的时候就省去了去数据文件中查找,直接从内存中找到了。

一般设置内存的80%左右,但需要考虑数据文件的总量是多大。Buffer_pool_size + 数据量所占容量 + 操作系统所用内存 = 内存大小。尽可能设置多一些。

源码:在innodb存储引擎层搜索srv_buf_pool_size(在srv0srv.c、srv0start.c文件中)。

Innodb 存储引擎 6

innodb_buffer_pool_instances 当有多实例的情况下,需要设置。

源码:在innodb存储引擎层搜索srv_buf_pool_instances(主要集中在的buf0buf.c文件)

Innodb 存储引擎 7

innodb_log_file_size 日志文件大小

innodb_log_buffer_size 日志缓存大小

先写入innodb_log_buffer,buffer写满或事务提交,刷新数据,大事务频繁,增加innodb_log_buffer_size大小,默认16M。

源码:在innodb存储引擎层搜索srv_log_buffer_size(主要在log0log.c文件中)

Innodb 存储引擎 8 【重要】

Innodb_file_per_table

当设置Innodb_file_per_table 为1时为打开状态,也就是设置所有表为独立表空间多运用,特别是从MyISAM表转过来的是可以的, # 它的意思是不写入硬盘而是写入系统缓存。日志仍然会每秒flush到硬盘,所以你一般不会丢失超过1-2秒的更新。 # 设成0会更快一点,但安全方面比较差,即使MySQL挂了也可能会丢失事务的数据。而值2只会在整个操作系统挂了时才可能丢数据) innodb_flush_log_at_trx_commit = 2 # 用来缓冲日志数据的缓冲区的大小. # 当此值快满时, InnoDB将必须刷新数据到磁盘上. # 由于基本上每秒都会刷新一次,所以没有必要将此值设置的太大(甚至对于长事务而言) innodb_log_buffer_size = 16M # 在日志组中每个日志文件的大小. # 你应该设置日志文件总合大小到你缓冲池大小的25%~100% # 来避免在日志文件覆写上不必要的缓冲池刷新行为. # 不论如何, 请注意一个大的日志文件大小会增加恢复进程所需要的时间 innodb_log_file_size = 1024M # 在日志组中的文件总数. # 通常来说2~3是比较好的. innodb_log_files_in_group = 3 # InnoDB的日志文件所在位置. 默认是MySQL的datadir. # 你可以将其指定到一个独立的硬盘上或者一个RAID1卷上来提高其性能 #innodb_log_group_home_dir # 在InnoDB缓冲池中最大允许的脏页面的比例. # 如果达到限额, InnoDB会开始刷新他们防止他们妨碍到干净数据页面. # 这是一个软限制,不被保证绝对执行. innodb_max_dirty_pages_pct = 90 # InnoDB用来刷新日志的方法. # 表空间总是使用双重写入刷新方法 # 默认值是 “fdatasync”, 另一个是 “O_DSYNC”. innodb_flush_method=O_DSYNC # 在被回滚前,一个InnoDB的事务应该等待一个锁被批准多久. # InnoDB在其拥有的锁表中自动检测事务死锁并且回滚事务. # 如果你使用 LOCK TABLES 指令, 或者在同样事务中使用除了InnoDB以外的其他事务安全的存储引擎 # 那么一个死锁可能发生而InnoDB无法注意到. # 这种情况下这个timeout值对于解决这种问题就非常有帮助. innodb_lock_wait_timeout = 30 [mysqldump] # 不要在将内存中的整个结果写入磁盘之前缓存. 在导出非常巨大的表时需要此项 quick max_allowed_packet = 64M [mysql] no-auto-rehash [myisamchk] key_buffer_size = 512M sort_buffer_size = 512M read_buffer = 8M write_buffer = 8M [mysqlhotcopy] interactive-timeout [mysqld_safe] # 增加每个进程的可打开文件数量. # 警告: 确认你已经将全系统限制设定的足够高! # 打开大量表需要将此值设大 open-files-limit = 8192 log-error=/usr/local/mysql/mysqld.log pid-file=/usr/local/mysql/mysqld.pid

MYSQL的性能优化不单单是这些内容,还有很多大家可以在我们站上搜索其它MYSQL性能优化方案

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1060120
帖子:212021
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP