真实客户数据库优化及数据库读写分离实施方案
【摘要】 随着监控系统的不间断运行,数据库中数据量也随之增加,数据库出现查询缓慢、锁等待情况,因此需要对数据库进行优化,提高数据库性能,加快查询速度。
版本 |
操作 |
描述 |
人员 |
时间 |
V1.0 |
新增 |
文档编写 |
郭佳明 |
2021/12/15 |
V2.0 |
新增 |
文档优化 |
陈壹 |
2021/12/20 |
V2.5 |
完善 |
文档完善 |
刘志虎 |
2021/12/27 |
技术方案
1. 关闭AHI
通过对数据库存储引擎信息的查询,发现Innodb等待次数非常高
注:第一列是引擎名称 第二类是索类型加代码文件行数 第三个是等待次数
通过翻看mysql 源码(5.7.33):\storage\innobase\btr\btr0sea.cc,发现是跟自适应哈希索引(Adaptive Hash Index,AHI)相关的函数
随后翻阅官方文档,官方文档提到这在高负载工作的情况下,可能是一个争用点。
结合上金所这边的实际情况,需要将AHI进行关闭。
2. 读写分离
- 从目前的数据量上,SQL本身已经很难进行优化,通过对慢Sql日志分析,发现慢Sql中针对历史数据的查询都是Range级别
- 索引情况如下:
- 字段如下:
- 注:其中ns字段是微秒时间,可以忽略。综合来说:表已经物尽其用,其本身很难有改进的空间,因此需要进行数据库读写分离,提高数据库性能。
- 读写分离流程
实施步骤
1. 关闭AHI步骤
- 7.211.2.12,7.211.2.13登录数据库:
Mysql -uroot -pp@ssw0rd
- 执行以下Sql命令:
set global innodb_adaptive_hash_index=off
2. 读写分离步骤
- 登陆7.211.2.14,7.211.2.15
用户:sysmon
- 进入db.php所在目录,这里有两个目录分别存放了db.php文件所有都要更改:
cd /cmp/nginx/html/lwjk_v3/config
mv db.php db.php.bf //备份
cd /cmp/nginx/html/lwjk_v3/local
mv db.php db.php.bf. //备份
- 替换db.php文件更新内容,添加了读写分离的配置
cd /cmp/nginx/html/lwjk_v3/config
rz db.php //上传新db.php文件
ll //查看权限,如果权限和老的db.php文件不相同需更改权限与授权组和授权主
cd /cmp/nginx/html/lwjk_v3/local
rz db.php //上传新db.php文件
ll //查看权限,如果权限和老的db.php文件不相同需更改权限与授权组和授权主
注:上述的配置指定了主从的相关设置。 从库将被用来执行读操作,而主库将被用来执行写操作,这样读写分离将通过上述配置自动地完成。
3 版本回退
- 7.211.2.12,7.211.2.13登录数据库:
mysql -uroot -pp@ssw0rd
- 执行以下sql命令,开启AHI:
set global innodb_adaptive_hash_index=no
- 登陆web主机,恢复db.php文件
用户:sysmon
ip:7.211.2.14,7.211.2.15
- 恢复config和local目录下的db.php文件:
cd /cmp/nginx/html/lwjk_3/config
rm -f db.php //删除更改的db.php文件
mv db.php.bf db.php //恢复原有db.php文件
cd /cmp/nginx/html/lwjk_v3/local
rm -f db.php //删除更改的db.php文件
mv db.php.bf db.php //恢复原有db.php文件
- 由于客户哪边数据量大的表主要是监控系统,监控平台是客户购买的第三方监控系统,监控服务商说可以通过配置实现,但这个方式在非不得已的情况下不建议使用,推荐使用通过中间件的方式,对业务层透明,业务实现不考虑底层的数据存储。
喜欢的朋友记得给个关注~
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)