现在,Innodb是Mysql最多使用的存储引擎。其性能一直广受关注。本文通过基本的参数设置来提高其性能。

innodb_buffer_pool_size

缓冲池大小。这是innodb参数中最重要的设置。务必要设置正确的大小,确保innodb分配了足够的内存。一般值为可用内存的70%~80%。下面两幅图是此参数设置前后的对比。


使用的基测工具是sysbench。测试语句为:
sysbench –num-threads=16 –test=oltp –mysql-table-engine=innodb
–mysql-host=localhost –mysql-db=test –oltp-table-size=5000000
–mysql-user=root –mysql-password=mysql run

图一为默认参数配置。图二设置innodb_buffer_pool_size大小为2G。可以看到TPS和QPS都有了显著的提高。

innodb_buffer_pool_instances

缓冲池实例数量。在MySQL5.5中默认值为1,在MySQL5.6中为8.这个值范围是1~64.适当提高其值,在高并发环境中可以减少全局互斥锁的争用。

innodb_log_file_size

innodb日志文件大小。足够大的Innodb事务日志是至关重要的,可以提高写性能。在MySQL5.6中默认值为50M。在很多工作环境中,这值还是太小了。具体如何设置可以参考http://www.mysqlperformanceblog.com/2008/11/21/how-to-calculate-a-good-innodb-log-file-size/。这里只是简单的总结下。
我们可以通过

PgSQL
mysql> show global status like 'Innodb_os_log_written';select sleep(60);show global status like 'Innodb_os_log_written';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| Innodb_os_log_written | 3584  |
+-----------------------+-------+
1 row in set (0.00 sec)

+-----------+
| sleep(60) |
+-----------+
|         0 |
+-----------+
1 row in set (1 min 0.04 sec)

+-----------------------+--------+
| Variable_name         | Value  |
+-----------------------+--------+
| Innodb_os_log_written |  19200112 |
+-----------------------+--------+
1 row in set (0.00 sec)

mysql>  select (19200112-3584)*60 /1024/1204 as MB_PER_HOUR;
+--------------+
| MB_PER_HOUR  |
+--------------+
| 934.21641404 |
+--------------+
1 row in set (0.00 sec)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
mysql> show global status like 'Innodb_os_log_written';select sleep(60);show global status like 'Innodb_os_log_written';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| Innodb_os_log_written | 3584  |
+-----------------------+-------+
1 row in set (0.00 sec)
 
+-----------+
| sleep(60) |
+-----------+
|         0 |
+-----------+
1 row in set (1 min 0.04 sec)
 
+-----------------------+--------+
| Variable_name         | Value  |
+-----------------------+--------+
| Innodb_os_log_written |  19200112 |
+-----------------------+--------+
1 row in set (0.00 sec)
 
mysql>  select (19200112-3584)*60 /1024/1204 as MB_PER_HOUR;
+--------------+
| MB_PER_HOUR  |
+--------------+
| 934.21641404 |
+--------------+
1 row in set (0.00 sec)

根据文中所述,日志大小可以满足服务器活动1小时的容量。上面可以看到1小时的容量是934M。MySQL默认使用两个日志文件,应该设置innodb_log_file_size=500M。

innodb_log_buffer_size

innodb日志缓存大小。innodb会把数据更改记录写入到日志缓存中。如果缓存满了,才会写入到磁盘中。增大innodb_log_buffer_size,会有效的减少I/O次数。一般的值为4M或者8M。

innodb_flush_log_at_trx_commit

事务提交刷新日志标记。当此值为1时,在每次事务提交后会刷新日志缓存,并写入到磁盘中。这保证了数据的完整性,但是对性能有一定的影响。值为2时,每次事务提交后,日志缓冲区会被刷新到系统文件缓存。这是性能最优的。但是一旦系统崩溃,可能会导致部分事务数据的丢失。

innodb_thread_concurrency

innodb线程并发数。默认值是0,一般情况下不需要改变。如果遇到并发问题,可以把值设置为CPU和磁盘数量的2倍。此值可以动态改变而无需重启MySQL服务器。

http://blog.bruceding.com/233.html

