Bỏ qua để tới nội dung chính
Đăng nhập với Microsoft
Đăng nhập hoặc tạo một tài khoản.
Xin chào,
Chọn một tài khoản khác.
Bạn có nhiều tài khoản
Chọn tài khoản bạn muốn đăng nhập.

Tóm tắt

Microsoft SQL Server 2005 sử dụng tính năng truy cập CPU độ phân giải cao để cung cấp các khả năng của thời gian microsecond. Microsecond là một phần triệu của một thứ hai (hoặc một thousandth của một mili giây). Tuy nhiên, các giá trị thời gian SQL Server có thể không đúng nếu bạn dùng công nghệ thay đổi tần suất CPU. Ví dụ, sự cố này có thể xảy ra khi bạn sử dụng bất kỳ công nghệ nào sau đây:

  • Bước CPU

  • Công nghệ của AMD Cool'n'Quiet

  • Các đề án Power Power khác nhau

Bài viết này chứa phương pháp và thông tin bổ sung để giúp bạn làm việc xung quanh sự cố này.

Triệu chứng

Khi bạn dùng câu lệnh đặt thời gian thống kê để hiển thị thực thi máy chủ, phân tích và thời gian biên soạn, bạn có thể nhận được các giá trị không chính xác. Ví dụ, bạn có thể nhận thấy rằng thời gian đã trôi qua của thời gian thực hiện SQL Server lớn hơn nhiều so với thời gian CPU. Sự cố này có thể ảnh hưởng đến độ chính xác của điều chỉnh hiệu năng. Sự cố này xảy ra khi bạn sử dụng một trong các công nghệ được liệt kê trong mục "tóm tắt" trên máy chủ.

Nguyên nhân

Sự cố này xảy ra vì tần suất CPU được thay đổi khi bạn sử dụng các công nghệ này. SQL Server 2005 sử dụng tính năng truy cập CPU có độ phân giải cao để cung cấp các khả năng của thời gian microsecond. Nếu tần suất CPU được thay đổi để bảo lưu năng lượng và giảm đầu ra nhiệt, các lượng dữ liệu được tính toán có thể không chính xác.

Giải pháp

Thông tin về gói dịch vụ

Để giải quyết vấn đề này, có được gói dịch vụ mới nhất dành cho SQL Server 2005. Để biết thêm thông tin, hãy bấm số bài viết sau đây để xem bài viết trong cơ sở kiến thức Microsoft:

913089 Cách nhận gói dịch vụ mới nhất cho SQL Server 2005Ghi chú Trong SQL Server 2005 gói dịch vụ 3 và trong các gói dịch vụ sau đó, dấu thời gian bộ xử lý không được sử dụng. Các phiên bản của SQL Server 2005 dùng một bộ hẹn giờ đáng tin cậy hơn có độ chính xác tối đa là 1 mili giây.

Trạng thái

Sự cố này lần đầu tiên được sửa trong SQL Server 2005 Service Pack 3.

Cách giải quyết

SQL Server 2005 yêu cầu các điểm dữ liệu đã biết và ổn định để thực hiện điều chỉnh hiệu suất chính xác. Nếu các điều chỉnh tần suất CPU động được bật trên máy tính, bạn có thể vô hiệu hóa chúng để CPU duy trì tỷ suất ổn định trước khi bạn bắt đầu giám sát và điều chỉnh hiệu suất SQL Server. Để thực hiện điều này, hãy sử dụng các phương pháp sau đây.

Đặt cấu hình lược đồ Power trên máy tính để buộc CPU duy trì tần suất tối đa

Để thực hiện việc này, hãy làm theo các bước sau:

  1. Bấm vào bắt đầu, bấm vào chạy, nhập powercfg. cpl, rồi bấm OK.

  2. Trong hộp thoại thuộc tính tùy chọn nguồn , hãy bấm vào luôn vào trong danh sách Power Schemes .

  3. Bấm OK.

