VM 환경의 SQL Server에서 할당된 CPU를 모두 사용하지 못하는 현상
VM 환경의 SQL Server에서 할당된 CPU를 모두 사용하지 못하는 현상
· Version : SQL Server
Virtual Machine (VM)의 성능이 향상됨에 따라 많은 시스템들이 Physical 서버에서 VM 머신으로 마이그레이션을 진행하고 있다. 이번 포스트는 Physical머신에서 VM으로 마이그레이션 후 SQL Server에서 할당된 CPU를 모두 사용하지 못하는 성능 문제에 대해서 다룬다.
Host Server
OS |
Windows Server 2019 Standard |
CPU |
2 socket (64 Core) |
RAM |
128GB |
VM Server
OS |
Windows Server 2019 Standard |
SQL Server |
SQL Server 2016 Standard |
CPU |
8 Core |
RAM |
32GB |
아래 그림을 보면 가상머신에 할당된 CPU 8 Core 에서 4 Core만 사용하는것을 확인할 수 있다.
아래 쿼리를 사용하여 실제 SQL Server가 사용중인 CPU를 확인할 수 있다. 역시 할당된 8개의 코어중에 4개만 사용하고 있음이 표시되었다.
SELECT scheduler_id, cpu_id, status, is_online FROM sys.dm_os_schedulers |
원인을 확인결과 VM 머신의 세팅에 문제가 있다는 것을 확인하였다. 필자가 구성한 VM환경을 보면, 8 소켓에 8Core로 설정되어 있는것을 확인할 수 있다. 이 뜻은 1소켓 1 코어가 8개 할당되었다는 의미이다. SQL 공식 다큐먼트를 보면 Standard의 경우 4소켓 또는 24코어까지만 지원된다고 되어 있다. 즉 소켓의 개수가 8개로 세팅되어, 실제 4 소켓만 동작을 하기 때문에 4Core만 동작을 하게 된것이다.
VM 환경을 변경하여, 1소켓 8 Core로 설정을 변경한 후 정상적으로 모든 CPU를 사용하는 것을 확인하였다.
VM의 환경을 변경하는것은 시스템 운영에 문제가 발생할 수 있으므로 반드시 시스템 담당자와 상의해서 진행할 수 있도록 한다.
아래 스크립트는 현재 구성된 VM의 환경에서 SQL Server가 할당된 CPU를 모두 사용가능한지 쉽게 확인한다.
---------------------------------------------------------------------------------------------------------------- -- CPU VISIABLE ONLINE CHECK ---------------------------------------------------------------------------------------------------------------- DECLARE @OnlineCpuCount int DECLARE @LogicalCpuCount int
SELECT @OnlineCpuCount = COUNT(*) FROM sys.dm_os_schedulers WHERE status = 'VISIBLE ONLINE' SELECT @LogicalCpuCount = cpu_count FROM sys.dm_os_sys_info
SELECT @LogicalCpuCount AS 'ASSIGNED ONLINE CPU #', @OnlineCpuCount AS 'VISIBLE ONLINE CPU #', CASE WHEN @OnlineCpuCount < @LogicalCpuCount THEN 'You are not using all CPU assigned to O/S! If it is VM, review your VM configuration to make sure you are not maxout Socket' ELSE 'You are using all CPUs assigned to O/S. GOOD!' END as 'CPU Usage Desc' ---------------------------------------------------------------------------------------------------------------- GO |
2020-03-03/ Sungwook Kang / http://sungwookkang.com
SQL Server, MS SQL, VM, Virtual Machine, CPU 할당, 가상머신 SQL, SQL on VM, dm_os_schedulers, dm_os_sys_info