Innodb性能优化之参数设置的更多相关文章

  1. mysql innodb 性能优化

    建议参数: max_connections=800 key_buffer_size=512M query_cache_size=128M sort_buffer_size=64M table_open ...

  2. Apache性能优化、超时设置,linux 重启apache

    在httpd.conf中去掉Include conf/extra/httpd-default.conf前的#以使httpd-default.php生效.其中调节以下参数Timeout 15 (连接超时 ...

  3. 数据库相关文章转载(1) MySQL性能优化之参数配置

    1.目的: 通过根据服务器目前状况,修改Mysql的系统参数,达到合理利用服务器现有资源,最大合理的提高MySQL性能. 2.服务器参数: 32G内存.4个CPU,每个CPU 8核. 3.MySQL目 ...

  4. MySQL性能优化之参数配置

    1.目的: 通过根据服务器目前状况,修改Mysql的系统参数,达到合理利用服务器现有资源,最大合理的提高MySQL性能. 2.服务器参数: 32G内存.4个CPU,每个CPU 8核. 3.MySQL目 ...

  5. Mysql性能优化之参数配置(转)

    前言: Mysql作为数据库中广泛应用的开源产品,需要面对不同的生产压力,而有些性能问题通过配置优化就可以得到解决,优化可以分为几个方向:1.优化参数配置.2.优化数据库索引.3.优化数据库结构,如分 ...

  6. (转) mysql数据库引擎:MyISAM和InnoDB(性能优化)

    转自 http://yuwensan126.iteye.com/blog/1138022 Mysql 数据库中,最常用的两种引擎是innordb和myisam.Innordb的功能要比myiasm强大 ...

  7. MySQL数据库在IO性能优化方面的设置选择(硬件)

    提起MySQL数据库在硬件方面的优化无非是CPU.内存和IO.下面我们着重梳理一下关于磁盘I/O方面的优化. 1.磁盘冗余阵列RAID RAID(Redundant Array of Inexpens ...

  8. MySQL性能优化-内存参数配置

    Mysql对于内存的使用,可以分为两类,一类是我们无法通过配置参数来配置的,如Mysql服务器运行.解析.查询以及内部管理所消耗的内存:另一类如缓冲池所用的内存等. Mysql内存参数的配置及重要,设 ...

  9. JVM性能优化--JVM参数配置,使用JMeter简单测试配合说明参数调优

    一.JVM参数配置 1.常见参数配置 -XX:+PrintGC 每次触发GC的时候打印相关日志 -XX:+UseSerialGC 串行回收 -XX:+PrintGCDetails 更详细的GC日志 - ...

随机推荐

  1. oc18--self1

    // // Iphone.h // day13 #import <Foundation/Foundation.h> typedef enum { kFlahlightStatusOpen, ...

  2. Additive equations--zoj

    Additive equations Time Limit: 10 Seconds      Memory Limit: 32768 KB We all understand that an inte ...

  3. BZOJ 2288 贪心 +链表

    思路: 放个题解好吧. http://www.cnblogs.com/zyfzyf/p/4114774.html //By SiriusRen #include <queue> #incl ...

  4. 利用@factory和@dataProvider实现参数化

    利用构造函数将要用的的参数初始化,非常有利于简化脚本.它将外部的数据赋给本地的变量,可以使得初始化后的参数被其他方法使用.直接上代码: private String url;    private S ...

  5. merge into语句的使用

    merge语法是根据源表对目标表进行匹配查询,匹配成功时更新,不成功时插入. 其基本语法规则是 merge into 目标表 a using 源表 b on(a.条件字段1=b.条件字段1 and a ...

  6. javascript中变量命名冲突的问题

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. RAP开发入门-布局管理

    布局类继承关系 FillLayout  new FillLayout(SWT.VERTICAL/HORIZONTAL)设置竖直/水平填充 RowLayout wrap折行显示.pack自适应布局(布局 ...

  8. mongodb报错一例

    开发程序报错信息: Caused by: com.mongodb.MongoException: Executor error: OperationFailed: Sort operation use ...

  9. 基于libVLC的视频播放器

    本文来自于:http://blog.csdn.net/leixiaohua1020/article/details/42363079 最简单的基于libVLC的例子:最简单的基于libVLC的视频播放 ...

  10. forEach 列出数组的每个元素:

    数组.forEach便利所有的元素 array.forEach(function(currentValue, index, arr), thisValue) function(currentValue ...