Trôi dạt có thể xảy ra. Trôi dạt là một phân kỳ giữa các giá trị tần suất CPU. Để biết thêm thông tin, hãy xem mục "Drift". Trong trường hợp này, bạn phải khởi động lại Microsoft Windows để resynchronize tần suất của mọi CPU sau khi bạn thay đổi bảng phối hợp. Nếu bạn không thể khởi động lại máy tính, hãy bật mối quan hệ bộ xử lý SQL Server để ngăn chặn chủ đề công nhân SQL Server di chuyển giữa các CPU. Khi bạn thực hiện điều này, bạn không cần phải khởi động lại máy tính ngay cả khi một phân kỳ giữa các giá trị tần suất CPU xảy ra. Để bật mối quan hệ bộ xử lý SQL Server cho mọi CPU trên máy chủ, bạn phải sử dụng một mặt nạ khác, tùy thuộc vào số lượng bộ xử lý lô-gic nằm trên máy chủ. Bảng sau đây liệt kê các kịch bản ví dụ.

Số CPU

Báo cáo để bật mối quan hệ bộ xử lý

hai CPU

exec sp_configure ' Affinity Mask ', 0x00000003GOreconfigureGO

CPU 04

exec sp_configure ' Affinity Mask ', 0x0000000FGOreconfigureGO

CPU 08

exec sp_configure ' Affinity Mask ', 0x000000FFGOreconfigureGO

16 CPU

exec sp_configure ' Affinity Mask ', 0x0000FFFFGOreconfigureGO

32 CPU

exec sp_configure ' Affinity Mask ', 0xFFFFFFFFGOreconfigureGO

Lưu ý Có thể không đủ để tắt tính năng biến thể tần suất CPU ở mức BIOS. Các tiện ích khác nhau của bên thứ ba có thể thay đổi tần suất CPU. Một số điều chỉnh cho phép triển khai ngay cả khi CPU được thiết đặt tối đa Power Scheme. Trong trường hợp này, bạn phải vô hiệu hóa các tiện ích bên thứ ba này khi bạn thực hiện điều chỉnh hiệu suất trong SQL Server 2005.

Sử dụng các tiện ích và trình điều khiển bên thứ ba để đồng bộ hóa tần suất CPU và đồng hồ CPU

Trong những dịp hiếm hoi, Hệ thống có thể yêu cầu một bản Cập Nhật từ nhà sản xuất để sửa các vấn đề về tần suất CPU. Đây là một cách tốt nhất để kiểm tra hệ thống cho các bản Cập Nhật BIOS, mã lỗi và phần vững mới nhất nếu bạn nghi ngờ rằng hệ thống có thể gặp phải vấn đề.

Thông tin Bổ sung

Microsoft SQL Server 2000 và các phiên bản cũ hơn của SQL Server sử dụng các cơ chế thời gian của Windows. Các cơ chế thời gian sử dụng các giá trị chính xác mili giây. Thông thường, độ chính xác này là 10 đến 15 MS. Tuy nhiên, độ chính xác có thể lớn như 55 MS. Các truy vấn SQL Server thường được hoàn thành trong phạm vi thời gian có một số thứ hai hoặc kéo dài. Độ chính xác này đòi hỏi phải có bộ hẹn giờ độ phân giải cao. Do đó, các phiên bản này của SQL Server báo cáo thời gian của một số truy vấn là 0 MS. Vì vậy, rất khó để giám sát hiệu suất và điều chỉnh hiệu suất SQL Server trong các phiên bản cũ hơn của SQL Server. SQL Server 2005 cải thiện độ chính xác bằng cách sử dụng tính năng truy cập CPU độ phân giải cao để cung cấp các chức năng thời gian microsecond. Khi bạn sử dụng các công nghệ được liệt kê trong mục "tóm tắt", các giá trị thời gian được báo cáo có thể không đúng. Sự cố này có thể ảnh hưởng đến các đối tượng và tính năng sau đây:

  • Theo dõi sự kiện:

    • Sự kiện chú ý

    • Các sự kiện trong nút quy trình được lưu trữ

    • Các sự kiện trong nút TSQL

    • Các sự kiện trong nút đối tượng

    • Các sự kiện trong nút giao dịch

  • Các dạng xem quản lý động:

    • sys.dm_exec_query_stats

    • sys.dm_exec_requests

    • sys.dm_exec_sessions

    • sys.dm_io_pending_io_requests

    • sys.dm_os_ring_buffers

    • sys.dm_os_sys_info

    • sys.dm_io_virtual_file_stats

    • sys.dm_os_wait_stats

  • Câu lệnh đặt thời gian thống kê

  • Bảng hệ thống sysprocesses

