MySQL教程教程:MySQL性能优化的缓存参数优化
1。query_cache_size / query_cache_type(全球)
查询缓存的作用在整个MySQL实例,它主要用于MySQL,结果集缓存,结果集的SQL语句执行,所以它只能用于SELECT语句。我们打开查询缓存功能时,MySQL收到请求后一个SELECT语句,如果语句满足缓存查询要求(没有明确说明使用查询缓存,不允许或明确申明需要使用查询缓存,MySQL)将直接SELECT语句接受散列为一个字符串的方式设定的哈希算法,然后找到查询缓存已经直接缓存,说,如果你已经在缓存中,选择请求将直接返回数据,从而省略了随后的步骤,如解析SQL语句、优化优化器和向存储引擎请求数据等,极大地提高了性能。
当然,查询缓存也有一个致命的缺陷,那就是,当表的任何数据有任何变化时,它将导致所有引用语句的SELECT语句在查询缓存缓存数据中失效,因此,当我们的数据变化非常频繁时,查询缓存的使用可能不值得。
查询缓存的使用需要多个参数匹配。最关键的是query_cache_size和query_cache_type。前者建立缓存结果集的内存大小,后者是建立在什么情况下使用查询缓存。在过去的经验,如果MySQL不是用来缓存数据基本不变,query_cache_size一般256MB大小合适。当然,这可以通过计算查询缓存命中率调整(qcache_hits /(qcache_hits + qcache_inserts)×100)。query_cache_type可设置为0(关闭)、1(上)或2(DEMOND),分别,没有查询缓存的使用,除了明确要求不使用查询缓存(sql_no_cache)所有选择查询缓存,只使用查询缓存显示要求(sql_cache)。
二,binlog_cache_size(全球)
binlog缓存用于打开二进制日志(binlog)记录环境的功能。这是一个内存区专为MySQL来提高binlog记录效率,它binlog临时缓存数据在很短的时间。
一般来说,如果在我们的数据库中没有大的交易,写的不是特别频繁,2mb 4MB是一个合适的选择。但如果数据库很大,写作量较大,可适当调整binlog_cache_size。同时,我们可以用binlog_cache_use和binlog_cache_disk_use分析是否binlog_cache_size集是不够的,无论是大量的binlog_cache的临时文件缓存(binlog_cache_disk_use)因为内存不足。
三、key_buffer_size(全球)
Key Buffer是最熟悉的一个MySQL缓存参数,特别是当MySQL没有更改默认存储引擎,很多朋友可能会发现在内存参数的默认mysql的配置文件是最大的这个参数,key_buffer_size参数用于设置用于在MyISAM存储引擎的索引文件缓存的内存面积的大小。如果我们有足够的内存,缓存区是最能够储存我们所有的MyISAM引擎的表的所有索引,从而提高性能尽可能。
此外,当我们使用MyISAM存储,还有重要的一点要注意。由于MyISAM引擎的特点,他只缓存索引块为记忆而不是缓存表的数据库块。因此,我们的SQL必须过滤条件的指标尽可能使缓存有助于提高查询效率。
四、bulk_insert_buffer_size(线程)
key_buffer_size一样,这个参数也只能在MyISAM存储引擎,这是用来缓存临时缓存数据时数据批量插入。当我们使用下面的数据写的声明,我们将使用这个内存区域来缓存批量结构数据帮助批量写入到数据文件。
复制代码代码如下:插入…选择…
插入……值(…),(…)(…)…
LOAD DATA INFILE…到…(非空表)
五、innodb_buffer_pool_size(全球)
当我们使用InnoDB存储引擎,innodb_buffer_pool_size参数可能会影响我们的表现的一个关键参数,它用来设置内存区域的大小缓存InnoDB索引和数据块,当然key_buffer_size参数,类似于MyISAM存储引擎,将更像Oracle db_cache_size.in短,当我们使用InnoDB表,所有返回的数据或用于数据处理的任何索引块将在该存储器访问。
对于MyISAM和key_buffer_size引擎,innodb_buffer_pool_size设置一块内存区域和最大InnoDB存储引擎的需求规模,对InnoDB存储引擎的性能直接相关,所以如果我们有足够的内存,这个参数可以被设置为玩够了,尽可能把对InnoDB的缓存区的指标和数据,直到所有。
我们可以计算出缓存命中率(innodb_buffer_pool_read_requests - innodb_buffer_pool_reads) / innodb_buffer_pool_read_requests×100%,根据命中率innodb_buffer_pool_size参数优化。
六、innodb_additional_mem_pool_size(全球)
我们经常调整的参数不多,很多人都使用默认值,可能很多人不该parameter.innodb_additional_mem_pool_size InnoDB功能太熟悉设置的存储引擎的大小来存储数据字典信息和一些内部数据结构的内存空间,所以当我们有了一个MySQL数据库对象的实例非常多,是需要调整的参数的大小以确保所有的数据可以存储在内存提高访问效率。
参数大小是否足够还很容易知道,因为当MySQL太小时,警告将信息记录到数据库的错误日志中。这时,您将知道参数的大小应该被调整。
七、innodb_log_buffer_size(全球)
这是由InnoDB存储引擎的事务日志所使用的缓冲区。类似于Binlog Buffer InnoDB,写入事务日志时,为了提高性能,还写信息给Innofb Log Buffer第一,当相应的条件满足innodb_flush_log_trx_commit参数设置(或日志缓冲区满),会写到日志文件(或同步到磁盘),最大内存空间,它可以用可设定的innodb_log_buffer_size参数。
注:本innodb_flush_log_trx_commit参数对Innodb日志写入性能的一个非常关键的影响。该参数可以设置为0, 1,和2,这说明如下:
0:日志缓冲区数据将以每秒一次的频率写入日志文件,并在文件系统同时对磁盘进行同步操作,但每个事务的提交不会触发日志文件系统中的任何日志缓冲区来刷新或刷新磁盘操作;
1:在每次事务时,日志缓冲区中的数据将被写入日志文件,并触发文件系统与磁盘的同步;
2:事务提交触发日志缓冲区刷新到日志文件,但它不会触发磁盘文件系统与磁盘的同步。此外,每秒将有一个文件系统到磁盘同步。
此外,文件还提到,MySQL机制同步每秒一次这些设置可能无法完全保证每一秒的精度,而且还取决于进程调度的问题。事实上,InnoDB可以满足参数设定值代表正常恢复的意义或不同操作系统的文件系统和磁盘本身的限制,有时并没有真正完成会告诉mysqld已完成磁盘同步。
八、innodb_max_dirty_pages_pct(全球)
此参数与上面的参数是不同的,他不是用于数据高速缓存的内存大小的一个参数设置,可用于控制InnoDB缓冲池可以不脏页率写入数据文件(已固定而不是写入数据文件的脏数据存储器)的大。比,从内存到磁盘的写操作会相对减少,所以写操作的磁盘IO可以一定程度的降低。
然而,如果这个比值太大,时间后数据库死机重启可以很长,因为会有大量的交易数据需要从日志文件恢复和写入数据文件。同时,过大的比例也可能的比例设定上限的原因冲洗过度操作,这导致了一个高性能的波动。
以上参数是MySQL中减少磁盘物理IO的主要参数,对MySQL的性能起着至关重要的作用。
优化实例:
根据mcsrainbow朋友的请求,这是从以往经验获得的相关参数的建议值:
1.query_cache_type:如果你一直使用InnoDB存储引擎,它是推荐的是0。如果你使用MyISAM存储引擎,它是推荐的是2。同时,在SQL语句显式控制哟,你GQuery缓存。
2.query_cache_size:是根据命中率调整(qcache_hits /(qcache_hits + qcache_inserts)* 100)。一般不推荐。256mb可能几乎相同。大配置静态数据可以适当调整。
3.binlog_cache_size:一般环境2mb 4MB是一个合适的选择。更大的数据库和大型交易数据库可以适当放大,但32mb不推荐。
如果4.key_buffer_size:不使用MyISAM存储引擎,16mb足以缓存系统表的信息,如果你使用MyISAM存储引擎把所有指标的记忆尽可能多的,越大越好,越好越好。
如果5.bulk_insert_buffer_size:经常需要批量插入特殊指令插入数据(以上),可以适当扩大到16MB到32MB。不建议增加8mb。
6.innodb_buffer_pool_size:如果你不使用InnoDB存储引擎,你可以调整这个参数。如果你想使用它,如果你想使用的内存,可以存储所有InnoDB数据文件存储尽可能多的,而且是越大越好。
7.innodb_additional_mem_pool_size:一般数据库的建议进行调整~ 16mb 8MB。如果有太多的表,它可以调整为32MB,并可根据错误日志中的信息来判断。
对8.innodb_log_buffer_size默认:是1MB,可适当增加到4MB 8MB如果系统频繁。当然,如前所述,这个参数实际上是其他冲洗参数有关。一般来说,不建议超过32mb
9。innodb_max_dirty_pages_pct:,根据过去的经验,重新启动和恢复数据的速度会变慢,几乎不能接受的如果是在1gb。因此,不建议超过1GB / innodb_buffer_pool_size(GB)* 100.of课程,如果你能忍受漫长的启动时间和想减少内存刷新,你可以调整这个值为90,但不建议超过90。
注:以上范围只是一些优化,根据以往经验所遇到的场景数据库i值,不一定适用于所有场景,所以在实际优化分析过程中我们还需要不断调整,也欢迎通过邮件沟通优化或架构技术与我联系。共同学习。