2009-02-05 60 views
6

Tôi có một số thủ tục được lưu trữ mà tôi gọi từ mã số ExecuteNonQuery.Các thủ tục được lưu trữ là thời gian không liên tục!

Đó là tất cả tốt nhưng 2 thủ tục lưu trữ của tôi bắt đầu thời gian ra liên tục ngày hôm nay với:

Timeout hết hạn. Khoảng thời gian chờ đã trôi qua trước khi hoàn tất thao tác hoặc máy chủ không phải là phản hồi. Tuyên bố đã bị hủy .

Nếu tôi thực thi sp theo cách thủ công từ studio quản lý thì mọi thứ vẫn ổn.

Không có gì thay đổi gần đây trong db của tôi - thời gian chờ lệnh của tôi là mặc định.

Bất kỳ đầu mối nào?

EDIT

bảng so với SPs đang chạy, điều đó rất lớn -> 15 hợp đồng biểu diễn. Khởi động lại hộp - cùng một vấn đề nhưng lần này không thể lấy sp để chạy từ Management Studio.

Cảm ơn!

+0

Ứng dụng có chạy lâu hơn mong đợi không? Hay đơn giản là nó chạy cho các độ tuổi ** nhưng hoàn thành ** trong bộ phân tích truy vấn? –

+0

nó chạy rất nhanh trong studio quản lý đó là lý do tại sao tôi không nghĩ rằng thiết lập thời gian chờ sẽ giúp – JohnIdol

+0

Vâng, bạn cần phải tìm ra nếu nó bị chặn, hoặc nếu bạn có một kế hoạch thực hiện xấu ... –

Trả lời

2

Ok - đây là cách tôi cố định nó cuối cùng.

Chỉ mục nhóm trên bảng có 45 triệu bản ghi đã giết chết máy chủ SQL của tôi - mọi chèn từ mã đều dẫn đến thời gian chờ khó chịu được mô tả trong câu trả lời. Tăng dung sai thời gian chờ sẽ không giải quyết được vấn đề khả năng mở rộng của tôi nên tôi đã chơi xung quanh với các chỉ mục và làm cho chỉ mục nhóm trên khóa chính nonclustered mở khóa tình huống.

Tôi đánh giá cao nhận xét về điều này để hiểu rõ hơn cách khắc phục sự cố này.

+0

Là số nguyên PK dựa? Nếu nó là, không có ý nghĩa trong phân cụm dữ liệu tuần tự (phải không?). Tôi đã có tình huống trong SQL2000, nơi một bảng đã được tái tạo đầy đủ trước khi một chỉ mục sẽ được 'sửa chữa', mà thậm chí loại bỏ/reindexing không thể sửa chữa. – Adam

+0

Vâng đó là một số nguyên - nó được nhóm theo mặc định theo như tôi biết (tôi không làm cho nó được nhóm một cách rõ ràng) – JohnIdol

3

Bạn có đặt thời gian chờ lệnh không? Có điều gì đó trong db của bạn gần đây đã thay đổi gây ra proc này mất nhiều thời gian hơn?

Nếu bạn phải chẩn đoán vấn đề về khóa, bạn sẽ cần phải sử dụng một cái gì đó như sp_lock.

Bạn có thể chia sẻ nguồn của một trong các procs của bạn không?

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.commandtimeout.aspx

+0

Tôi đang thực hiện giao dịch khá rộng rãi - nó đã được tất cả tốt cho đến một vài giờ trước - không quá chắc chắn thiết lập một thời gian chờ cao hơn sẽ giúp đỡ. – JohnIdol

+0

Bạn có thể đặt thành 0 nghĩa là nó cũng sẽ không bị timeout –

+0

Ngoài ra, nếu nó nhanh trong studio, có thể một giao dịch đang chặn nó. bạn cần chẩn đoán với sp_lock –

7

Studio Quản lý đặt một thời gian chờ vô hạn trên các truy vấn/lệnh nó chạy. Kết nối cơ sở dữ liệu của bạn từ mã sẽ có thời gian chờ mặc định mà bạn có thể thay đổi trên command object.

+0

Bạn có thể kiểm tra các thuộc tính kết nối bằng cách thiết lập một dấu vết trong SQL Server Profiler. Từ đây, bạn sẽ có thể thấy cài đặt thời gian chờ mặc định đang được sử dụng, nếu giá trị không được đặt rõ ràng trong mã của bạn –