Sau khi bạn cài đặt SQL Server 2005 gói dịch vụ 2 (SP2), Nhật ký SQL Server một thông báo lỗi trong Nhật ký lỗi khi SQL Server phát hiện biết số giờ có độ phân giải cao sẽ không đồng bộ giữa các CPU. Thông báo lỗi cho biết thời gian hiệu năng có thể không chính xác và người dùng nên sử dụng dữ liệu hiệu năng với thận trọng. Văn bản của thông báo lỗi tương tự như một trong các thông báo lỗi sau đây:

Thông báo lỗi 1

Dấu thời gian truy cập CPU trên trình lên lịch ID 2 không được đồng bộ hóa với các CPU khác.

Thông báo lỗi 2

Tần suất đóng dấu thời gian CPU đã thay đổi từ 191469 thành 1794177 ticks trên mỗi mili giây. Tần suất mới sẽ được sử dụng

SQL Server sử dụng trình hướng dẫn truy nhập tem thời gian thực (RDTSC) để có được số đếm đánh dấu CPU 64 bit. Bạn có thể chia giá trị này bằng tần suất CPU để chuyển đổi giá trị thành giá trị mili giây. Các biến thể thời gian có thể xảy ra khi tần suất CPU thay đổi hoặc trôi dạt xảy ra.

Bước CPU

CPU Stepping được định nghĩa là thay đổi cố ý trong tần suất CPU. CPU Stepping cũng có thể được gọi là công nghệ Intel SpeedStep hoặc AMD PowerNow! công nghệ. Khi CPU bước xảy ra, tốc độ CPU có thể tăng hoặc giảm theo increments nhỏ như 50 MHz để bảo tồn năng lượng và giảm đầu ra nhiệt. CPU nằm trong cùng một nút truy nhập bộ nhớ không đồng bộ (NUMA) không thể điều chỉnh một cách độc lập tần số. Bảng sau đây minh họa cách các thay đổi về bước CPU có thể ảnh hưởng đến tính toán thời gian.

Hành động

Bọ ve RDTSC

Ticks mỗi mm (tần suất)

Thời gian đồng hồ tường

Bắt đầu lô

1

200

4-0

Bước tắt tần suất

200

100

1ms

Lô kết thúc

500

3ms

SỐ

500

4ms

SQL Server bắt các bọ ve RDTSC ở cả hai đầu và cuối RDTSC ticks. Sau đó, SQL Server chia dấu đầu dòng theo giá trị tần suất. Trong ví dụ này, các phép tính theo thời gian sau đây sẽ xảy ra khi bạn sử dụng giá trị tần suất của 200 hoặc 100:

  • Tần suất 200: 500/200 = 2,5 MS

  • Tần suất 100: 500/100 = 5 MS

