TempDB được chia sẻ giữa tất cả các cơ sở dữ liệu trên ví dụ. Vì vậy, đôi khi có thể có sự tranh chấp trong TempDB cho một số trang nhất định: SGAM , GAM và PFS . Tóm lại, các trang này theo dõi những gì đã được sử dụng trong TempDB cho đến nay và nơi có không gian để sử dụng mới.
Thông thường, điều này được xử lý bằng cách thêm nhiều tệp dữ liệu vào TempDB. Có một vài triết lý khác nhau về con số chính xác, nhưng tất cả đều đồng ý bạn nên có nhiều hơn một.
Dưới đây là một vài truy vấn để chạy ...
Cái này sẽ cho bạn thấy TempDB có bao nhiêu tệp và vị trí của chúng.
-- tempdb layout
use tempdb
go
exec sp_helpfile
go
Điều này sẽ cho bạn thấy bạn có bao nhiêu CPU và lõi.
-- cores and hyperthreading
select cpu_count, hyperthread_ratio
from sys.dm_os_sys_info
go
Cái này sẽ cho bạn thấy có bao nhiêu nút NUMA và lõi trên mỗi nút NUMA mà bạn có.
-- numa nodes and schedulers
select node_id, online_scheduler_count
from sys.dm_os_nodes
order by node_id
go
Cái này sẽ cho bạn thấy những trang nào đang gặp phải sự chờ đợi trong TempDB.
-- see if anything is waiting on tempdb
select *
from sys.dm_os_waiting_tasks
where resource_description like '2:%'
go
Đây là một bài viết đi sâu hơn một chút về vấn đề tranh chấp trang.
OK, vậy bây giờ là phần triết lý ... :-)
Đối với bản thân tôi, nếu tôi ở trên một hệ thống SMP , tôi chỉ muốn có bao nhiêu tệp bằng một nửa tổng số lõi .
Nếu tôi đang sử dụng hệ thống NUMA , thì tôi chỉ muốn có nhiều tệp như lõi trên mỗi nút NUMA .
Tuy nhiên, tôi hiếm khi thấy bất kỳ cải thiện nào khi có nhiều hơn bốn tệp cho TempDB. Vì vậy, tôi thường bắt đầu với bốn và theo dõi sự tranh chấp như được giải thích trong bài viết tôi liên kết đến.
Nếu tôi tiếp tục thấy vấn đề, thì tôi sẽ thêm hai vấn đề nữa. Kiểm tra lại, thêm nhiều hơn và lặp lại cho đến khi sự tranh chấp biến mất.