前段时间安装Drupal 7的时候就遇到自动在MySQL中使用InnoDB的情况,而且好像是即使MySQL默认引擎为MyISAM也依旧使用InnoDB。虽然InnoDB有自己的特点,Drupal 7选用这个也正常,但对于我们来说,有多个子网站的时候,以前是将数据库分散到多块硬盘上的,就需要用MyISAM来让每个子网站有独立的目录比较方便,所以还是需要能使用MyISAM。
按照网上找到的一篇文章,修改includes/database/mysql/shema.inc这个文件可以解决,虽然修改drupal core文件不是一个很好的办法,先这样用。
前一阵子找朋友在帮忙查看MySQL性能问题的时候,发现一些MySQL数据库表的索引基数为0,这种时候索引是无效的。我后来检查了多个库,发现这种情况还比较普遍,可能由各种原因引起,只需要将该表优化一遍就可以了,但每次需要人工检查太麻烦,查了一下资料,可以定期运行以下命令来检查、优化和自动修复整台MySQL服务器上所有库中的表:
mysqlcheck -o -autorepaire --all-databases -uroot -ppassword
更多参数说明请看MySQL手册中的mysql
前段时间在一些Drupal网站中设置了多种Views来方便浏览者查看内容列表,但很快遇到服务器性能问题而被迫中止,在博文《Drupal网站添加Views后,MySQL服务器负载骤增》中有详细记录。
周末实验成功了《为Drupal网站中的CCK字段在MySQL中添加添加索引来加速Views展示》,应该可以解决前面的问题,这两天我将以前涉及到网站数据库打开,在需要添加索引的字段上都添加了索引,然后把Squid和robots.txt中设置的屏蔽网址都解封了,也没有再看到负载飙升的情况。
几种添加索引的地方记录一下:
前些天在Drupal网站中为了设法解决服务器性能的问题,实验了将MySQL中的一些表合并,虽然最后证实这个效果不明显,但花了好些时间就还是把代码记录下来,以备后用。
过程步骤:
- 备份数据库
- 离线状态
- 在4个表中创建字段
- 从3个公用的表复制相应字段内容到新创建的字段中
- 修改content_node_field、content_node_field_instance中内容
今年4、5月份在用Drupal搭建英文版中国邮编网站China Postal Code的过程中,为了让浏览者更方便、更习惯,采用了CCK字段+Views展示的扩展模块,并进行一系列的比较复杂的设置,例如多个computed计算字段、Views查询中嵌套多级查询,算是基本上能实现所希望的功能。
但当时就发现在性能上有很多的问题,通过Devel模块的开启,可以查看到一些Views查询数据库所用的时间非常长,需要几十甚至几百秒,常常令服务器负载过高而影响网站访问。后来找了一个自动检测MySQL进程的小脚本,当发现超过限定值的进程时就自动kill掉,这个办法确
用Drupal等CMS系统来搭建网站的主要好处就是不用太关心程序、数据库等技术细节,把精力主要集中在网站内容本身。不过有些时候也不得不去关注这些技术问题,例如:无法用普通办法实现的功能、遇到速度性能瓶颈等。
以前在用Drupal搭建网站的时候,就注意到添加新的内容类型(Content Type)后,用CCK设置的字段一般是放在同一个数据库表中的,例如一个内容类型“名录”就有一个表“minglu”,而compan, address, postcode这些字段就都在minglu这个表中,后来在一个网站中添加多
从7月初到10月底的4个月时间中,我们已经在服务器上导入了大量数据,建成了一批新的子网站,在接下来的一段时间内我们不准备继续大增数据量了,而是对已经导入数据的网站进行精细优化调整,这个月已经开始了这方面的工作。
MediaWiki平台的网站都是去年以及以前建成的,这次基本没有大的调整,只是一部分网站对模板进行了更新,以便嵌入microdata微数据标记,虽然也需要运行后台更新、重新生成缓存文件,不过这个对服务器的负载影响不算很大,是可以承受的。
而在对今年新做的Drupal平台的改进中,如果只是修改内页模板、block以及me
前一阵子发现导入的邮编数据中,一些0开头的6位数最前面一位不知道什么时候搞丢了,只剩下5位数了,这显然是错的,因为有379个,手工改起来很麻烦,只有设法批量改了,在网上查了办法,然后又找同事咨询,最后一条SQL语句就解决了。
但当时没有记录下来,今天在新导入的另外一套邮编数据中又发现这个问题,只有重新找资料、测试了,还好很快就弄好了,这次记录下来这个语句:
UPDATE `content_field_postcode` SET `field_postcode_value`=CONCAT("
在用Node Import插件导入大量数据到Drupal网站的过程中,耗时可能是几小时、几天甚至几周,不可避免会出现偶尔中断、报错的情况,绝大多数可以继续导入不受影响,不过如果运气不好的话,也会遇到数据库中出现大量错误的情况。
有一个100多万数据量的资料在导入Drupal网站的时候,在90多万的地方中断过,后来继续的时候变得很慢,终于又过了好些天把剩下的导入完,但检查发现根本就不对,Log中都是报错。为了不重新导入所有数据,我尝试直接对MySQL中的库、表操作来修复,这两天为了恢复该网站,做了下面这些工作:
- 将
在换用16核CPU、16G内存的服务器后,发现7200转硬盘不给力,就增加了多块10000转的迅猛龙硬盘,一台服务器上的4块硬盘分别放置系统及备份文件、Squid缓存文件、MySQL文件、Apache和HTML缓存文件,这样一般访问都不会有什么压力。
但在我们持续导入数据、批量修改模板的过程中,发现放置Squid缓存文件的硬盘有时占用达到100%,影响正常访问,于是我们修改Squid设置文件,只使用几个G内存作为Web反向加速的缓存,关闭了几十G、上百G的Squid磁盘缓存,这样可以避免大量小文件的寻道操作。
接下来又发现系统