提升MySQL性能的一些办法
最近老是有一台阿里云的RDS数据库服务器有偶然主备切换的情况,网站也有偶尔很慢的情况,总体这台RDS的负载很轻,就是不知道偶尔有什么SQL语句触发了问题,这些天和同事一起排查、测试,把一些办法记录下来:
这是MySQL分类的页面,点击下面标题查看详细文章内容:
最近老是有一台阿里云的RDS数据库服务器有偶然主备切换的情况,网站也有偶尔很慢的情况,总体这台RDS的负载很轻,就是不知道偶尔有什么SQL语句触发了问题,这些天和同事一起排查、测试,把一些办法记录下来:
很长时间以来,我们在做MySQL数据转移的时候都是按照[[MySQL设置]]这篇文章里面的说法:
这段时间我们有个网站不断更新内容,流量在不断增长的同时,也引来了大量采集者,现在的采集者已经非常专业了,IP池不断更换,User Agent也随机变化,甚至Referer也做了不同的伪装,让我们花了很多时间来分析Apache日志,不断修改屏蔽条件,斗智斗勇。
最近还在设法降低Drupal网站的MySQL负载,前些天尝试了安装entity cache,一般情况下可以把一个页面的70-120个mysql查询减少10个左右,然后把memcache使用的内存从1G增加到2G,应该会有一些帮助。
Drupal的Views是个非常强大、灵活的工具,但用得不合适也可能导致数据库负载的飙升。最近把Drupal站启用UTF8MB4支持,转换程序自动把以前的MyISAM引擎转为InnoDB了,也因此引起阿里云RDS的IOPS升高。
今年以来将我们以前托管或者租用的服务器全面转向阿里云,除了采用ECS服务器以外,还有一项重要的是采用了RDS数据库服务器,这对于服务的稳定性、各项指标的监控、调优等都有帮助。
不过随着近期更多数据库转到RDS上,空间的占用、IOPS的升高等问题也越来越明显,增加RDS空间、升级RDS规格肯定是有用的,但一味这样做的话,费用会明显飙升,还是得想办法优化。
以前就用过自己搭建MySQL服务器的两种存储引擎MyISAM和InnoDB(也用过一点Memory方式),在今年初转向阿里云关系型数据库服务RDS的时候,看到可调参数中有一个TokuDB,不过不太了解也没有管。
以前使用的MySQL存储引擎考虑到用多块硬盘放置各个库以便分散负载都是固定为MyISAM,现在搬迁到阿里云RDS后,考虑到查询效率及空间大小也保持继续用MyISAM。不过今天同事发现一个销售数据的网站在购物车结算的时候报错: