zoukankan      html  css  js  c++  java
  • mysql中影响myisam引擎写入性能的三项设置

    一.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.由于立即返回,可能无法获得插入的主键值.

  • 相关阅读:
    你不知道的 JavaScript 系列中( 21 ) -尽量不要使用 Object()/Function()/RegExp()
    你不知道的 JavaScript 系列中( 20 ) - 永远不要创建和使用空单元数组
    你不知道的 JavaScript 系列中( 19 ) - 封装对象拆封
    你不知道的 JavaScript 系列中( 18 ) - 封装对象包装
    你不知道的 JavaScript 系列中( 17 ) - 内部属性[[Class]]
    你不知道的 JavaScript 系列中( 16 ) - 原生函数
    node 切换 安装
    Mac  nginx  安装
    cnpm 安装
    2020年面试及入职新公司的痕迹
  • 原文地址:https://www.cnblogs.com/itfenqing/p/6133677.html
Copyright © 2011-2022 走看看