系统优化

飞牛NAS数据库优化:PostgreSQL/MySQL调优

为什么要在飞牛NAS上优化数据库?

飞牛NAS作为一台高性能的私有云设备,常常被用来搭建各种服务,比如网站后台、CRM系统、个人记账应用,甚至是轻量级的ERP。在这些应用中,数据库(PostgreSQL或MySQL)是性能的“心脏”。很多用户发现,NAS上跑数据库应用时,初期很流畅,但随着数据量增加,响应变慢、CPU飙升、内存吃紧。这往往不是硬件不行,而是默认配置没有针对NAS环境做优化。

NAS的硬件特点是:CPU性能一般(如N100、N305、J4125等)、内存有限(通常8GB-32GB)、存储依赖网络或SATA SSD/HDD,且I/O延迟比服务器高。如果不调整数据库参数,默认配置会假设你有充足的内存和极快的磁盘,这显然不符合NAS场景。本文将手把手教你如何对PostgreSQL和MySQL进行关键调优,让飞牛NAS上的数据库应用“飞”起来。

准备工作

在开始之前,你需要确认两件事:

  1. 数据库版本:在飞牛NAS的终端或SSH中执行以下命令查看。 psql --version mysql --version
  2. 配置文件位置:
  3. PostgreSQL:通常位于 /etc/postgresql/15/main/postgresql.conf(版本号可能不同)。
  4. MySQL/MariaDB:通常位于 /etc/mysql/mariadb.conf.d/50-server.cnf/etc/my.cnf

建议在修改前备份原文件,例如执行 cp /etc/postgresql/15/main/postgresql.conf /etc/postgresql/15/main/postgresql.conf.bak

PostgreSQL 调优

调整共享缓冲区(shared_buffers)

PostgreSQL的共享缓冲区用于缓存数据页,默认值通常很小(如128MB)。对于NAS,建议设置为物理内存的25%,但不要超过8GB。例如,如果你的飞牛NAS有16GB内存,可以设置为4GB。

编辑配置文件,找到 shared_buffers 行:

shared_buffers = 4GB

注意:单位可以是MB或GB,不要漏掉等号后的空格。

优化工作内存(work_mem)

work_mem 控制排序和哈希操作的内存。默认4MB太低,会导致大量磁盘I/O。建议设置为8MB-32MB,取决于并发连接数。如果你同时有10个连接,每个连接分配16MB,总内存为160MB,在可控范围内。

work_mem = 16MB

调整检查点设置

NAS的磁盘通常比服务器慢,频繁的检查点写盘会拖慢性能。适当调大 checkpoint_timeoutmax_wal_size,减少写盘频率。

checkpoint_timeout = 30min
max_wal_size = 4GB
min_wal_size = 1GB

关闭同步提交(可选)

如果你的数据重要性不是极端高(比如不是金融交易),可以关闭同步提交,减少每次写入的磁盘等待。

synchronous_commit = off

应用配置并重启

保存文件后,执行以下命令重启PostgreSQL服务:

sudo systemctl restart postgresql

MySQL/MariaDB 调优

配置InnoDB缓冲池大小

InnoDB是MySQL默认存储引擎,缓冲池大小直接影响读写性能。同样建议设置为物理内存的50%-70%。在16GB内存的NAS上,设置为8GB。

在配置文件中找到或添加:

[mysqld]
innodb_buffer_pool_size = 8G

优化查询缓存(Query Cache)

MySQL 5.7及之前版本支持查询缓存,但高并发下反而成为瓶颈。推荐关闭它,让操作系统缓存发挥作用。

query_cache_type = 0
query_cache_size = 0

调整临时表大小

临时表默认存储在磁盘上,调大 tmp_table_sizemax_heap_table_size 可以让更多临时表驻留在内存中。

tmp_table_size = 64M
max_heap_table_size = 64M

减少磁盘I/O:调整日志文件大小

InnoDB的redo日志文件(ib_logfile)默认较小,频繁切换会导致写盘。建议设置为缓冲池大小的25%,例如缓冲池8GB,则日志文件合计2GB,每个文件大小1GB。

innodb_log_file_size = 1G
innodb_log_files_in_group = 2

注意:修改此参数需要先停掉MySQL,删除旧的日志文件,再启动。建议在低负载时操作。

优化连接数

NAS上应用并发通常不高,默认151连接数足够,但可以适当降低,防止内存浪费。

max_connections = 50

重启MySQL

sudo systemctl restart mariadb

验证调优效果

调优后,不要急着认定成功,建议用以下方式验证:

  • 查看数据库状态:PostgreSQL执行 \l+ 或查询 pg_stat_activity;MySQL执行 SHOW STATUS;
  • 监控磁盘I/O:在NAS上执行 iostat -x 1 观察 await%util 是否下降。
  • 运行负载测试:使用 pgbench(PostgreSQL自带)或 sysbench(MySQL常用)模拟读写,观察延迟和吞吐量。

例如,用sysbench测试MySQL:

sysbench oltp_read_write --table-size=1000000 --mysql-user=root --mysql-password=yourpassword prepare
sysbench oltp_read_write --table-size=1000000 --mysql-user=root --mysql-password=yourpassword run

常见问题与注意事项

  • 如果调大内存后,系统开始使用swap(交换空间),说明给数据库的内存过多,需要适当降低。
  • 不要盲目复制网上大内存服务器的配置。NAS的内存通常有限,留出1-2GB给系统和其他服务更安全。
  • 修改配置文件后,务必检查语法是否正确。PostgreSQL可以用 pg_ctl reload 测试,MySQL可以用 mysqld --validate-config

总结

在飞牛NAS上优化数据库,核心思路是“内存换性能,减少I/O”。PostgreSQL和MySQL的关键参数都围绕缓冲池、工作内存和日志策略。通过本文的调整,你的NAS数据库应用应该能显著提升响应速度,降低CPU和磁盘压力。记住,每台NAS的硬件和负载不同,建议在调整后持续观察几天,再微调参数。数据库优化不是一次性工作,而是持续改进的过程。

💬 评论区
leave a comment

no comments yet