Không phải của các phép tính thời gian khớp với thời gian tường đồng hồ thực tế của 4 MS. Nếu tính toán này được sử dụng trong RPC: sự kiện theo dõihoàn thành , các cột dữ liệu thời gian và thời gian kết thúc được báo cáo không đúng. RPC: đã hoàn thành sự kiện bắt đầu thời gian đồng hồ treo tường và số đếm đánh dấu CPU. Để có được thời gian độ phân giải cao hơn mức Windows trong sql server 2005, các cột dữ liệu thời gian và thời gian kết thúc trong một theo dõi SQL Server được tính bằng cách dùng số đếm xác định CPU đã trôi qua. Cột thời gian kết thúc được tính bằng cách Thêm cột thời gian vào cột thời gian bắt đầu . Trong ví dụ này, cột thời gian kết thúc được tính bằng cách thêm sai hoặc 2,5 MS hoặc 5 MS vào thời gian bắt đầu.

Tay

Trôi dạt là một phân kỳ trong các giá trị đồng hồ CPU. Hệ thống có nhiều CPU có thể tạo ra các giá trị đồng hồ CPU khác nhau cho cùng một điểm trong thời gian. Mặc dù nó không phải là phổ biến, CPU có thể gặp sự chia tách đồng hồ theo thời gian. Ví dụ sau đây minh họa cách thay đổi trôi dạt có thể ảnh hưởng đến kết quả của cột dữ liệu thời gian trong theo dõi SQL Server. Ví dụ giả định rằng tần suất CPU vẫn ổn định tại 200 ticks mỗi mili giây. Bảng sau đây minh họa các sự kiện trong kịch bản này.

Hành động

CPU đã lên lịch Windows

CPU 1 RDTSC

CPU 2 RDTSC

Thời gian đồng hồ tường

Bắt đầu lô

1

100

1100

4-0

Lô kết thúc

4

900

1900

4 MS

SỐ

4 MS

SQL Server bắt các bọ ve RDTSC ở cả hai điểm bắt đầu và các điểm cuối. Sau đó, SQL Server chia các dấu RDTSC theo giá trị tần suất. Trong ví dụ này, Windows đã lên lịch thread SQL Server Worker trên hai CPU khác nhau. Thread SQL Server Worker rằng các dịch vụ hàng đầu tiên chạy trên CPU đầu tiên (CPU 1). Tuy nhiên, việc thực hiện hàng loạt đã bị ngắt tại một số điểm và SQL Server đã gửi thực hiện hàng loạt đến hàng đợi đang chờ xử lý. Khi SQL Server đã gửi chủ đề công nhân SQL Server rằng các dịch vụ này lô vào hàng đợi Runnable một lần nữa, Windows sẽ gửi chuỗi để chạy trên CPU thứ hai (CPU 2). Thread SQL Server Worker đã hoàn thành chạy trên CPU 2. Do sự trôi dạt CPU, giá trị đánh dấu kết thúc đã bị bắt từ CPU 2 là 1900 thay vì 900. Bạn có thể tránh hành vi này nếu bạn bật mối quan hệ bộ xử lý SQL Server. Các phép tính thời gian sau đây được sử dụng trong ví dụ này:

  • Giá trị không đúng nhưng báo cáo: (1900 – 100 = 1800)/200 = 9 MS

  • Giá trị chính xác: (900 – 100 = 800)/200 = 4 MS

Giá trị của cột thời gian cho RPC: đã hoàn thành sự kiện sẽ được báo cáo là 9 MS thay vì 4 MS. Kết quả này có nhiều hơn gấp đôi giá trị chính xác của 4 MS. Các tin nhắn cảnh báo trôi dạt được thêm vào SQL Server 2005 để cho biết kết quả hoạt động được đề cập trước đó có thể không đáng tin cậy. Trong một số tình huống được phát hiện, SQL Server 2005 SP2 có thể báo cáo tin nhắn cảnh báo về những điều sau đây:

  • Thông điệp cảnh báo trôi dạt sai

  • Trôi dạt có thể trở thành hàng chục mili giây mà không gây ra hiệu ứng hệ thống đáng chú ý

