尝试使用Aurora,但没有看到查询速度很快

时间:2017-10-08 16:01:48

标签: amazon-rds-aurora

我正在为我的MySQL数据库尝试Amazon Aurora。当我运行mysqldump时,我的数据库大约是600 GB。我有一个在本地运行的实例,一个在我的VPS中,一个在Aurora上(我在过去24小时内上传)。

当我运行"从员工中选择sql_no_cache *;"在这三种环境中的每一种环境中,我都看到Aurora需要更长的时间来返回超过100万条记录。我想尽可能地比较苹果和苹果。我在MySQL Workbench和终端上运行了这个查询。结果是本地大约3.5秒,Aurora上的VPS到214s。

在我放弃Aurora之前,任何想法为什么我都会看到性能上的结果,我认为这种技术的性能比标准MySQL高出5倍?正在查询我的Aurora数据库,就像我的MySQL数据库(使用Workbench或终端)对性能进行不切实际的测试一样?我是否需要进行一些进一步的配置或调整?

我相信Aurora很快,所以我一定做错了。如果从我的结尾查询这个很慢,那么我希望如果我的应用程序要查询它,它会是类似的。

1 个答案:

答案 0 :(得分:7)

是的,测量单个select sql_no_cache * from employees;查询的响应时间是从连接到RDS Aurora实例的本地工作站上的Workbench / Terminal客户端返回100万条记录,这是一种不切实际的性能测试。它不仅不是一个苹果对苹果的比较,而且当你的应用程序在生产中查询数据库时,它也没有(或者不应该)表现得类似。

首先,比较苹果与苹果:

  • 在具有相同计算能力(CPU速度/计数,RAM,磁盘I / O)的服务器上运行测试。如果您的本地工作站,VPS和RDS实例不同,这将影响您的比较。将运行Aurora的RDS实例与运行具有相同实例类型的MySQL的RDS实例(例如r3.8xlarge)进行比较。
  • 在相同的网络边界上建立测试客户端/服务器连接。与通过本地运行的实例从本地套接字发送数据相比,在笔记本电脑的Internet连接上发送一百万行数据可能需要很长时间。确保您的测试服务器位于同一个通用网络中(例如,它们都位于AWS的同一区域/可用区域中),以确保网络连接具有一致的属性。
  • 使用相同的查询和相同的源数据(听起来你已经这样做了。)

其次,要运行类似于您的应用程序查询数据库时的预期测试:

  • 测量并发查询吞吐量(每秒请求数),而不是单个查询性能(每个请求的秒数)。对于关系数据库,数据库可以处理的并发事务数(限制应用程序可以处理的用户数)可能与单个查询单独完成所需的时间一样重要(或更多)。 sysbench是一个标准的数据库基准测试工具,可以启动一系列并发查询并测量请求数/秒。
  • 运行大量小查询,而不是单个大型查询。虽然您的应用程序可能不同,但Web应用程序倾向于为大量并发用户提取少量个性化数据(想想显示单个对象的详细信息的网页,而不是单个页面上的一百万个对象)。 sysbench中的OLTP(在线事务处理)基准测试提供了与典型Web应用程序工作负载类似的set of queries。长期运行的全表扫描类型查询在Amazon Redshift等数据仓库产品上得到了更好的优化。
  • 从与DB相同的网络中的另一台计算机建立客户端/服务器连接。您的Web服务器应尽可能在物理上靠近数据库部署,以便网络带宽高且延迟较低。否则,网络连接可能是一个比其他任何东西更大的瓶颈。
  • 使用大型多CPU实例进行测试。 Aurora的许多优化都专注于在多个CPU内核之间线性扩展读写吞吐量。使用一个小型的单CPU实例,您可能无法看到比MySQL更多的吞吐量改进。 r3.8xlarge实例类型有32个CPU,并且在Aurora的优化方面表现更好。

要重现亚马逊使用的确切性能基准,您可以按照Amazon Aurora Performance Benchmarking Guide中的粗略设置细节进行操作。

对于5x性能声明背后的具体数字,请参阅Verbitski等。 (2017),"Amazon Aurora: Design Considerations for High Throughput Cloud-Native Relational Databases"

  

对于每个更高的实例大小,Aurora的性能提高了一倍,r3.8xlarge的性能提高了121,000次/秒和600,000次读取/秒,这是MySQL强度的5倍,最高为20,000 [写入] /秒和125,000 [读取] /秒。