E14回滚BIOS版本

   日期:2024-12-27    作者:03l5j 移动:http://3jjewl.riyuangf.com/mobile/quote/65791.html


不同存储引擎中关键参数优化

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 存储引擎 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时为打开状态,也就是设置所有表为独立表空间,一个表一个存储数据文件。同时要设置
Innodb_open_files(同时打开文件数)。因为每个表对应一个数据文件,所以需要设置同时打开文件的数量以保证查询多表的情况,并且想要把某个表移出的别的磁盘时共享表空间是无法迁移的,因为所有表都使用着共享表空间。
默认是所有表都放到共享空间中。也就是OFF

innodb 存储引擎9

Innodb_flush_log_at_trx_commit 核心参数:
0:每秒将log buffer的内容写事务日志并且刷新到磁盘
1:每个事务提交后,将log buffer的内容写事务日志并写入数据磁盘
2:每个事务提交,将log buffer内容写事务日志,但是不进行数据刷盘
Sync_binlog
双一致模式: innodb_flush_log_at_trx_commit=1;sync_binlog=1;这样的主从数据是一致的,不会丢数据。
官方参数描述地址: http://dev.mysql.com/doc/refman/5.6/en/innodb-parameters.html

NUMA(双实例下,可以把每一个实例放到numa单独控制的节点下面)
在os层numa关闭时,打开bios层的numa会影响性能,QPS会下降15-30%左右;
在bios层面numa关闭是,无论os层面的numa是否打开,都不会影响性能。
系统优化 jemalloc
网卡优化:RPS+RFS

malloc
1)、下载jemalloc源码包
wget http://www.canonware.com/download/jemalloc/jemalloc-3.6.0.tar.bz2
tar -xjf jemalloc-3.6.0.tar.bz2
2)、编译安装
cd jemalloc-3.6.0; https://blog.51cto.com/u_16099261/configure;make &make install
3)、配置MySQL
[mysqld_safe]
malloc-lib=$PATH/libjemalloc.so
4)、参考文档:http://blog.chinaunix.net/uid-29957450-id-4547818.html


特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


举报收藏 0评论 0
0相关评论
相关最新动态
推荐最新动态
点击排行
{
网站首页  |  关于我们  |  联系方式  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号