Bạn phải cẩn thận khi đánh giá các kết quả đầu ra có hiệu suất và khi bạn so sánh các kết quả có liên quan đến hiệu suất đến thời gian treo tường. Nếu không có dấu hiệu nào của các vấn đề về hiệu suất khác, bạn thường có thể bỏ qua các tin nhắn cảnh báo trôi dạt. Ví dụ, bạn thường có thể bỏ qua các tin nhắn cảnh báo trôi dạt trong các trường hợp sau đây:

  • Các quy trình đang chạy như mong đợi.

  • Các truy vấn SQL Server không chạy trong các mẫu hình kỳ lạ.

  • Bạn không nhìn thấy các dấu hiệu của tắc nghẽn khác.

Tuy nhiên, trước khi bạn bỏ qua các tin nhắn cảnh báo trôi dạt, chúng tôi khuyên bạn nên liên hệ với nhà sản xuất của bạn để đảm bảo rằng không có vấn đề RDTSC đã biết. Bạn có thể sử dụng dấu theo dõi cờ 8033 (– T8033) để trở về hành vi báo cáo trong phiên bản bản phát hành ban đầu của SQL Server 2005 và trong SQL Server 2005 SP1. Phiên bản bản phát hành ban đầu của SQL Server 2005 và SQL Server 2005 SP1 không báo cáo các tin nhắn cảnh báo trôi dạt. Nếu bạn đang chạy phiên bản bản phát hành ban đầu của SQL Server 2005 hoặc SQL Server 2005 SP1 mà không gặp vấn đề, bạn thường có thể bỏ qua các thư.

Tại sao câu lệnh bồi thường CHẬM TRỄ hoạt động đúng? Điều gì về quy trình hệ thống định kỳ?

Các cơ chế thời gian không bị ảnh hưởng bởi thiết kế độ phân giải cao. SQL Server không sử dụng bộ đếm thời gian độ phân giải cao cho các hoạt động trên bộ hẹn giờ. Một số hoạt động thời gian được dựa trên bộ đếm độ phân giải giảm có sử dụng hàm Gettickcount . Các hoạt động thời gian này bao gồm khóa hết thời gian, báo cáo bồi bàn CHẬM TRỄ và bế tắc phát hiện.

Để biết thêm thông tin, bấm số bài viết sau đây để xem bài viết trong Cơ sở Kiến thức Microsoft:

938448 Máy chủ Dựa trên Windows Server 2003 có thể trải nghiệm thời gian-tem truy cập trôi dạt nếu máy chủ sử dụng bộ xử lý AMD Opteron kép hoặc bộ xử lý đa bộ xử lý AMD

895980 Các chương trình sử dụng hàm QueryPerformanceCounter có thể thực hiện kém trong Windows Server 2003 và trong Windows XPCác sản phẩm của bên thứ ba mà bài viết này thảo luận được sản xuất bởi các công ty độc lập với Microsoft. Microsoft không bảo hành, ngụ ý hay không, về hiệu suất hoặc độ tin cậy của những sản phẩm này.

Bạn cần thêm trợ giúp?

Bạn muốn xem các tùy chọn khác?

Khám phá các lợi ích của gói đăng ký, xem qua các khóa đào tạo, tìm hiểu cách bảo mật thiết bị của bạn và hơn thế nữa.

Cộng đồng giúp bạn đặt và trả lời các câu hỏi, cung cấp phản hồi và lắng nghe ý kiến từ các chuyên gia có kiến thức phong phú.

Thông tin này có hữu ích không?

Bạn hài lòng đến đâu với chất lượng dịch thuật?
Điều gì ảnh hưởng đến trải nghiệm của bạn?
Khi nhấn gửi, phản hồi của bạn sẽ được sử dụng để cải thiện các sản phẩm và dịch vụ của Microsoft. Người quản trị CNTT của bạn sẽ có thể thu thập dữ liệu này. Điều khoản về quyền riêng tư.

Cảm ơn phản hồi của bạn!

×