02

MyISAM几个容易忽视的配置选项:concurrent_insert、max_write_lock_count、low-priority-updates

MyISAM在读操作占主导的情况下是很高效的。可一旦出现大量的读写并发,同InnoDB相比,MyISAM的效率就会直线下降,而且,MyISAM和InnoDB的数据存储方式也有显著不同:通常,在MyISAM里,新数据会被附加到数据文件的结尾,可如果时常做一些UPDATE,DELETE操作之后,数据文件就不再是连续的,形象一点来说,就是数据文件里出现了很多洞洞,此时再插入新数据时,按缺省设置会先看这些洞洞的大小是否可以容纳下新数据,如果可以,则直接把新数据保存到洞洞里,反之,则把新数据保存到数据文件的结尾。之所以这样做是为了减少数据文件的大小,降低文件碎片的产生。但InnoDB里则不是这样,在InnoDB里,由于主键是cluster的,所以,数据文件始终是按照主键排序的,如果使用自增ID做主键,则新数据始终是位于数据文件的结尾。

继续阅读全文

14

mysql的缓存机制

昨天发现一个很奇怪的问题,运营说有一条帖子已经删除了,但是还是显示,显示发现有文件缓存,删除后还是会生成,怀疑是数据库里没有被删除。进数据库一看,表坏了,根本没有办法进行任何操作(奇怪)。没办法,先修表,修好后通过phpmyadmin查询没有改记录,进shell下也找不到(有点意思)。于是分析程序,程序确可以把数据查出来(邪了)。直接把程序里的sql在mysql里执行,出数据了(有点眉目了),怀疑是mysql缓存的问题。有点不明白,数据库里肯定没有那条数据了,说明执行了delete,但为什么缓存还生效呢?不管了,先重启数据库,问题解决。

继续阅读全文

23

改良版本mysqldump来备份MYSQL数据库

我的备份脚本都是在凌晨执行的,经常在慢查询日志里面看到这样的信息:select * from table1;
之前一直很纳闷,最后才了解到原来是MYSQLDUMP搞的鬼。
因为MYSQLDUMP会为整个库来加一个全局锁定。
如果单纯用MYSQLDUMP进行全库备份会造成以下三个方面的影响。
1、服务器CPU严重阻塞。
2、磁盘I/O直线增加。
3、所有的查询都成了慢查询。

继续阅读全文