Timescale 云:性能、规模、企业级
自托管产品
MST
本节包含一些用于排查超表常见问题的建议。
ERROR: temporary file size exceeds temp_file_limit
当您尝试将 chunk 转换为列存储时,特别是当 chunk 非常大时,可能会遇到此错误。压缩操作会将文件写入新的压缩 chunk 表,该表存储在临时内存中。可用临时内存的最大量由 temp_file_limit
参数决定。您可以通过调整 temp_file_limit
和 maintenance_work_mem
参数来解决此问题。
ERROR: tuple decompression limit exceeded by operation
在列存储中的 chunk 中插入、更新或删除元组时,可能需要将元组转换为行存储。这通常发生在您更新现有元组或在插入时需要验证约束的情况下。如果您通过单个命令触发了大量行存储转换,则可能会耗尽存储空间。因此,对单个命令可以解压缩到行存储的元组数量设置了限制。
可以按如下方式增加或关闭(设置为 0)此限制
-- set limit to a milion tuplesSET timescaledb.max_tuples_decompressed_per_dml_transaction TO 1000000;-- disable limit by setting to 0SET timescaledb.max_tuples_decompressed_per_dml_transaction TO 0;
低压缩率通常是由分段键的高基数引起的。这意味着您为压缩过程中对行进行分组而选择的列具有太多唯一值。这使得无法在批处理中对大量行进行分组。为了获得更好的压缩效果,请选择基数较低的分段键。
ERROR: must be owner of hypertable "HYPERTABLE_NAME"
如果您尝试使用非特权用户账户将 chunk 压缩到列存储中,或将其解压缩回行存储中,可能会遇到此错误。要压缩或解压缩 chunk,您的用户账户必须具有允许其在 chunk 上执行 CREATE INDEX
的权限。您可以在 psql
命令提示符下使用此命令检查当前用户的权限
\dn+ <USERNAME>
要解决此问题,请使用此命令为您的用户账户授予适当的权限
GRANT PRIVILEGESON TABLE <TABLE_NAME>TO <ROLE_TYPE>;
有关 GRANT
命令的更多信息,请参阅 PostgreSQL 文档。
当您删除一个 chunk 时,它需要一个独占锁。如果该 chunk 正在被另一个会话访问,您就无法同时删除它。如果删除 chunk 操作无法获得该 chunk 上的锁,则会超时并导致进程失败。要解决此问题,请检查是什么锁定了该 chunk。在某些情况下,这可能是由连续聚合或其他正在访问该 chunk 的进程引起的。当删除 chunk 操作能够获得该 chunk 上的独占锁时,它将按预期完成。
有关锁的更多信息,请参阅 PostgreSQL 锁监控文档。
ERROR: cannot create a unique index without the column "<COLUMN_NAME>" (used in partitioning)
您可能会在两种情况下遇到唯一索引和分区列错误
- 在超表上创建主键或唯一索引时
- 从已具有唯一索引或主键的表创建超表时
有关如何解决此问题的更多信息,请参阅在超表上创建唯一索引一节。
ERROR: invalid attribute number -6 for _hyper_2_839_chunkCONTEXT: SQL function "hypertable_local_size" statement 1 PL/pgSQL function hypertable_detailed_size(regclass) line 26 at RETURN QUERY SQL function "hypertable_size" statement 1SQL state: XX000
如果您的超表索引变得非常大,您可能会看到此错误。要解决此问题,请使用此命令重新索引您的超表
reindex table _timescaledb_internal._hyper_2_1523284_chunk
有关更多信息,请参阅超表文档。
关键词
在此页面上发现问题?报告问题 或 在 GitHub 中编辑此页面
。