了解数据库和磁盘大小
磁盘指标指的是 Postgres 报告的存储使用情况。这些指标每天更新。在阅读本文档时,我们将提到“数据库大小”和“磁盘大小”。
-
数据库大小:显示 Postgres 数据库中数据的实际大小。这可以在 数据库报告页面 找到。
-
磁盘大小:显示整体磁盘空间使用情况,包括数据库大小以及 Postgres 正常运行所需的额外文件,例如预写式日志 (WAL) 和其他系统日志文件。您可以在 数据库设置页面 查看此信息。
数据库大小#
此 SQL 查询将显示 Postgres 集群中所有数据库的大小
1select2 pg_size_pretty(sum(pg_database_size(pg_database.datname)))3from pg_database;该值在 数据库报告页面 报告。
数据库大小主要由您的数据、索引和物化视图占用。您可以通过删除这些内容并运行 Vacuum 操作来减小数据库大小。
根据您的计费方案,您的数据库可能会进入只读模式,这可能会阻止您插入和删除数据。在 磁盘管理 部分中有关于管理只读模式的说明。
磁盘空间使用情况#
您的数据库大小是 Supabase 项目磁盘使用情况的一部分,Postgres 的许多组件会占用额外的磁盘空间。其中一个主要组件是 预写式日志 (WAL)。Postgres 会将数据库更改存储在日志文件中,这些文件在应用到数据库后会被清除。同样的文件也由 只读副本 或其他复制方法使用。
如果您想确定磁盘上存储的 WAL 文件的大小,Postgres 提供了 pg_ls_waldir 作为辅助函数;可以运行以下查询
1select pg_size_pretty(sum(size)) as wal_size from pg_ls_waldir();Vacuum 操作#
Postgres 不会立即回收数据库中死元组(即已删除的行)所使用的物理空间。它们被标记为“已删除”,直到执行 Vacuum 操作。因此,从数据库中删除数据可能不会立即减少报告的磁盘使用量。您可以使用 Supabase CLI inspect db bloat 命令查看数据库中的所有死元组。或者,您可以在 SQL 编辑器 中运行 查询。
1# Login to the CLI2npx supabase login34# Initialize a local supabase directory5npx supabase init67# Link a project8npx supabase link910# Detect bloat11npx supabase inspect db bloat --linked如果您找到想要立即清理的表,可以在 SQL 编辑器 中运行以下命令
1vacuum full <table name>;Vacuum 操作可能会暂时增加资源利用率,这可能会对项目的观察到的性能产生不利影响,直到维护完成。 vacuum full 命令将在操作完成之前锁定表。
Supabase 项目启用了自动 Vacuum,这可确保定期执行这些操作,以保持数据库的健康和性能。可以 微调 自动 Vacuum 参数,或 手动启动 Vacuum 操作。在从数据库中删除大量数据后运行手动 Vacuum 可以帮助减少 Postgres 报告的数据库大小。
占用空间#
新的 Supabase 项目的数据库大小约为 40-60MB。此空间包括预安装的扩展、模式和默认的 Postgres 数据。即使这些扩展处于非活动状态,安装扩展也会使用额外的数据库大小。
磁盘大小#
Supabase 使用网络附加存储来平衡性能和可扩展性。磁盘缩放行为取决于您的计费方案。
付费方案行为#
Pro 计划及更高版本的项目具有自动缩放磁盘。
当数据库达到分配磁盘大小的 90% 时,磁盘大小会自动扩展。磁盘扩展到原来的 1.5 倍(例如,8 GB -> 12 GB)。自动缩放每 6 小时只能进行一次。如果在 6 小时内达到磁盘空间的 95%,您的项目将进入只读模式。
自动调整大小操作将额外增加 50%,上限为 200 GB。如果当前使用量的 50% 大于 200 GB,则只会向磁盘添加 200 GB(例如,1500 GB 的大小将调整为 1700 GB)。
磁盘大小也可以在 数据库设置页面 上手动扩展。Pro/Team 计划的最大磁盘大小为 60 TB。如果您需要更多空间,请 联系我们 了解有关企业计划的更多信息。
免费方案行为#
当您超过 500 MB 限制时,免费方案项目将进入 只读 模式。进入只读模式后,您有以下选项
- 升级到 Pro 计划 以将限制提高到 8 GB。 禁用支出上限 如果您希望您的 Pro 实例自动扩展到超过 8 GB 的磁盘大小限制。
- 禁用只读模式 并减小您的数据库大小。
只读模式#
在某些情况下,Supabase 可能会将您的数据库置于只读模式,以防止您的数据库超出计费或磁盘限制。
在只读模式下,客户端会遇到诸如 cannot execute INSERT in a read-only transaction 之类的错误。一旦使用量低于磁盘大小的 95%,常规操作(读写模式)将自动重新启用。
禁用只读模式#
您手动覆盖只读模式以减小磁盘大小。为此,请在 SQL 编辑器 中运行以下命令
首先,更改 事务访问模式
1set session characteristics as transaction read write;这允许您在会话中删除数据。删除数据后,请考虑运行 Vacuum 以回收尽可能多的空间
1vacuum;一旦您回收了空间,就可以运行以下命令来禁用 只读 模式
1set default_transaction_read_only = 'off';磁盘大小分布#
您可以在 项目的计算和磁盘页面 上查看磁盘大小的分布情况。

您的磁盘大小使用情况分为三类
- 数据库 - 数据库的磁盘使用情况。这包括实际数据、索引、物化视图……
- WAL - 预写式日志的磁盘使用情况。使用量取决于您的 WAL 设置和写入数据库的数据量。
- 系统 - 系统保留的磁盘使用情况,以确保数据库可以平稳运行。用户无法修改此项,它应该只占用很少的空间。
减小磁盘大小#
磁盘在正常操作期间不会自动缩小。一旦您 减小了数据库大小,它们将在 项目升级 期间自动“调整大小”。升级后的最终磁盘大小是数据库大小的 1.2 倍,最小为 8 GB。例如,如果您的数据库大小为 100GB,并且您有 200GB 的磁盘,那么升级后的磁盘大小将为 120 GB。
如果您的 WAL 目录很大,您可以 修改 WAL 设置,例如 max_wal_size。请自行承担风险,因为更改这些设置可能会产生副作用。要查询当前的 WAL 大小,请使用 SELECT SUM(size) FROM pg_ls_waldir()。
如果您的项目已经是 Postgres 的最新版本并且无法升级,那么大约每周会发布一个新版本的 Postgres,您可以一旦可用就升级到该版本。