最近老是有一台阿里云的RDS数据库服务器有偶然主备切换的情况,网站也有偶尔很慢的情况,总体这台RDS的负载很轻,就是不知道偶尔有什么SQL语句触发了问题,这些天和同事一起排查、测试,把一些办法记录下来:
- Drupal站的Views是检查重点,检测办法还是以开启Devel插件为主,寻找慢查询语句,找到对应Views来改进;
- 在Views中使用Views PHP字段,发现会让Litepager失效,还有查询的Limit消失,改用views-view-field--field_name.tpl.php可以解决;
很长时间以来,我们在做MySQL数据转移的时候都是按照[[MySQL设置]]这篇文章里面的说法:
导出备份数据
mysqldump -h 服务器IP地址 -u 用户名 -p 密码 --opt 数据库名>备份数据库名
例如:
mysqldump -h localhost -u root -p --opt food>food2007-08-24-04.sql
这条命令将服务器localhost上的food这个数据库备份到本地计算机当前目录的f
最近写了几段PHP程序,给同事来导入数据到MySQL数据库,同事偶尔反映遇到这样类似的报错:
PDOException: SQLSTATE[22001]: String data, right truncated: 1406 Data too long for column 'state' at row 1: UPDATE `table` SET `address` = 'xxx', `state` = '过长内容', `id` = 
这段时间我们有个网站不断更新内容,流量在不断增长的同时,也引来了大量采集者,现在的采集者已经非常专业了,IP池不断更换,User Agent也随机变化,甚至Referer也做了不同的伪装,让我们花了很多时间来分析Apache日志,不断修改屏蔽条件,斗智斗勇。先以为是百度爬虫太快,把百度爬虫进行了专门的临时503处理,360爬虫干脆全部屏蔽了,但发现还是不行,非正规搜索引擎的采集者带来的麻烦依然不断。🤔
为了不影响用户访问,下血本把阿里云服务器从8核16G升级为16核32G,基本可以解决ECS负载飙升的问题,但RDS数据库服务器还是会遇到查询语句堆积的情况,我们
最近一直在为降低MySQL服务器负载努力,Drupal网站中主要是排查Views引起的性能问题,而MediaWiki中也有一个与Drupal的Views对应的工具:Dynamic Page List (DPL动态页面列表),既可以灵活运用得到希望的信息展示效果,但同时也容易引起数据库负载过高、性能下降。
当网站打开很慢的时候,还是需要查看阿里云RDS数据管理控制台DMS(Data Management Service),查看诊断报告或者当前实例会话,查看慢查询语句,例如发现大量这样的语句:
SELECT DISTINCT `jing
最近还在设法降低Drupal网站的MySQL负载,前些天尝试了安装entity cache,一般情况下可以把一个页面的70-120个mysql查询减少10个左右,然后把memcache使用的内存从1G增加到2G,应该会有一些帮助。
今天再次打开devel查询,发现多语言网站的页面中drupal_lookup_path特别多,50种语言就需要有50个这种查询,而且每个查询的语言代码不同,不能很好利用MySQL的查询缓存机制。
其实这个查询语句:
SELECT alias FROM url_alias WHERE
Drupal的Views是个非常强大、灵活的工具,但用得不合适也可能导致数据库负载的飙升。最近把Drupal站启用UTF8MB4支持,转换程序自动把以前的MyISAM引擎转为InnoDB了,也因此引起阿里云RDS的IOPS升高。
又试了一些调整RDS参数等,无效。再看了一些资料、观察了RDS的进程,还是一些Views的消耗大,特别是数据量大的站。以前在Drupal 6时就在个别网站中启用过views_litepager这个插件,来替换Views本身的翻页,牺牲了查看一共有多少页的功能,不再运行select count(*) ... 这个在InnoDB引擎消耗很
今年以来将我们以前托管或者租用的服务器全面转向阿里云,除了采用ECS服务器以外,还有一项重要的是采用了RDS数据库服务器,这对于服务的稳定性、各项指标的监控、调优等都有帮助。
不过随着近期更多数据
以前就用过自己搭建MySQL服务器的两种存储引擎MyISAM和InnoDB(也用过一点Memory方式),在今年初转向阿里云关系型数据库服务RDS的时候,看到可调参数中有一个TokuDB,不过不太了解也没有管。
最近同事转给我阿里云介绍TokuDB的文章,其中压缩存储的特性对我们来说很有吸引力,因为我们的数据库一般都偏大,已经转到阿里云的就有几百个GB了,加上以后要转的肯定是TB数量级的,而且目前还是用的MyISAM,如果用InnoDB的话,那还要扩大数倍,仅仅是存储的费用就让人难以承受。但MyISAM存在表容易损坏的问题,往后用的人越来越少,Drupal 7
以前使用的MySQL存储引擎考虑到用多块硬盘放置各个库以便分散负载都是固定为MyISAM,现在搬迁到阿里云RDS后,考虑到查询效率及空间大小也保持继续用MyISAM。不过今天同事发现一个销售数据的网站在购物车结算的时候报错:
PDOException: SQLSTATE[HY000]: General error: 1785 When @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1, updates to non-transactional tables can only be done in either autocommit