- 浏览: 241572 次
文章分类
最新评论
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 932RAID write back指的是raid控制器能够将写 ... -
druid PreparedStatementCache设置
2014-07-08 14:34 3592druid的连接池配置中有PreparedStatement ... -
innodb 插入缓冲
2014-07-01 16:07 688插入缓冲是InnoDB存储引 ... -
Innodb配置,将数据与日志放在不同磁盘可以加快性能
2012-12-06 19:23 736An advanced my.cnf example ... -
character_set_client character_set_connection character_set_results
2012-11-19 20:21 3231之前一直纠结各种编码的却别:character_set_c ... -
amoeba-mysql的安装使用和读写分离(转)
2012-11-16 16:11 1017http://blog.csdn.net/chen861201 ... -
mysqlcheck myisamchk
2012-11-07 17:45 739mysqlcheck的功能类似myisamchk,但其工作不同 ... -
mysqlbinlog乱码
2012-11-06 19:49 5378使用mysqlbinlog查看二进制文件发现 /*!40019 ... -
auto-rehash
2012-11-05 19:20 4117mysql auto-rehash:读取表信息和列信 ... -
MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践
2012-09-19 20:21 766MySQL主从复制(Master-Slave)与读写分离(My ... -
mysql显示见表语句
2012-09-03 19:13 1160show create table mysql.slow_l ... -
mysql主从同步延迟问题
2012-08-30 14:18 841见http://www.ixpub.net/thread-13 ... -
二进制日志文件
2012-08-29 19:33 1103mysqld在每个二进制日志 ... -
备份恢复数据库
2012-08-28 20:18 816全备份 mysqldump -utest -ptest -- ... -
mysql用户修改密码
2012-08-28 19:37 757mysqladmin -utest -ptest passwo ... -
set session sql_log_bin=0
2012-08-21 15:22 3960引自http://blog.sina.com.cn/s/blo ... -
字符串转换成date
2012-08-15 20:00 907SELECT STR_TO_DATE('Tue 05 June ... -
selecting top N records per group
2012-08-15 18:56 896http://code.openark.org/blog/my ... -
Mysql Merge表的优点
2012-07-09 13:52 934在Mysql数据库中,Mysql Me ... -
MySQL线程共享内存参数
2012-07-03 16:48 875MySQL线程共享内存参数 引用 http://mxohy. ...
相关推荐
navicat111_mysql_cs_x64navicat111_mysql_cs_x64navicat111_mysql_cs_x64navicat111_mysql_cs_x64navicat111_mysql_cs_x64navicat111_mysql_cs_x64navicat111_mysql_cs_x64navicat111_mysql_cs_x64navicat111_mysql...
lib_mysqludf_sys 的win版本dll库
CentOS 7.5 64位下编译好的lib_mysqludf_sys.so,源文件在https://download.csdn.net/download/shaynerain/10715798,我博客 中有介绍怎么用
_MySQL高级_JAVA版
windows下 navicat120_mysql_en_x64数据库可视化工具
MySQL AUTO_INCREMENT 和主键等解释
mysql5.5.27_win32_zol.msi,数据库软件,还包含mysql-front5.0-key
tar zxvf navicat112_mysql_cs_x64.tar.gz 进入解压的目录,运行如下命令 ./start_navicat 问题一:中文乱码 解决:打开start_navicat文件 将export LANG="en_US.UTF-8"改为export LANG="zh_CN.UTF-8" 问题二:试用...
navicat121_mysql_cs_x64 WINDOWS X64位操作系统navicat121_mysql_cs_x64
MySQL_WorkBench管理操作MySQL教程,适合初学入门认识
navicat150_mysql_cs_x64
mysql5.5.27_win32_zol.msi mysql5.5.27windows安装程序
尚硅谷_MySQL高级_explain之key_len介绍 · 27.尚硅谷_MySQL高级_explain之ref介绍 · 28.尚硅谷_MySQL高级_explain之rows介绍 · 29.尚硅谷_MySQL高级_explain之Extra介绍 · 30.尚硅谷_MySQL高级_explain之...
mysql 监控 Monitoring_MySQL mysql_en mysql
银河麒麟_飞腾_MYSQL 离线安装包,亲测可以使用
mysql 5.5 chm 中文手册,学习mysql的好帮手
MySQL_5.1_zh.chm MySQL_5.1中文说明
提高MySQL的性能:优化,备份,复制与荷载平衡
连接mysql数据库必备的包 没有他你连接不了mysql数据库
使用C#侨联mysql数据库的举例说明的源代码