2015-08-09 14 views
6

Hai ngày trước, không có thay đổi mã hoặc thay đổi đối với DB, tôi không nhận được nhiều lỗi (mỗi 5 phút hoặc lâu hơn) với lỗi The wait operation timed out có hai lỗi đầy đủ gạch dưới khác nhau về thông tin đăng nhập trước và thông tin khác về bài đăng:Tất cả đột ngột nhận được rất nhiều Thời gian chờ hoạt động trên các vấn đề về SQL Azure

System.Data.Entity.Core.EntityException: Nhà cung cấp cơ sở không thành công khi mở. ---> System.Data.SqlClient.SqlException: Thời gian chờ kết nối đã hết hạn. Khoảng thời gian chờ đã hết trong khi cố gắng tiêu thụ thông báo bắt tay trước khi đăng nhập. Điều này có thể là do việc bắt tay trước khi đăng nhập không thành công hoặc máy chủ không thể trả lời kịp thời. Thời gian sử dụng trong khi cố gắng kết nối với máy chủ này là - [Khởi tạo trước] khởi tạo = 21; bắt tay = 14988; ---> System.ComponentModel.Win32Exception: Hoạt động chờ đã hết thời gian

System.Data.Entity.Core.EntityException: Nhà cung cấp cơ sở không thành công khi mở. ---> System.Data.SqlClient.SqlException: Thời gian chờ kết nối đã hết hạn. Khoảng thời gian chờ đã trôi qua trong giai đoạn hậu đăng nhập. Kết nối có thể đã hết thời gian chờ trong khi chờ máy chủ hoàn tất quá trình đăng nhập và trả lời; Hoặc nó có thể đã hết thời gian trong khi cố gắng tạo nhiều kết nối hoạt động. Lỗi này xảy ra khi cố gắng kết nối với đích định tuyến. Thời gian sử dụng trong khi cố gắng kết nối với máy chủ gốc là - [Khởi động trước] khởi tạo = 5; bắt tay = 3098; [Đăng nhập] khởi tạo = 0; xác thực = 0; [Đăng nhập] hoàn thành = 7; Thời gian sử dụng trong khi cố gắng kết nối với máy chủ này là - [Khởi tạo trước] khởi tạo = 20; bắt tay = 5; [Đăng nhập] khởi tạo = 0; xác thực = 0; [Đăng nhập] hoàn thành = 11003; ---> System.ComponentModel.Win32Exception: Hoạt động chờ đã hết thời gian

Tôi đang sử dụng Khuôn khổ thực thể và trang web của tôi được lưu trữ trên ứng dụng web Azure. Tôi đã thực hiện một số giải pháp và hầu hết các câu hỏi SO mà tôi tìm thấy về điều này KHÔNG liên quan đến Entity Framework nhưng ADO.Net vài bài đăng tôi tìm thấy dẫn tôi cập nhật từ dịch vụ Basic to Standard (S0) cho DB và tạo GlobalDBConfig với

public class GlobalDBConfig : DbConfiguration 
{ 
    public GlobalDBConfig() 
    { 
     SetExecutionStrategy("System.Data.SqlClient",() => new SqlAzureExecutionStrategy(2, TimeSpan.FromSeconds(30))); 
    } 
} 

Làm cách nào tôi có thể tìm ra điều gì khác đang xảy ra và khắc phục sự cố? Đây là một DB rất đơn giản với các truy vấn đơn giản và rất ít lưu lượng truy cập vào trang web (ít hơn 1000 lượt truy cập vào một ngày)

+2

Mở sự cố với Azure SQL DB –

+0

Tôi đang gặp sự cố tương tự. –

+1

@RemusRusanu Tôi hy vọng sẽ thử và loại bỏ tất cả các lựa chọn khác trước khi tôi phải trả tiền để được hỗ trợ. Tôi thất nghiệp vì vậy tôi không thực sự có tiền cho nó. – Matthew

Trả lời

0

Dưới đây là một số tùy chọn để thử: Tôi khuyên bạn nên sử dụng (1) và (3) nếu có thể

  1. quy tắc cơ sở dữ liệu tài khoản tường lửa và chứa xác thực người dùng
  2. Tăng kết nối thời gian chờ đến một giá trị lớn (60-120 giây?)
  3. Nếu có thể cập nhật trình điều khiển của bạn khách hàng lên phiên bản mới nhất (7.4 trở lên)
+0

Bạn có thể mở rộng không? Tôi đang làm gì để quy tắc tường lửa DB và làm thế nào kể từ khi SQL Azure DBs không có tường lửa dưới "tất cả các thiết lập". Cập nhật trình điều khiển máy khách nào? Đây là một Azure Web App (không phải VM) bằng cách sử dụng Entity Framework. – Matthew

