21MySQL优化建议(经验总结)
1。为了确保有足够的内存
数据库可以高效运行,最重要的构建因素需要更多的内存,可以缓存数据,可以在内存中更新,但不同的企业需要不同的内存强度。推荐的内存占15-25%的数据。特别是热数据,内存需要达到数据库的80%。
2。需要更多更快的CPU
MySQL 5.6可以利用64个核心,而MySQL每个查询只能在一个CPU上运行,因此需要更多的CPU,而更快的CPU将是更多的并发。
三.选择合适的操作系统
在官方的推荐,估计是最值得推荐的Solaris是CentOS。雷尔是从实际生产的一个很好的选择。建议使用CentOS和雷尔版本6。当然,Oracle Linux也是一个不错的选择,虽然Windows在MySQL 5.5之后进行了优化,但不建议使用Windows。在高并发环境中
4。合理优化系统参数
改变文件处理改 u2013 N默认1024太小
进程数限制ulimit -u不同版本是不同的
NUMA numctl交错=所有
5。选择适当的内存分配算法
默认的内存分配是C的malloc现在也有很多优化的内存分配算法:
jemalloc和tcmalloc
支持MySQL 5.5之后的声明中的存储方法。
复制代码代码如下所示:
{ mysqld_safe }
tcmalloc malloc库=
或直接到SO文件
复制代码代码如下所示:
{ mysqld_safe }
malloc库= / usr / / / libtcmalloc_minimal.so本地库
6。使用更快的存储设备SSD或固态卡
存储介质大大影响MySQL的随机读写速度的更新,新一代的存储设备的出现,固态SSD固态卡,也使MySQL的辉煌,和淘宝已经在IOE取得了一场漂亮仗。
7。选择一个好的文件系统
推荐XFS,ext4,如果你还在使用ext2,ext3的学生请尽快提高水平possible.xfs推荐,这是Linux支持的文件系统相同的时间。
文件系统是强烈推荐:XFS
8。优化挂载文件系统的参数
安装XFS参数:
复制代码代码如下:(RW,noatime,nodiratime,nobarrier)
安装ext4的参数:
复制代码代码如下:ext4(RW,noatime,nodiratime,nobarrier,数据=命令)
如果需要使用SSD或固态磁盘:
innodb_page_size = 4k
innodb_flush_neighbors = 0
9。选择适当的IO调度
请使用期限默认为空
复制代码代码如下:回波期> / / / {系统块dev-name } / /调度队列
10。选择适当的RAID卡缓存策略
请用过RAID和启用写回,这是加速的重做日志,二进制日志好,和数据文件。
11。禁用查询缓存
查询缓存在InnoDB小鸡。InnoDB本身的数据可以缓存在InnoDB缓冲池。查询缓存属于结果集缓存。如果我们打开查询缓存,更新写,我们需要检查缓存,但增加了写作成本。
在MySQL 5.6中,查询缓存被禁止。
12。使用线程池
现在,数据对应了5多个应用程序场景,但MySQL具有一个特性。随着连接的增加,性能下降。因此,对于超过200的未来场景的连接,请考虑线程池的使用,这是一项伟大的发明。
13。合理的记忆调节
13.1减少连接的内存分配
你可以使用thread_cache_size连接缓存,查看多线程池是可怕的,分配的内存数据库的如下:
复制代码代码如下所示:
max_used_connections *(
read_buffer_size +
read_rnd_buffer_size +
join_buffer_size +
sort_buffer_size +
binlog_cache_size +
thread_stack +
2×net_buffer_length…
)
13.2建立更大的缓冲池
将60-80%的记忆innodb_buffer_pool_size。,不超过数据的大小,和不分配超过80%或用它来交换。
14。日志刷新机制的合理选择
重做日志:
复制代码代码如下所示:
- innodb_flush_log_at_trx_commit = 1 / /最安全
- innodb_flush_log_at_trx_commit = 2 / /性能好
- innodb_flush_log_at_trx_commit = 0 / /最好的爱
Binlog:
binlog_sync = 1需要集团提交的支持,如果你没有这个功能,你可以考虑更好的性能binlog_sync = 0。
数据文件:
复制代码如下:innodb_flush_method = o_direct
15。请使用InnoDB表
在线修改操作可以用更多的资源改善。非中文全文也支持,和Memcache API访问的支持。目前,它也是MySQL最好的发动机。
如果你还在MyISAM,请考虑快速转换。
16。设置一个更大的重做日志
当Percona 5.5和官方MySQL 5.5的性能相匹配,提示这是赢得4G以上的重做日志,和官方MySQL5.5重做日志不能超过4G的。在MySQL 5.6之后,它可能超过日志。通过查看重做日志生成的数量,您可以分配重做日志超过一个小时。
17。优化磁盘的IO
innodb_io_capactiy配置800 SAS 15000转下,并配置2000多下SSD。
在MySQL 5.6中:
复制代码代码如下所示:
innodb_lru_scan_depth = innodb_io_capacity / innodb_buffer_pool_instances
innodb_io_capacity_max = min(2000, 2×innodb_io_capacity)
18。使用独立的表空间
目前,这些新功能都是独立的表空间支持:
截断表空间回收
表空间传输
优化管理绩效,如碎片等,
总的来说,使用独立的表空间是没有用的。
19。配置合理的并发
innodb_thread_concurrency =并发此参数也在InnoDB中最常见的参数,不同的版本可能会在不同的版本有所不同。一般建议:
在使用线程池的情况下:
innodb_thread_concurrency = 0是好的。
如果没有线程池,
5.5建议:innodb_thread_concurrency = 16 - 32
5.6推荐innodb_thread_concurrency = 36
20。优化事务隔离级别
默认是可重复读取。
建议使用READ COMMITTED binlog格式使用混合或行
较低的隔离级别=更好的性能
21。重点监控
没有任何环境监测,如果监测不太可能,盲人摸象。Zabbix + MPM建议建立监测。