Liên quan đến: Sự khôn ngoan hiện tại trên SQL Server và Hyperthreading
Gần đây, chúng tôi đã nâng cấp máy chủ cơ sở dữ liệu Windows 2008 R2 từ X5470 lên X5560 . Lý thuyết là cả hai CPU đều có hiệu năng rất giống nhau, nếu có gì thì X5560 nhanh hơn một chút.
Tuy nhiên, hiệu suất SQL Server 2008 R2 đã khá tệ trong ngày hôm qua và việc sử dụng CPU khá cao.
Tuổi thọ của trang là rất lớn, chúng tôi đang nhận được gần như 100% bộ nhớ cache cho các trang, vì vậy bộ nhớ không phải là vấn đề.
Khi tôi chạy:
SELECT * FROM sys.dm_os_wait_stats
order by signal_wait_time_ms desc
Tôi đã nhận:
Wait_type Wait_t Nhiệm_count Wait_time_ms max_wait_time_ms signal_wait_time_ms -------------------------------------------------- ---------- -------------------- -------------------- -------------------- -------------------- XE_TIMER_EVENT 115166 2799125790 30165 2799125065 REQUEST_FOR_DEADLOCK_SEARCH 559393 2799053973 5180 2799053973 SOS_SCHEDULER_YIELD 152289883 189948844 960 189756877 CXPACKET 234638389 2383701040 141334 118796827 SLEEP_TASK 170743505 1525669557 1406 76485386 LATCH_EX 97301008 810738519 1107 55093884 LOGMGR_QUEUE 16525384 2798527632 20751319 4083713 VIẾT 16850119 18328365 1193 2367880 PAGELATCH_EX 13254618 8524515 11263 1670113 ASYNC_NETWORK_IO 23954146 6981220 7110 1475699 (10 hàng bị ảnh hưởng)
Tôi cũng đã chạy
-- Isolate top waits for server instance since last restart or statistics clear
WITH Waits AS (
SELECT
wait_type,
wait_time_ms / 1000. AS [wait_time_s],
100. * wait_time_ms / SUM(wait_time_ms) OVER() AS [pct],
ROW_NUMBER() OVER(ORDER BY wait_time_ms DESC) AS [rn]
FROM sys.dm_os_wait_stats
WHERE wait_type NOT IN ('CLR_SEMAPHORE','LAZYWRITER_SLEEP','RESOURCE_QUEUE',
'SLEEP_TASK','SLEEP_SYSTEMTASK','SQLTRACE_BUFFER_FLUSH','WAITFOR','LOGMGR_QUEUE',
'CHECKPOINT_QUEUE','REQUEST_FOR_DEADLOCK_SEARCH','XE_TIMER_EVENT','BROKER_TO_FLUSH',
'BROKER_TASK_STOP','CLR_MANUAL_EVENT','CLR_AUTO_EVENT','DISPATCHER_QUEUE_SEMAPHORE',
'FT_IFTS_SCHEDULER_IDLE_WAIT','XE_DISPATCHER_WAIT', 'XE_DISPATCHER_JOIN'))
SELECT W1.wait_type,
CAST(W1.wait_time_s AS DECIMAL(12, 2)) AS wait_time_s,
CAST(W1.pct AS DECIMAL(12, 2)) AS pct,
CAST(SUM(W2.pct) AS DECIMAL(12, 2)) AS running_pct
FROM Waits AS W1
INNER JOIN Waits AS W2 ON W2.rn <= W1.rn
GROUP BY W1.rn, W1.wait_type, W1.wait_time_s, W1.pct
HAVING SUM(W2.pct) - W1.pct < 95; -- percentage threshold
Và có
Wait_type Wait_time_s pct đang chạy_pct CXPACKET 554821.66 65.82 65.82 LATCH_EX 184123.16 21.84 87.66 SOS_SCHEDULER_YIELD 37541,17 4,45 92.11 PAGEIOLATCH_SH 19018.53 2.26 94.37 FT_IFTSHC_MUTEX 14306.05 1.70 96,07
Điều đó cho thấy số lượng lớn các truy vấn đồng bộ hóa thời gian liên quan đến tính song song (CXPACKET cao). Ngoài ra, nhiều giai đoạn trong số các truy vấn vấn đề này đang được thực thi trên nhiều lõi (chúng tôi không có gợi ý MAXDOP ở bất kỳ đâu trong mã của chúng tôi)
Máy chủ đã không được tải trong hơn một ngày. Chúng tôi đang gặp phải một lượng lớn phương sai với thực thi truy vấn, thông thường nhiều truy vấn dường như chậm hơn so với trên máy chủ DB trước đây của chúng tôi và CPU thực sự rất cao.
Sẽ vô hiệu hóa Hyperthreading giúp giảm mức sử dụng CPU của chúng tôi và tăng thông lượng?