Site Loader

笔者通过以下方法对 Nextcloud 进行了一系列的优化工作,在性能上虽说有所提升,但在 Web 工作界面进行读取、写入、删除等操作时,仍感到缓慢。

《Nextcloud性能优化-定时生成缩略图》
《Nextcloud性能优化-开启HTTP2》
《Nextcloud性能优化-后台任务Cron》
《Nextcloud性能优化-PHP-FPM进程管理优化》

Nextcloud 的文件数据记录是与数据库关联的,难道是与数据库读取、写入有关?这时,想到了MySQL磁盘写入策略以及数据安全性的关键参数 innodb_flush_log_at_trx_commit。

SSH 登录 Ubuntu Server,sudo -i 获取 root 权限,输入如下命令,查看 MariaDB 的 innodb_flush_log_at_trx_commit 参数值。

(笔者使用的是 MariaDB,MySQL与之同理。)

mysql -u root -p
#输入数据库用户root密码
SHOW VARIABLES LIKE 'innodb_flush_log_at_trx_commit';
#查看innodb_flush_log_at_trx_commit的值 

默认值为 1 。

对于 innodb_flush_log_at_trx_commit 的参数,MySQL官网解释如下:

简单理解就是:

innodb_flush_log_at_trx_commit = 0 每秒调用 flush + fsync,定时器自己维护。

innodb_flush_log_at_trx_commit = 1 实时调用 flush + fsync 没法批处理,性能很低。

innodb_flush_log_at_trx_commit = 2 实时flush,定时 fsync 交给 OS 维护定时器。

参数为 1 时,安全性最高,在读写过程中断电或故障不会造成数据的严重丢失,但是性能非常低。

参数为 0 时,安全性最低,在读写过程中断电或故障可能会造成数据的严重丢失,但是性能非常高。

参数为 2 时,安全性及性能都为中,在读写过程中断电或故障可能会造成数据的丢失。

最后,折中选择设置参数为 2 。

(注:在文件上传写入时断电或故障,仍可使用 Nextcloud 命令 ”sudo -u www-data php occ files:scan 用户名“,对用户上传文件重新扫描并关联入数据库。)

具体修改方法如下:

进入 /etc/mysql/mariadb.conf.d 目录,修改 50-server.cnf 文件。

nano 50-server.cnf

在 [mysqld] 项下添加 innodb_flush_log_at_trx_commit = 2

保存并退出,重启数据库服务。

service mysql restart

再次输入如下命令查看 innodb_flush_log_at_trx_commit 参数值。

mysql -u root -p
#输入数据库用户root密码
SHOW VARIABLES LIKE 'innodb_flush_log_at_trx_commit';
#查看innodb_flush_log_at_trx_commit的值 

显示参数值为 2 。

至此,设置已成功,测试读写性能,得到了明显的提高。

另外,可以再结合设置 sync_binlog 参数,实现进一步的优化,具体参数值及解释请上网查找。

Post Author: 记忆深潜

0 评论
内联反馈
查看所有评论
0
希望看到您的想法,请发表评论。x
()
x