我正在尝试通过ETL软件包提高CloudSQL(Google上的MySQL)插入的吞吐量。可以使用ODBC或JDBC驱动程序进行连接。
前提数据库的正常吞吐量是5-10k个插入行/秒,但是对于CloudSQL来说,该吞吐量
我看过MYSQL驱动程序文档,并且有诸如multi_statement
和auto_commit
之类的选项,它们暗示着允许每个调用多个语句并提高吞吐量。
是否有关于与ODBC或JDBC一起使用的准则,尤其是从内部连接到云时?
最佳答案
要提高吞吐量,您首先应该确定什么是瓶颈。这里有一些可能性:
延迟限制。当大多数时间都花在等待数据从客户端到达服务器时,就是这种情况。如果a)您的客户端到服务器的往返时间很长和/或b)您的客户端连续执行许多小写操作,则可能出现这种情况。
通过比较ping到Cloud SQL和您以前的服务器的结果来测试往返时间(对于Cloud SQL第一代,请使用SELECT 1;
的速度,因为ping在到达真实服务器之前已在Google中终止。)查找通过查看客户端的代码或MySQL查询日志,了解客户端是否进行了大量小写操作。
带宽限制。如果您的客户端和服务器之间的带宽链接较小,就是这种情况。
通过进行速度测试并查看可用速度是否低于您希望的有效数据速率来对此进行测试。
服务器io绑定。当您使用低层或小磁盘(第二代)配置了Cloud SQL实例时就是这种情况。
通过在Stackdriver Monitoring中查看Cloud SQL实例的指标进行测试。
客户端io绑定。当您的客户端无法足够快地发送数据时,就是这种情况。如果您使用与本地测试相同的来源,则这不太可能。
通过使用iostat
查看历史磁盘使用情况或使用hdparm -t
测试磁盘吞吐量来对此进行测试。
索引过多。每个其他索引都会使写入速度变慢。确保您在Cloud SQL和本地使用相同的架构进行公平测试。
关于mysql - MySQL驱动程序配置可提高CloudSQL的吞吐量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48355504/