mysql中影响myisam引擎写入性能的三项设置

一.LOW_PRIORITY
1.对于myisam默认是写操做优先,读操做滞后.经过该项更改,可使读操做优先,写操做在有空闲的时候再写入.但该项可能在理论上形成,写被永远阻塞.php

SQL语句中使用示例:
UPDATE LOW_PRIORITY table_name SET colomu='val' WHERE id=1;mysql


该关键字一样能够在my.cnf中设置,调低全部的写入优先级.sql

须要说明的是,执行带有LOW_PRIORITY关键字的写入,线程必须等待执行完才会返回,并不是是异步,而是同步,因此建议将其放入队列去写入.
该关键字在discuz等成熟php+mysql系统中,都有使用.服务器


二.DELAY_KEY_WRITE并发

1.默认情形下,每次写入有索引的数据表,都会直接将索引更新到磁盘,该项将会将索引更新保存在内存中,直到该表关闭的时候,才将索引更新到磁盘异步

2.该项能够在create table时指定,或者alter table sometable delay_key_write =1线程

3.若是断电或系统崩溃,索引没有及时更新到磁盘,下次启动mysql时将须要修复数据表索引

4.经过手动flush table或者设置flush_time来指定多久flush table一次队列

5.该项参数受mysql配置参数delay_key_write影响内存

a.on,表示仅仅对表结构中使用了delay_key_write的myisam表起做用
b.off,不起做用,即使制定了delay_key_write
c.ALL,对全部的myisam起做用,不论有没有指定delay_key_write

 

三.INSERT DELAYED
1.DELAYED调节符应用于INSERT和REPLACE语句。当DELAYED插入操做到达的时候, 服务器把数据行放入一个队列中,并当即给客户端返回一个状态信息,这样客户端就能够在数据表被真正地插入记录以前继续进行操做了。若是读取者从该数据
表中读取数据,队列中的数据就会被保持着,直到没有读取者为止。接着服务器开始插入延迟数据行(delayed-row)队列中的数据行。在插入操做的同时,服务器还要检查是否有新的读取请求到达和等待。若是有,延迟数据行队列就被挂起,容许读取者继续操做。当没有读取者的时候,服务器再次开始插入延迟的数据行。这个过程一直进行,直到队列空了为止。

2.对于myisam表,若是没有空洞,insert和select是并发的(须要查看系统中参数,看是否支持该行为),不多会用到.
查看myisam是否支持并发插入
SHOW VARIABLES LIKE 'concurrent_insert'

Variable_name Value
concurrent_insert 1

#0,关闭该功能
#1,无空洞时支持并发插入到数据表末尾(默认)
#2,为全部MyISAM表启用并行插入

3.因为当即返回,可能没法得到插入的主键值.

相关文章
相关标签/搜索