数据库仿真回放策略的思考

举报
DRS技术快客 发表于 2020/12/31 14:57:55 2020/12/31
【摘要】 背景为了满足客户日益增长的上云需求,华为云提供的各类云上数据库,但是始终无法消除用户的一个疑虑:以我们目前的业务量,华为云的RDS到底能不能稳定的支持住呢?这不仅是客户需要考虑的问题,更是我们数据库从业者应该深思的问题。除了不断优化我们的内核产品外,我们还应当提供一个可以验证的工具来消除这种疑虑,给用户以信心。实施那到底什么样的手段才是可信的呢?那我们思考在哪一步才能获得全部的SQL量,我们...

背景

为了满足客户日益增长的上云需求,华为云提供的各类云上数据库,但是始终无法消除用户的一个疑虑:以我们目前的业务量,华为云的RDS到底能不能稳定的支持住呢?这不仅是客户需要考虑的问题,更是我们数据库从业者应该深思的问题。除了不断优化我们的内核产品外,我们还应当提供一个可以验证的工具来消除这种疑虑,给用户以信心。

实施

那到底什么样的手段才是可信的呢?那我们思考在哪一步才能获得全部的SQL量,我们选择在网络路由层,通过旁路监听的方式,无损无干扰的将数据收集下来,然后通过回放程序进行回放,那就引入我们的正题了,到底什么样的策略才是更好的策略?

策略

策略一.线程模拟session

***说明(S 代表 Sleep | E 代表 Execute SQL)***

>线程1 S-E-E-S-E-S-S-E

>线程2 E-S-S-S-S-E-E-E-E-E-S

>线程3 S-S-S-S-S-S-E-E-E-E-S-S-S-E-E


这个策略就是将同一个session所有的sql放到同一个线程中执行,并且做了相同的时间间隔做等待,这里的主要实现就是一个线程模拟一个人。


**优势:** 可以很好的模拟一个用户在APP或者系统上的操作行为

**劣势:** 一台机器的CPU 内存资源是有限的,当服务负载高时,客户侧可能是10台机器执行的结果,而我们没有分布式的能力来模拟,导致当前机器CPU调度来不及或者内存溢出


策略二.最合适时间执行

> 当前每秒SQL    线程池

>|--------------|    |-------|

>|---- SQLs----| ---> |  E  |

>|--------------|    |-------|


这个策略是把数据库当前这1s内同时要执行的sql全部取出来,然后丢给一个线程池并发执行,使得他们尽最大努力把SQL执行完


**优势:** 不会造成SQL的延迟,不会因为某一条或者某一类SQL执行过慢导致整个执行序延迟,同时可以很好的控制和利用单机资源。

**劣势:** 我们在这个策略下就变成零散的看到业务SQL,对于业务依赖强的场景,就很难模拟出正确负载场合。


策略三.只回放select

***说明(P 代表暂停|E代表执行)***

> P -->| SELECT SQLS |-->E-->P-->|SELECT SQLS|-->E


每次回放只把Select语句拿来执行,不管线程模型采用何种,都不会破坏我目标数据库,可以很好的验证select的性能,并且一直保持住现场。


**优势:** 可以一直重复的验证select语句的执行效能,不会破坏数据的完整性。

**劣势:** 这个回放方案就没法用业务的思维来衡量了,并且验证的时间序也没法保证,对于事务比较多比较大的业务,这个内存压力就小了很多。


---

以上就是现阶段对于回放策略的总结,虽然有很多不完美的地方,但是已经能够帮助有特殊业务场景需求的客户完成数据库可信验证,并且我们还在持续输出的路上。

我们相信**道路是曲折的,前途是光明的。**

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。