在我的 Google Cloud SQL 数据库实例 (Postgres 9.6) 上,我无法通过 GCP Console 删除通过 GCP Console 创建的用户/角色。当我尝试时,控制台显示一条通知,显示“用户已删除”,然后经过进一步检查,我发现操作失败并出现“未知错误”。实例的错误日志显示以下错误:
06:42:36.347 UTC [199]: [1-1] db=cloudsqladmin,user=cloudsqlagent ERROR: role "user1" cannot be dropped because some objects depend on it
06:42:36.347 UTC [199]: [2-1] db=cloudsqladmin,user=cloudsqlagent DETAIL: privileges for database mydb
24 objects in database mydb
Run Code Online (Sandbox Code Playgroud)
我可以通过运行看到 24 个对象
06:42:36.347 UTC [199]: [1-1] db=cloudsqladmin,user=cloudsqlagent ERROR: role "user1" cannot be dropped because some objects depend on it
06:42:36.347 UTC [199]: [2-1] db=cloudsqladmin,user=cloudsqlagent DETAIL: privileges for database mydb
24 objects …Run Code Online (Sandbox Code Playgroud) 我们遇到了一个小故障,导致设备产生了意外数量的数据。我们的代码最终沿着 SELEXT * from XXX WHERE yyy IN (xxx,xxx,xxx....,xxxx) 的行创建一个选择查询,这应该获取过去 5 天的数据,这通常根本不是问题,因为WHERE 字段已建立索引。
我们突然开始出现大量缓慢的查询并使服务器陷入困境。在我们中止查询之前,查询运行了大约 5000 秒。弄清楚发生了什么后发现,如果我们在 IN () 子句中有一个最多包含 33594 个参数的查询,则一切正常,查询会在 200 毫秒内完成。如果我们添加一个参数,选择似乎会永远运行。我们没有让一个无限期地运行直到它完成,所以我不确定它是否会完成,但它们似乎至少持续几个小时......
select 内的数据约为 361.04KB。我们在 Google Cloud SQL 上运行 MYSQL MYSQL_8_0_31
关于可能导致这种行为的任何想法?
我们有一个 galera 集群,有 3 个节点,在 3 台不同的物理机器上,但都位于同一个数据中心。
据我了解,他们过去部署此功能的原因是为了提高可用性和可靠性,DC 故障不是问题。每个节点都安装在使用 12 个内核和 4Gb RAM 的 VM 上。(根据我所做的监控,我们可以将使用的内核数量减少到 4 个)
我们被要求将其迁移到 Google Cloup Platform 以摆脱操作任务。我可以创建 3 个计算引擎实例并部署 galera 集群,GCP 甚至有 Percona XtraDB Cluster 一键部署服务,但与具有复制和备份的 Cloud SQL 实例相比,我很难看到附加值。我对扩展重负载系统不是很熟悉。
托管在这些节点中的数据库非常关键,应确保最大的可用性和可靠性。
为了将此架构迁移到 GCP,我应该采用什么策略?
考虑一下:
UPDATE dest
SET dest_col = (SELECT s.src_col FROM source s
WHERE s.name = 'abc'
ORDER BY random() LIMIT 1 OFFSET 0);
Run Code Online (Sandbox Code Playgroud)
我的目标:将每一行设置dest.dest_col为从子查询匹配的所有值中随机选取的值。
为了实现这一点,我添加了ORDER BY random() LIMIT 1. 但这是通过选择一个随机值一次,然后将其设置到dest.dest_col.
我尝试添加OFFSET 0(在其他答案中建议作为防止 Postgres 优化子查询的方法),但这似乎没有任何效果。
另请注意,我需要它才能在 GCP 上运行的 PostgreSQL 上工作。
我想使用 Postgres(CloudSQL 中的 11)作为高效的键值存储。我有大约 200GB 的字典(平均大小为 10kB,结构可以不同并且可以嵌套)。我正在考虑利用改进的哈希索引。这是架构:
\n\n CREATE EXTENSION IF NOT EXISTS "uuid-ossp";\n\n CREATE TABLE IF NOT EXISTS key_val (\n id uuid DEFAULT uuid_generate_v4(),\n value jsonb,\n EXCLUDE using hash (id with =)\n );\n\n CREATE INDEX IF NOT EXISTS idx_key_val ON key_val USING hash (id);\nRun Code Online (Sandbox Code Playgroud)\n\n获取、更新和插入非常简单,但我不知道如何实现高效的更新插入。
\n\nINSERT INTO key_val VALUES ($1, $2) ON CONFLICT ON CONSTRAINT key_val_id_excl DO UPDATE SET value = ($2)\nRun Code Online (Sandbox Code Playgroud)\n\n结果是WrongObjectTypeError ON CONFLICT DO UPDATE not supported with exclusion constraints
可能的解决方案:
\n\n …