gotosocial/docs/locales/zh/admin/database_maintenance.md

56 lines
3.0 KiB
Markdown
Raw Normal View History

# 数据库维护
无论你选择使用 SQLite 还是 Postgres 来运行 GoToSocial可能都需要偶尔执行一些维护工作以保持数据库的良好运作。
!!! tip
尽管此处提供的维护建议旨在不破坏现有数据,你还是应该在手动执行维护操作之前备份数据库。这样,如果输入错误或意外运行了不当命令,可以恢复备份并重试。
!!! danger
**强烈不建议**手动创建、删除或更新 GoToSocial 数据库中的条目,这里不会提供相关命令。即使你认为自己知道在做什么,运行 `DELETE` 等语句可能会引入非常难以排查的问题。以下维护建议旨在帮助你的实例平稳运行;如果你手动进入数据库并对条目、表和索引进行修改,它们不会拯救你的数据。
## SQLite
要进行手动 SQLite 维护,你首先应该在存储 GoToSocial sqlite.db 文件的机器上安装 SQLite 命令行工具 `sqlite3`。有关 `sqlite3` 的详细信息,请参见[此处](https://sqlite.org/cli.html)。
### 分析/优化
按照 [SQLite 最佳实践](https://sqlite.org/lang_analyze.html#recommended_usage_pattern)GoToSocial 在关闭数据库连接时运行 `optimize` SQLite pragma`analysis_limit=1000`,以保持索引信息的更新。
在每次数据库迁移后(例如,启动新版本的 GoToSocial 时GoToSocial 将运行 `ANALYZE`,以确保查询计划器正确考虑迁移新增或删除的索引。
`ANALYZE` 命令可能需要大约 10 分钟,具体时间取决于硬件和数据库文件的大小。
由于上述自动化步骤,正常情况下你不需要针对 SQLite 数据库文件手动运行 `ANALYZE` 命令。
然而,如果你中断了之前的 `ANALYZE` 命令,并发现查询运行缓慢,可能是因为 SQLite 内部表中存储的索引元数据已被删除或不当修改。
如果是这种情况,可以尝试手动运行完整的 `ANALYZE` 命令,步骤如下:
1. 停止 GoToSocial。
2.`sqlite3` shell 中连接到你的 GoToSocial 数据库文件,运行 `PRAGMA analysis_limit=0; ANALYZE;`(这可能需要几分钟)。
3. 启动 GoToSocial。
[查看更多信息](https://sqlite.org/lang_analyze.html#approximate_analyze_for_large_databases).
### 清理Vacuum
GoToSocial 当前未启用 SQLite 的自动清理auto-vacuum。要将数据库文件重新打包到最佳大小你可能需要定期例如每几个月在 SQLite 数据库上运行 `VACUUM` 命令。
可以在[此处](https://sqlite.org/lang_vacuum.html)查看有关 `VACUUM` 命令的详细信息。
基本步骤如下:
1. 停止 GoToSocial。
2.`sqlite3` shell 中连接到你的 GoToSocial 数据库文件,运行 `VACUUM;`(这可能需要几分钟)。
3. 启动 GoToSocial。
### 副本
为数据库设置副本等保护措施是常见做法。SQLite 可以使用外部软件进行副本创建。基本步骤描述在 [配置 SQLite 副本](../advanced/replicating-sqlite.md) 页面。
## Postgres
待完成Postgres 的维护建议。