我正在Windows 10上运行PostgreSQL 12的基准测试。我想限制PostgreSQL服务用来测试CPU性能如何影响TPU的CPU内核数。
现在我使用以下命令启动PostgreSQL服务:
net start postgresql-x64-12
而且我知道如何限制普通Windows应用程序的CPU内核数:
start /affinity 1 "" "C:\Windows\System32\calc.exe"
如何限制通过net start命令运行的Windows服务使用的CPU内核数? /affinity
命令中是否有等效的net start
选项?
我找到了解决方案。首先,您无法将CPU亲和力设置为Windows系统进程或服务(请参见https://www.atmarkit.co.jp/ait/articles/0703/16/news151.html(日语))。
在我的情况下,我可以使用pg_ctl
选项通过cmd.exe的/affinity
命令运行PostgreSQL进程:
cmd.exe /c "start /affinity 1F /B c:\path\to\PostgreSQL\12\bin\pg_ctl.exe start -w -s -D C:\path\to\PostgreSQL\12\data"
请注意,您不能使用Start-Process
cmdlet和ProcessorAffinity
属性,如下所示:
$app = Start-Process 'c:\path\to\PostgreSQL\12\bin\pg_ctl.exe' 'start -D C:\path\to\PostgreSQL\12\data' -PassThru -NoNewWindow
$app.ProcessorAffinity = 0x3
这将导致SetValueInvocationException
,因为pg_ctl.exe
在启动PostgreSQL实例后立即退出。