02

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

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

继续阅读全文

26

MySQL全文检索中不进行全文索引默认过滤词表(ft_stopword_file =>ft_precompiled_stopwords)

MySQL支持全文索引和全文检索功能。 (详细的MySQL全文检索的介绍请见官方手册)
对于全文索引,MySQL会从 ft_stopword_file 变量指定的文件中读取不进行全文索引的过滤词表, 一行一个。若将该变量设置为空字符串(”)则禁用过滤词表。
此变量默认为built-in,即MySQL使用自建默认过滤词表,查看MySQL4到MySQL6的源码,不同版本的默认词表是一样的,共545个

继续阅读全文

15

2001年以来的数据库技术领域回顾

以上只是软件行业发展过程中的一个小小的阶段。如果要做点总结的话,我觉得这几年的值得探讨的一个地方就是 MySQL 的发展模式,从最初的近乎玩具的软件到现在对业界举足轻重的产品,其发展途径值得我们深思。反观国内,我们也有一些所谓的国产数据库,投入重金,多半昙花一现,恐怕技术因素不是主要问题吧?

继续阅读全文

14

mysql的缓存机制

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

继续阅读全文

26

MySQL内存使用 – 全局共享

全局共享内则主要是 MySQL Instance(mysqld进程)以及底层存储引擎用来暂存各种全局运算及可共享的暂存信息,如存储查询缓存的 Query Cache,缓存连接线程的 Thread Cache,缓存表文件句柄信息的 Table Cache,缓存二进制日志的 BinLog Buffer, 缓存 MyISAM 存储引擎索引键的 Key Buffer以及存储 InnoDB 数据和索引的 InnoDB Buffer Pool 等等。下面针对 MySQL 主要的共享内存进行一个简单的分析。

继续阅读全文