我在谷歌云SQL上有以下配置。我的查询速度不够快。它比我在本地机器上运行要慢得多。
我们使用InnoDB引擎。我们有超过5万条记录的用户表。如果我们做简单的更新查询来更新单行。
UPDATE User SET notificationToken="string token" WHERE id = "String ID";
这里id列是varchar,我们有assign索引主键+唯一键。并且上述查询花费了1+秒来更新记录。同样的查询,如果我在本地机器上尝试,它会超时0.0200ms。在云sql中,写操作似乎太慢了。
有关于以下配置或需要为InnoDB配置DB标志的指导吗?
云SQL配置:
机器类型:
- db-n1-标准-2
- vCPUs:2
- 内存:7.5 GB
网络吞吐量(MB/s(:2000的500存储类型:SSD存储容量:10GB
磁盘吞吐量:
- 阅读:4.8最大:240.0
- 写入:4.8最大值:144.0
IOPS:
- 阅读:300最大:15000
- 写入:300 MAX:9000
DB标志:
- slow_query_log='on'
- long_query_time='1'
- query_cache_size='223338299392'
- query_cache_limit='223338299392'
- stored_program_cache=5524288
- sql_mode="ERROR_FOR_DIVISION_BY_ZERO">
- log_bin_trust_function_creators="打开">
- innodb_write_io_threads=20
- innodb_read_io_threads='8'
一般来说,性能调优的建议很难给出,因为需要考虑很多事情。(其中一些只有你自己知道(。但你可以考虑以下几点:
- 删除索引
如果不使用索引,这是个好主意。但是,如果放弃它们会使其他并行工作负载切换到顺序扫描,这是一个非常糟糕的主意。
删除索引将影响对现有数据的查询。此外,指数的重新制定在未来也需要时间。
- 增加内存或更改为更大的机器类型
此选项可能有帮助,也可能没有帮助-如果它提高了无限制的网络和磁盘速度,它肯定会有所帮助。
若要诊断查询性能,建议启用查询日志记录。云SQL日志(像所有谷歌云服务一样(被发送到Stackdriver日志记录,并可以通过API检索。要在Cloud SQL中启用数据库日志记录,请执行以下步骤。例如,在其云SQL实例上启用慢速查询日志记录(将slow_query_log标志设置为"On"(和启用Stackdriver日志记录(设置log_output标志为"FILE"(。
您还可以启用性能模式数据库标志。可以通过API为较大的实例(db-n1-standard-8、db-n1-highmem-4和更大的实例(启用performance_schema标志。
performance_schema标志和其他数据库标志一样,可以在settings.databaseFlags数组(ref(中设置。下面是一个关于如何使用curl在现有实例上设置它的示例。
curl --header "Authorization: Bearer $(gcloud auth print-access-token)"
--header "Content-Type: application/json"
--data '{
"settings": {
"databaseFlags": [
{
"name": "performance_schema",
"value": "on"
}
]
}
}' -X PATCH https://www.googleapis.com/sql/v1beta4/projects/[PROJECT_NAME]/instances/myinstance