Sự tranh chấp DDL trên TempDB


9

Tôi có SQL Server 2005 Standard x64 đang gặp sự cố với sự tranh chấp DDL của TempDB trong vài tháng qua. Máy chủ sẽ gặp phải sự tranh chấp về tài nguyên chờ 2: 1: 103 (loại chờ là PAGELATCH_EX).

Vấn đề dường như xảy ra không thường xuyên khi máy chủ đang tải tốt. Tôi đã theo dõi tỷ lệ "Các bảng tạm thời để phá hủy" và nó có thể tăng lên hơn 5.000 trong thời gian chúng tôi gặp vấn đề về PAGELATCH_EX trên 2: 1: 103. Từ những gì tôi đã đọc bộ đếm này sẽ là 0 phần lớn thời gian, nhưng chúng ta dường như ở bất cứ nơi nào từ 300-1100 phần lớn thời gian. Bộ đếm chỉ về 0 khi có rất ít người dùng trên hệ thống.

Làm cách nào tôi có thể thu hẹp những gì gây ra tranh chấp DDL trên tempdb mà không phải tìm kim trong ngăn xếp cỏ khô?


SELECT @@VERSION;gì Theo câu trả lời của tôi, đề xuất đầu tiên của tôi sẽ là đảm bảo bạn đang sử dụng SP4 và bản cập nhật tích lũy gần đây nhất.
Aaron Bertrand

Đó là SP4 (9.00.5000)
David George

Câu trả lời:


14

Tôi đã thấy vấn đề này rất lớn và hotfix cuối cùng đã được phát hành để sửa nó thực sự là kết quả trực tiếp của trường hợp của tôi với Microsoft CSS. Không có bài viết KB công khai để sửa chữa. Vui lòng đảm bảo rằng bạn đã áp dụng Gói dịch vụ 4 và bản cập nhật tích lũy gần đây nhất cho SQL Server (tại thời điểm viết bài, đó là Cập nhật tích lũy số 3 (9.00.5259) ).

Cho đến khi hotfix được phát hành, đề xuất của Microsoft chỉ đơn giản là ngừng tạo các bảng #temp (giống như KB # 916086 ). Vì điều này có nghĩa là phải viết lại đáng kể hàng chục và hàng chục thủ tục báo cáo, cách giải quyết trong trường hợp của tôi (bất kể cờ theo dõi hoặc bố cục tệp tạm thời) là để khởi động lại cụm của chúng tôi vào mỗi cuối tuần khác. Kinh quá.

Để theo dõi việc sử dụng tempdb, có một số tập lệnh xung quanh có thể giúp ích, ví dụ như xem sp_whoIsActive của Adam Machanic , cụ thể:

Và tập lệnh này (và các tập lệnh trong các bình luận) từ @QuerySoldier:

Tôi sẽ đảm bảo tất cả các con trỏ của bạn đang sử dụng LOCAL STATIC READ_ONLY FORWARD_ONLY(xem cái nàycái này ), và xem liệu có bất kỳ truy vấn đắt tiền nào đã sử dụng rộng rãi các bảng #temp / @table, CTE hoặc có thể chứa các loại không cần thiết hoặc dẫn đến tham gia băm không ... tất cả những điều này có thể góp phần gây ra vấn đề (tôi nghi ngờ bạn sẽ tìm thấy một nguyên nhân vàng). Cách khắc phục dễ dàng nhất như điểm bắt đầu "bang-for-your-buck" sẽ là sử dụng các tùy chọn con trỏ phù hợp và rẻ tiền thay vì mặc định.

Trong khi đó, tôi sẽ (a) cài đặt CU # 3 và (b) gọi PSS. Nói với họ rằng bạn đang sửa một lỗi rất cụ thể đã được xác nhận là lỗi và được phát hành cho người dùng khác dưới dạng hotfix riêng tư: "VSTS # 109112 - Bảng tạm hoãn giảm không quy mô cho khối lượng công việc nhất định." Bạn có thể phải trả lệ phí trường hợp ban đầu, nhưng vì đó là một lỗi, nên hoàn trả phí.


Bình luận không dành cho thảo luận mở rộng; cuộc trò chuyện này đã được chuyển sang trò chuyện .
Paul White 9


5