+0

Sử dụng người dùng bị cấm tránh chuyến đi khứ hồi tới cơ sở dữ liệu chủ của máy chủ có thể trên máy chủ SQL khác đang chạy trên một máy khác. Vui lòng xem bài viết dưới đây về cách giảm thiểu thời gian đăng nhập: http://www.sqlindepth.com/2015/07/minimize-login-time-in-sql-db-v12/ –

3

Chúng tôi đã giải quyết vấn đề này, cùng với các loại thời gian chờ ngẫu nhiên khác trên SQL Azure bằng cách chuyển sang "người dùng chứa". Sử dụng thông tin đăng nhập cấp máy chủ trên SQL Azure có thể gây ra sự cố:

Điều này không thực sự hiệu quả khi chủ SQL DB và người dùng có thể ngồi trên hai máy chủ SQL khác nhau có khả năng ở hai máy khác nhau. Ngoài ra khi máy chủ có nhiều cơ sở dữ liệu người dùng thì chủ nhân sẽ là nút cổ chai trong quá trình đăng nhập và dưới tải này có thể dẫn đến thời gian phản hồi cao đối với thông tin đăng nhập.Nếu Microsoft đang cập nhật phần mềm trên máy/máy chủ sau đó thầy sẽ không có sẵn cho một vài giây và tất cả các thông tin đăng nhập cơ sở dữ liệu người dùng có thể thất bại quá tại thời gian (http://www.sqlindepth.com/contained-users-in-sql-azure-db-v12/)

này Như trong trường hợp của bạn , Tôi đã có những nghi ngờ của tôi bởi vì cơ sở dữ liệu của tôi không bị tải nặng, nhưng việc chuyển sang người dùng đã tạo ra sự khác biệt to lớn.

SQL để tạo ra những người dùng là như sau (chạy trên cơ sở dữ liệu riêng của mình, không phải trên cơ sở dữ liệu tổng thể như bạn làm cho việc tạo thông tin đăng nhập máy chủ cấp):

Create user ContainedUser with password = 'Password' 
ALTER AUTHORIZATION ON SCHEMA::[db_owner] TO [ContainedUser] 
ALTER ROLE [db_owner] ADD MEMBER [ContainedUser] 
+0

Điều này cũng phù hợp với tôi. – scottm

+0

Chúng tôi cũng gặp phải sự cố kết nối DB với tất cả chỉ số DB là <5%. Hãy thử điều này ngay bây giờ, và nó có vẻ như giúp đỡ, có thể hiệu suất cũng tốt hơn một chút. – Piedone

+0

Sau một vài ngày tôi có thể nói rằng có, perf là ​​tốt hơn một chút (thời gian tải trang trung bình giảm xuống khoảng 5%) nhưng lỗi kết nối thoáng qua thường xuyên hơn. – Piedone

0

Chúng tôi đã có vấn đề tương tự và xin vui lòng lưu ý rằng không có những điều như AUTO rộng trên cơ sở dữ liệu độc lập trên Azure và kể từ khi bạn đang sử dụng Entity Framework, đây là một số gợi ý dưới đây

  1. Nếu bạn đang gọi Web API để lấy và giao dịch với cơ sở dữ liệu của bạn trên Azure SQL, đảm bảo trên cổng thông tin Azure yo u đặt tùy chọn "ALLWAYS ON" cho Web-API.

  2. Sau đó, ứng dụng khách của bạn có thể sẽ thử lại nếu không kết nối được trong lần thử đầu tiên.

  3. Nếu truy vấn cơ sở dữ liệu dẫn đến hết thời gian do khối lượng dữ liệu và chỉ mục không thể bắt kịp, bạn cần tăng thời gian thực hiện lệnh một chút và quan trọng nhất là bạn sẽ cần để cập nhật các số liệu thống kê trên cơ sở dữ liệu và biên dịch lại tất cả các đối tượng trong cơ sở dữ liệu.

+0

Cảm ơn bài đăng, hy vọng nó sẽ giúp người khác nhưng đối với tôi, tôi không sử dụng API mà trang web gọi trực tiếp đến DB và tôi có kế hoạch thử lại như được nêu trong OP của tôi. Trong khi tôi không bao giờ xác định vấn đề DB lúc đó là cực kỳ nhỏ vì vậy tôi không nghĩ rằng đó là một thời gian chờ của truy vấn nhưng đó là một cái gì đó tôi sẽ ghi nhớ nếu nó xảy ra một lần nữa. – Matthew

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