![降低 Windows 备份的 I/O 优先级(Windows Server 2008 R2)](https://linux22.com/image/602487/%E9%99%8D%E4%BD%8E%20Windows%20%E5%A4%87%E4%BB%BD%E7%9A%84%20I%2FO%20%E4%BC%98%E5%85%88%E7%BA%A7%EF%BC%88Windows%20Server%202008%20R2%EF%BC%89.png)
我在 Windows Server 2008 R2 x64 机器上运行 PostgreSQL。我每天都安排从 RAID 1 DB 磁盘备份到专用独立磁盘。它们是 Dell PERC 6i 上的 SAS 15k。我使用内置的 Windows Server Backup 进行备份。
问题是,每当启动备份过程时,数据库性能就会受到严重影响。我认为性能几乎会降低 10 倍。
从资源监视器来看,备份时磁盘队列在两位数范围内,白天则少于 1。备份期间磁盘活动约为 30-50MB/s,因此我猜硬件运行正常,尽管 wbengine.exe 占用了大部分部分。
我认为降低备份进程的 IO 优先级是一个解决方案,但我找不到方法。调整进程 CPU 优先级似乎没有帮助。
答案1
在 Windows 中,I/O 优先级受线程 CPU 优先级的影响。有关更深入的参考,请参阅 Mark Russinovich 关于 Windows 内核的书籍。简而言之,您必须更改调用进程的 CPU 优先级。您希望您的进程优先级为低于正常水平或空闲改变 I/O 以免对数据库使用产生负面影响。
就您而言,您可能需要调用一个低优先级的备份脚本,该脚本本身会调用 wbadmin 或任何备份工具。
答案2
您的 PostGRES 版本是 VSS 编写器吗?(我相当肯定没有这样的怪物。)如果不是,那么您可能没有进行可用、可恢复的备份。在没有先关闭数据库引擎的情况下对数据和日志文件进行基于文件的备份是错误的。这也可能是您的 IO 性能问题的来源。
您应该使用本机 PG 工具将您的数据库转储到磁盘,然后备份转储的文件。
http://wiki.postgresql.org/wiki/Automated_Backup_on_Windows
http://www.postgresql.org/docs/current/static/backup-file.html