Tôi đoán rằng bạn đã tách ra các tệp dữ liệu TempDB của mình để cố gắng giảm bớt sự tranh chấp (rõ ràng trước khi sản xuất trước). Nếu bạn dũng cảm hơn, hãy xem xét cờ theo dõi mà Paul Randal có thẩm quyền đề cập đến: http://www.sqlskills.com/BLOGS/PAUL/post/A-Query-Server-DBA-myth-a-day-(1230) -tempdb-nên-luôn-có-một-dữ liệu-tệp-mỗi-bộ xử lý-core.aspx

Về những gì gây ra nỗi đau, bạn cần thực hiện một số công việc điều tra:

  • điều này mới chỉ bắt đầu xảy ra? những gì đã thay đổi?
  • là máy chủ chịu áp lực bộ nhớ, vì vậy các loại phải được thực hiện trong TempDB?
  • Có bất kỳ quy trình DBA nào như CheckDB, hoặc lập chỉ mục lại trực tuyến, đang chạy không?
  • mức độ cô lập kỳ lạ hơn được sử dụng, hoặc môi giới dịch vụ? hãy xem sys.database

Có một truy vấn đẹp ở dưới cùng của tài liệu Microsoft TempDB này để cố gắng tìm ra những gì đang sử dụng tempdb: http://technet.microsoft.com/en-gb/l Library / cc966545.aspx


Thông tin liên quan trên TF1118 có lẽ quan trọng hơn tôi nghĩ
gbn

@gbn Nó đã bắt đầu một vài tháng trước và không có thay đổi máy chủ. Chúng tôi đã thử TF1118 nhưng không có may mắn vì điều đó không thực sự giúp ích cho vấn đề chúng tôi đang gặp phải (truy cập tuần tự vào bảng dữ liệu meta hệ thống đó tạo khóa trong 2: 1: 103). Xuất phát từ một tấn bảng tạm thời cần phải bị phá hủy. Không có nhiệm vụ DBA đang chạy trong thời gian này. Không có môi giới dịch vụ và không có mức độ cô lập kỳ lạ.
David George

Không có thay đổi máy chủ, nhưng có bất kỳ thay đổi mã ứng dụng? Bộ nhớ có ổn không - tuổi thọ trang, thời gian chạy truy vấn, v.v.?
Peter Schofield

Tôi sẽ thử nhiều tệp TempDB - thông qua pre-prod trước để đảm bảo không có gì bất ngờ. Đó là một sự thay đổi vô thưởng vô phạt. Ngẫu nhiên, bạn đã kiểm tra độ trễ IO của đĩa, đặc biệt là cho TempDB?
Peter Schofield

Tôi đã kiểm tra tất cả những gì đã kiểm tra và độ trễ IO không phải là vấn đề. TempDB đã được cấu hình trong một số cấu hình nhiều tệp khác nhau mà không giảm bớt. Đây là một hệ thống 24 lõi, vì vậy chúng tôi đã chạy 8 tệp tempdev, nhưng đã thử các cấu hình khác nhau cho đến 24 tệp. Bộ nhớ ổn, tuổi thọ trang cũng tốt. Thời gian chạy truy vấn lên xuống, nhưng không có gì điên rồ, hoặc mới.
David George

4

Nếu bạn vẫn đang tìm cách theo dõi điều này, gần đây tôi đã có một vấn đề hiệu suất kỳ lạ tương tự với việc giảm bảng đồng bộ. Nếu bạn có số lượng lớn cơ sở dữ liệu (> 100 hoặc hơn) trên một cá thể sql chạy SQL 2005 và bạn có rất nhiều câu lệnh tạo và thả bảng tạm thời, bạn có thể nhận được các giọt bảng tạm thời chậm. Kiểm tra số hàng được trả về từ sys.dm_db_index_usage_stats có thể loại trừ điều này ngay lập tức là thủ phạm.

Bài viết KB mô tả vấn đề. http://support.microsoft.com/kb/2003031

Hiệu suất truy vấn giảm khi sys.dm_db_index_usage_stats có số lượng hàng lớn

Hãy xem xét kịch bản sau đây:

Trong Microsoft SQL Server 2005, bạn thường xuyên thực hiện thao tác DDL liên quan đến việc thả và giải trí rất nhiều bảng (đặc biệt là các bảng tạm thời trong cơ sở dữ liệu tempdb). Bạn có một số lượng lớn các mục (100.000 trở lên) trong chế độ xem quản lý động sys.dm_db_index_usage_stats (DMV).

Lấy từ câu trả lời được chấp nhận của tôi cho câu hỏi này. Có một số chi tiết ở đó là tốt. Bảng temp chậm giảm trong sql 2005

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.