- 浏览: 246052 次
-
文章分类
最新评论
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
引自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
发表评论
-
RAID write back write through
2014-07-09 13:44 959RAID write back指的是raid控制器能够将写 ... -
druid PreparedStatementCache设置
2014-07-08 14:34 3627druid的连接池配置中有PreparedStatement ... -
innodb 插入缓冲
2014-07-01 16:07 708插入缓冲是InnoDB存储引 ... -
Innodb配置,将数据与日志放在不同磁盘可以加快性能
2012-12-06 19:23 753An advanced my.cnf example ... -
character_set_client character_set_connection character_set_results
2012-11-19 20:21 3256之前一直纠结各种编码的却别:character_set_c ... -
amoeba-mysql的安装使用和读写分离(转)
2012-11-16 16:11 1043http://blog.csdn.net/chen861201 ... -
mysqlcheck myisamchk
2012-11-07 17:45 767mysqlcheck的功能类似myisamchk,但其工作不同 ... -
mysqlbinlog乱码
2012-11-06 19:49 5457使用mysqlbinlog查看二进制文件发现 /*!40019 ... -
auto-rehash
2012-11-05 19:20 4147mysql auto-rehash:读取表信息和列信 ... -
MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践
2012-09-19 20:21 780MySQL主从复制(Master-Slave)与读写分离(My ... -
mysql显示见表语句
2012-09-03 19:13 1191show create table mysql.slow_l ... -
mysql主从同步延迟问题
2012-08-30 14:18 864见http://www.ixpub.net/thread-13 ... -
二进制日志文件
2012-08-29 19:33 1162mysqld在每个二进制日志 ... -
备份恢复数据库
2012-08-28 20:18 838全备份 mysqldump -utest -ptest -- ... -
mysql用户修改密码
2012-08-28 19:37 773mysqladmin -utest -ptest passwo ... -
set session sql_log_bin=0
2012-08-21 15:22 4048引自http://blog.sina.com.cn/s/blo ... -
字符串转换成date
2012-08-15 20:00 933SELECT STR_TO_DATE('Tue 05 June ... -
selecting top N records per group
2012-08-15 18:56 925http://code.openark.org/blog/my ... -
Mysql Merge表的优点
2012-07-09 13:52 964在Mysql数据库中,Mysql Me ... -
MySQL线程共享内存参数
2012-07-03 16:48 898MySQL线程共享内存参数 引用 http://mxohy. ...
相关推荐
13. **delay_key_write**:仅对MyISAM表有效,控制索引更新的时机。可以提高写入性能,但可能导致数据不一致。 14. **max_connections**:虽然文件中未提及,但这个参数也很重要,它定义了MySQL服务器允许的最大...
为了在某种程序上弥补这一缺陷,许 多SQL命令都有一个DELAY_KEY_WRITE项。这个选项的作用是暂时制止MySQL在该命令每插入一条新记录和每修改一条现有之后立刻对索引进 行刷新,对索引的刷新将等到全部记录插入/修改...
自增字段,一定要设置为primary key. 以指定从1000开始为例。 1 创建表的时候就设置: CREATE TABLE `Test` ( ... ) ENGINE=MEMORY AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8 CHECKSUM=1 DELAY_KEY_WRITE=1 RO
- **`delay_key_write`**:控制MyISAM表的索引写入行为,取值可以是`OFF`、`ON`或`ALL`。其中`OFF`表示立即写入索引,`ON`表示延迟写入,而`ALL`则对所有MyISAM表都应用延迟写入策略。 - 示例:`--delay-key-write=...
需要注意的是,参数的最优设置还需要结合实际应用场景和业务需求来确定,例如根据不同的业务负载特点调整 `innodb_read_io_threads` 和 `innodb_write_io_threads` 的值以优化读写性能。此外,对于某些关键参数如 `...
12. **delay_key_write**:仅对MyISAM表有效,控制是否延迟索引的写入以提高性能。可以设置为off、on或auto。 这些配置参数是MySQL服务器性能调优的关键组成部分。根据应用的特性和负载,合理调整这些参数可以显著...
11. **delay_key_write**:对于MyISAM表,此参数控制是否立即写入索引。设置为off可以提高写入速度,但可能导致数据丢失风险。 12. **innodb_buffer_pool_size**(未在文本中提及,但很重要):InnoDB存储引擎的...
- 对于频繁更新的表建议使用`DELAY_KEY_WRITE=ALL`选项,而对于频繁查询的表,则应避免使用此选项。 2. **索引的使用** - WHERE子句中的不等于(!=)操作会导致索引失效,因此在设计查询语句时应尽量避免此类用法...
将`delay_key_write`设为ON,可以在插入数据时减少磁盘I/O,提升写入性能,但同时也增加了一定的风险,因为如果服务器崩溃,未写入磁盘的索引可能会丢失。 3. **bulk_insert_buffer_size**: 当执行批量插入时,...
3. **开启Delay_Key_Write选项**:默认情况下,Delay_Key_Write选项关闭,这意味着每次对MyISAM表进行写操作时,系统都会立即写入磁盘。开启这个选项可以减少磁盘I/O,提高性能,但在系统崩溃时可能会导致数据丢失。...
) 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 ...
16. **`delay_key_write`** - **值类型**:`OFF|ON|ALL` - **类型**:`GLOBAL` - **说明**:控制是否延迟键写入。可以减少磁盘 I/O 提高性能,但可能会导致数据一致性问题。 17. **`delayed_insert_limit`** - ...
#### delay-key-write={ON|OFF|ALL} - **定义**: 仅适用于MyISAM表,控制在更新索引后是否立即刷新键缓存。 - **作用范围**: 全局级别。 - **配置**: 可以在配置文件中设置。 - **动态性**: 非动态变量,无法在...
DELAY_KEY_WRITE = 1 DATA DIRECTORY = '' INDEX DIRECTORY = ''; ``` - **IF NOT EXISTS**:如果表不存在则创建。 - **UNSIGNED**:表示该列存储的数值只能是非负数。 - **ZEROFILL**:当插入的数据位数不足时,会...
7. **MyISAM表更新优化**:启用`DELAY_KEY_WRITE`选项可以加快MyISAM表的索引更新速度,但需确保服务器重启前已正确关闭并处理表,防止数据丢失风险。 #### 查询优化策略 1. **索引理解与应用**:索引是独立的...
5. **延迟键更新**:如果表中有自引用或外键,开启`DELAY_KEY_WRITE`选项可以提高插入性能,但可能导致数据一致性问题,需谨慎使用。 6. **优化服务器配置**:调整MySQL服务器的配置参数,如`innodb_buffer_pool_...