博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql中影响myisam引擎写入性能的三项设置
阅读量:5894 次
发布时间:2019-06-19

本文共 1290 字,大约阅读时间需要 4 分钟。

一.LOW_PRIORITY

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

SQL语句中使用示例:

UPDATE LOW_PRIORITY table_name SET colomu='val' WHERE id=1;

该关键字同样可以在my.cnf中设置,调低所有的写入优先级.

需要说明的是,执行带有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.由于立即返回,可能无法获得插入的主键值.

转载于:https://www.cnblogs.com/itfenqing/p/6133677.html

你可能感兴趣的文章
awaitTermination 使用注意
查看>>
那些出现在电影中的程序代码
查看>>
Docker Registry
查看>>
VFS: Cannot open root device "nfs" or unknown-b...
查看>>
Android通过发送Intent播放本地视频和网络视频
查看>>
Spring定时任务的几种实现
查看>>
QT windows开发环境搭建(记录)
查看>>
javascript 的this指针
查看>>
Lua程序设计 无状态的迭代器
查看>>
学习 Sea.js 笔记(一)
查看>>
solr5.0入门
查看>>
程序思考
查看>>
p6spy简单使用
查看>>
ssh免密码登陆配置的问题
查看>>
windows8下:OpenCV2.2.0 +VS2005/2008/2010
查看>>
PHP 超简单下载文件
查看>>
Open Office Installation on Linux 7
查看>>
求开源 求自由!
查看>>
优化的NSLog技巧
查看>>
.Net OpenFileDialog Filter识别异常
查看>>