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
'SQL Server > SQL Server Tip' 카테고리의 다른 글
SQL Server DELAYED_DURABILITY 옵션으로 트랜잭션 로그 쓰기 성능 개선 하기 (1) | 2022.10.31 |
---|---|
SQL Server 에서 AWS S3에 직접 백업하기 (2) | 2022.10.28 |
SQL Server 복원 성능 최적화 (0) | 2020.02.29 |
SQL Server 트랜잭션 로그 복원시 복원 시간이 오래 걸리는 현상 (0) | 2020.02.28 |
SQL Server 2019 temp table을 사용한 워크로드에서 recompile 감소 (0) | 2019.09.24 |