TempDB는 인스턴스의 모든 데이터베이스간에 공유됩니다. 따라서 특정 페이지 SGAM , GAM 및 PFS에 대해 TempDB 내에 경합이있을 수 있습니다 . 간단히 말해,이 페이지는 지금까지 TempDB에서 사용 된 내용과 새로운 용도로 사용할 수있는 공간을 추적합니다.
일반적으로 이는 여러 데이터 파일을 TempDB에 추가하여 처리됩니다. 올바른 숫자에 대해서는 몇 가지 다른 철학이 있지만 모두 하나 이상이 있어야한다는 데 동의합니다.
실행할 몇 가지 쿼리는 다음과 같습니다.
이것은 TempDB가 가지고있는 파일의 수와 위치를 보여줍니다.
-- tempdb layout
use tempdb
go
exec sp_helpfile
go
이것은 당신이 얼마나 많은 CPU와 코어를 가지고 있는지 보여줄 것입니다.
-- cores and hyperthreading
select cpu_count, hyperthread_ratio
from sys.dm_os_sys_info
go
이것은 NUMA 노드 당 NUMA 노드와 코어 수를 보여줍니다.
-- numa nodes and schedulers
select node_id, online_scheduler_count
from sys.dm_os_nodes
order by node_id
go
TempDB에서 어떤 페이지가 대기 중인지 보여줍니다.
-- see if anything is waiting on tempdb
select *
from sys.dm_os_waiting_tasks
where resource_description like '2:%'
go
다음은 페이지 경합 문제에 대해 좀 더 자세히 다루는 기사입니다.
이제 철학 부분은 ... :-)
필자가 SMP 시스템 을 사용하는 경우 전체 코어의 절반 정도의 파일 만 원합니다 .
NUMA 시스템 을 사용하는 경우 NUMA 노드 당 코어 수 만큼의 파일 만 원합니다 .
그러나 TempDB에 대해 4 개 이상의 파일을 보유한 경우에는 거의 개선되지 않았습니다. 그래서 나는 보통 4 개로 시작하여 링크 된 기사에 설명 된대로 경합을 모니터링합니다.
문제가 계속되면 두 개를 더 추가합니다. 다시 확인하고 추가 한 후 경합이 사라질 때까지 반복하십시오.