+0

Điều đó xảy ra khá nhanh trên studio quản lý (dưới 1 giây) và trên mã của tôi sau 30 giây. – JohnIdol

+0

Thời gian chờ kết nối và thời gian chờ của lệnh không được nhầm lẫn, thời gian chờ kết nối là thời gian tối đa cần để kết nối với db –

5

này có thể thường xuyên liên quan đến:

  • kế hoạch xấu truy vấn do quá háo hức kế hoạch tái sử dụng (parameter sniffing)
  • tùy chọn SET khác nhau - trong ANSI_NULLS nói riêng và CONCAT_NULL_YIELDS_NULL
  • khóa (bạn có thể có một mức độ cô lập cao hơn)
  • lập chỉ mục cần phải được xây dựng lại/số liệu thống kê cập nhật/etc

Tùy chọn SET có thể dẫn đến một số loại chỉ mục nhất định không thể sử dụng được (chỉ mục trên cột được tính kiên cố, ví dụ - bao gồm truy vấn xml/udf "được quảng cáo")

+1

Cuộc gọi tốt trên các thông số sniffing - đặc biệt thích hợp với SQL Server 2000. Tôi hiểu rằng parmeter sniffing không phải là một vấn đề trong SQL Server 2005 trở đi. Bài viết hay về cách chống lại tham số sniffing tại đây http://blogs.msdn.com/khen1234/archive/2005/06/02/424228.aspx –

+0

Tham số sniffing là chắc chắn nhất vẫn là một vấn đề với SQL Server (lên đến và bao gồm cả năm 2012). Tôi đã có thể tái tạo điều này một cách dễ dàng trên tất cả các phiên bản của SQL. Khai báo một biến cục bộ cho mỗi tham số proc được lưu trữ và thiết lập Localparam1 = Param1 sửa lỗi timeouts trong mọi cá thể. Nó đã làm phiền tôi trong nhiều năm. – Mangist

+0

@Mangist hoặc chỉ sử dụng gợi ý truy vấn 'OPTIMIZE FOR' ... –

5

Cố gắng biên dịch lại các quy trình này. Tôi đã có những vấn đề như vậy vài lần và không tìm thấy nguyên nhân của vấn đề, nhưng biên dịch lại luôn luôn giúp.

EDIT:

Để biên dịch lại proc, bạn đi đến phòng thu quản lý, thủ tục mở để sửa đổi và nhấn F5 hoặc thực hiện: EXEC sp_recompile 'proc_name'

+0

đáng để quay! Làm thế nào để làm điều đó? – JohnIdol

+0

tốt nhất là EXEC sp_recompile 'proc_name' –

+0

Tôi đã thấy điều này cũng xảy ra với lượt xem nơi chúng cần được tạo lại sau khi (các) bảng nguồn thay đổi. Chắc chắn đáng để thử. – Adam

1

Bạn có thể cần phải cập nhật thống kê trên cơ sở dữ liệu. Đồng thời, việc lập chỉ mục trên bảng đã thay đổi gần đây chưa?

Kiểm tra kế hoạch thực hiện của sp để xem bạn có thể tìm thấy nút cổ chai không. Ngay cả khi nó chạy ok trước, nó có thể có thể được điều chỉnh để chạy hiệu quả hơn.

Bạn cũng quay lại bao nhiêu dữ liệu? Chúng tôi đã gặp sự cố với SQL được thiết kế kém trong quá khứ không hiển thị cho đến khi báo cáo tích lũy bắt đầu có nhiều dữ liệu hơn trong tập kết quả. Không biết bạn làm gì, thật khó để nói rằng đây có phải là một điều có thể, nhưng điều đáng nói đến là bạn phải điều tra.

1

Máy chủ SQL sẽ đợi vô thời hạn trước khi quay lại người dùng. Nhiều hơn khả năng có một thuộc tính thời gian chờ phía khách hàng được thiết lập. Ví dụ: bạn có thể đặt timeout property for the ADO command object.

0

Lấy lược tả SQL trên đó, so sánh kết quả giữa việc chạy nó trong Management studio và thông qua ứng dụng của bạn.

Các vấn đề liên quan