`

MySQL DELAY_KEY_WRITE

 
阅读更多
MySQL DELAY_KEY_WRITE
引自http://hi.baidu.com/soyah/item/44c7447db4910f336cc37c0d
插入大数据时,有索引会很慢,可以DISABLE KEYS,或者直接在table中加入DELAY_KEY_WRITE

1.
LOCK TABLES `test` WRITE;
ALTER TABLE `test` DISABLE KEYS ;

INSERT INTO `test` VALUES (1,'???',80,1),(2,'???',90,2),(1,'李四',80,3),(2,'王五',90,4),(1,'aa',12,5),(3,'aa',123,6),(4,'aadwa',123,7);

ALTER TABLE `test` ENABLE KEYS;
UNLOCK TABLES;

2.
最近天天MySQL负载经常一会高,一会低的不稳定。整天还被perl 折腾着,晕死了。 首先, iostat -x 1看看是不是 io 瓶颈较大。iowait 才 0.45 见鬼,多又是程序问题。top 一下看看了 mysqld 消耗CPU非常厉害估计又是程序问题。用我的per程序取了下 MySQL的数据发现 key_writes / key_write_request 几乎接近 1了。晕说明,update,delete, insert  语句非常平凡。最后看了 binlog 仅1小时 有个表 有1w多次 UPDATE操作, 看来需要 打开 delay_key_write 了。这个参数只对 MyISAM有效,可以再create table 时指定 delay_key_write ,如果表已经存在可以使用 alter table sometable delay_key_write =1; 如果你的某个表有很多update操作,这个参数的优势会很好的体现出来。因为这个参数能延迟更新索引到表关闭。当我们需要经常跟新一个大表的时候,可以考虑使用这个参数。 那么,表关闭会在什么时候发生?你可以理解成当flash table的时候,表将关闭。那么有2种情况将会发生 flush table:
当cache 满了一个新的thread试图打开一个表的时候,那个表没有在cache;
当cache里的表数比table_cache多时thread不在使用表;
这个2种情况将会flush table。 当delay_key_write 使用的时候,如果出现重启或者掉电等情况,会导致在cache的索引update没来得及更新,所以必须在启动参数加上--myisam-recover,或者在conf设置myisam-recover=BACKUP,FORCE。这样在你启动mysql的时候会检查你的表并同步表和索引.

常用MySQL的童鞋都知道这个myisam类型的表极容易损坏,多数人可能都是用myisamchk命令来人工修复,下面介绍一种自动修复myisam的方法,也是我上午刚学的,共同进步,呵呵~
在MySQL的配置文件my.cnf中,启动项部分加入myisam-recover设置数据恢复功能,具体参数如下:
DEFAULT
与没有使用--myisam-recover选项相同。
BACKUP
如果在恢复过程中,数据文件被更改了,将tbl_name.MYD文件备份为tbl_name-datetime.BAK。
FORCE
即使.MYD文件将丢掉多个行也进行恢复。
QUICK
如果没有删除块,不要检查表中的行。
我设置了BACKUP和FORCE参数,如下:
[mysqld]
myisam-recover=BACKUP,FORCE
此参数详细情况,请参考MySQL手册http://dev.mysql.com/doc/refman/5.0/en/server-options.html
分享到:
评论

相关推荐

    mysql_配置详细说明.docx

    13. **delay_key_write**:仅对MyISAM表有效,控制索引更新的时机。可以提高写入性能,但可能导致数据不一致。 14. **max_connections**:虽然文件中未提及,但这个参数也很重要,它定义了MySQL服务器允许的最大...

    Mysql索引的类型和优缺点详解

    为了在某种程序上弥补这一缺陷,许 多SQL命令都有一个DELAY_KEY_WRITE项。这个选项的作用是暂时制止MySQL在该命令每插入一条新记录和每修改一条现有之后立刻对索引进 行刷新,对索引的刷新将等到全部记录插入/修改...

    设置MySQL自动增长从某个指定的数开始方法

    自增字段,一定要设置为primary key. 以指定从1000开始为例。 1 创建表的时候就设置: CREATE TABLE `Test` ( ... ) ENGINE=MEMORY AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8 CHECKSUM=1 DELAY_KEY_WRITE=1 RO

    MySQL中my.cnf文件选项

    - **`delay_key_write`**:控制MyISAM表的索引写入行为,取值可以是`OFF`、`ON`或`ALL`。其中`OFF`表示立即写入索引,`ON`表示延迟写入,而`ALL`则对所有MyISAM表都应用延迟写入策略。 - 示例:`--delay-key-write=...

    MySQL数据库参数设置

    需要注意的是,参数的最优设置还需要结合实际应用场景和业务需求来确定,例如根据不同的业务负载特点调整 `innodb_read_io_threads` 和 `innodb_write_io_threads` 的值以优化读写性能。此外,对于某些关键参数如 `...

    SQL语句长度限制MYSQL配置.docx

    12. **delay_key_write**:仅对MyISAM表有效,控制是否延迟索引的写入以提高性能。可以设置为off、on或auto。 这些配置参数是MySQL服务器性能调优的关键组成部分。根据应用的特性和负载,合理调整这些参数可以显著...

    SQL语句长度限制MYSQL配置.pdf

    11. **delay_key_write**:对于MyISAM表,此参数控制是否立即写入索引。设置为off可以提高写入速度,但可能导致数据丢失风险。 12. **innodb_buffer_pool_size**(未在文本中提及,但很重要):InnoDB存储引擎的...

    My SQL知识大全

    - 对于频繁更新的表建议使用`DELAY_KEY_WRITE=ALL`选项,而对于频繁查询的表,则应避免使用此选项。 2. **索引的使用** - WHERE子句中的不等于(!=)操作会导致索引失效,因此在设计查询语句时应尽量避免此类用法...

    mysql myisam 优化设置设置

    将`delay_key_write`设为ON,可以在插入数据时减少磁盘I/O,提升写入性能,但同时也增加了一定的风险,因为如果服务器崩溃,未写入磁盘的索引可能会丢失。 3. **bulk_insert_buffer_size**: 当执行批量插入时,...

    12个优化MySQL的技巧小整理

    3. **开启Delay_Key_Write选项**:默认情况下,Delay_Key_Write选项关闭,这意味着每次对MyISAM表进行写操作时,系统都会立即写入磁盘。开启这个选项可以减少磁盘I/O,提高性能,但在系统崩溃时可能会导致数据丢失。...

    MySQL5 空间扩展1

    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci CHECKSUM=0 ROW_FORMAT=DYNAMIC DELAY_KEY_WRITE=0; ``` 插入數據: ```sql insert into t_geo_test select fid,GeomFromText(shape) from ...

    mysql5.1动态修改的参数变量

    16. **`delay_key_write`** - **值类型**:`OFF|ON|ALL` - **类型**:`GLOBAL` - **说明**:控制是否延迟键写入。可以减少磁盘 I/O 提高性能,但可能会导致数据一致性问题。 17. **`delayed_insert_limit`** - ...

    MySQL 5.5 服务器变量详解

    #### delay-key-write={ON|OFF|ALL} - **定义**: 仅适用于MyISAM表,控制在更新索引后是否立即刷新键缓存。 - **作用范围**: 全局级别。 - **配置**: 可以在配置文件中设置。 - **动态性**: 非动态变量,无法在...

    MYSql常用语句

    DELAY_KEY_WRITE = 1 DATA DIRECTORY = '' INDEX DIRECTORY = ''; ``` - **IF NOT EXISTS**:如果表不存在则创建。 - **UNSIGNED**:表示该列存储的数值只能是非负数。 - **ZEROFILL**:当插入的数据位数不足时,会...

    mysql优化方案

    7. **MyISAM表更新优化**:启用`DELAY_KEY_WRITE`选项可以加快MyISAM表的索引更新速度,但需确保服务器重启前已正确关闭并处理表,防止数据丢失风险。 #### 查询优化策略 1. **索引理解与应用**:索引是独立的...

    MySQL中insert语句的使用与优化教程

    5. **延迟键更新**:如果表中有自引用或外键,开启`DELAY_KEY_WRITE`选项可以提高插入性能,但可能导致数据一致性问题,需谨慎使用。 6. **优化服务器配置**:调整MySQL服务器的配置参数,如`innodb_buffer_pool_...

Global site tag (gtag.js) - Google Analytics