Cách khắc phục sự cố kết nối mồ côi trong SQL Server


Tóm tắt


Khi máy khách Microsoft SQL Server ngừng kết nối từ máy chủ SQL Server, quy trình kết nối sẽ được dọn lên trên máy chủ. Nếu quy trình kết nối không được xóa bỏ vì lý do nào, chúng sẽ trở thành quy trình "mồ côi" hoặc "Ghost". Các quy trình này có thể sử dụng các tài nguyên có giá trị chẳng hạn như khóa và kết nối người dùng. Các quy trình mồ côi thường được gây ra bởi việc đóng không phù hợp các ứng dụng máy khách và các vấn đề liên quan đến mạng và các biện pháp thường yêu cầu khắc phục sự cố ứng dụng máy khách và tinh chỉnh cấu hình mạng.

Thông tin Bổ sung


Khi bạn khắc phục sự cố này, hãy ghi nhớ những điều sau đây:
  • SQL Server với tư cách là một ứng dụng không và không nên chủ động kích hoạt kết nối máy khách để xác định trạng thái hiện tại của nó. Giao tiếp liên lạc cấp độ thấp hơn (IPCs), chẳng hạn như ống có tên, IPX/SPX hoặc ổ cắm TCP/IP, có trách nhiệm quản lý kết nối máy khách.
  • Một IPC thường có cơ chế riêng của mình để quản lý kết nối máy khách. Khi kết nối máy khách trở thành không phản hồi cho một khoảng thời gian nhất định, thông thường là máy tính Windows NT Server sẽ phát hiện điều này bằng cách gửi các cuộc thăm dò "tiếp tục sống" hoặc xóa bỏ kết nối sau khi nó được cấu hình khoảng thời gian. Tuy nhiên, "giữ-sống" các gói dữ liệu sẽ không được gửi theo mặc định của một ứng dụng. Ứng dụng cần bật tính năng này trên các kết nối.
  • Trong những tình huống nhất định, chẳng hạn như lỗi bảo vệ chung của máy khách, máy khách vẫn có thể trả lời các trình thiết bị máy chủ ngay cả khi ứng dụng đã chết. Trong trường hợp này, máy tính chạy Windows NT có thể tiếp tục kết nối máy khách này vô thời hạn, miễn là máy khách không bị tắt.
  • Nếu máy tính chạy Windows NT không đóng kết nối chết vì bất kỳ lý do gì, SQL Server rightfully sẽ giả định rằng kết nối này vẫn hiện hoạt và do đó không xóa nó.
  • Nếu máy tính chạy Windows NT đã thành công đóng kết nối, nhưng quy trình khách hàng vẫn tồn tại trên SQL Server như được biểu thị bằng sp_who, thì nó có thể cho biết sự cố khi quản lý kết nối của SQL Server. Trong trường hợp này, bạn nên làm việc với nhà cung cấp hỗ trợ chính để giải quyết sự cố này.
Nếu bạn nghi ngờ các quá trình mồ côi tồn tại trên máy chủ SQL, bạn có thể thực hiện các bước để khắc phục sự cố:
  1. Xác định quy trình mồ côi bằng cách sử dụng sp_who, điều này có thể cho bạn biết ứng dụng nào được liên kết với các quy trình này thông qua tên máy chủ.
  2. Sau khi bạn xác định các quy trình mồ côi, bạn có thể chọn để bỏ qua chúng nếu họ không giữ bất kỳ khóa nào hoặc dùng nhiều kết nối, hoặc giết chúng bằng cách dùng lệnh KILL SQL Server.
  3. Kiểm tra với người dùng ứng dụng cho bất kỳ thủ tục nào không phù hợp nào của các ứng dụng đóng, chẳng hạn như khởi động lại ấm áp hoặc lạnh của máy trạm mà không cần thoát khỏi các ứng dụng đầu tiên. Kiểm tra xem có bất kỳ lịch sử nào của các máy trạm trở nên không ổn định, chẳng hạn như lỗi bảo vệ chung, v.v. Sửa các quy trình không đúng hoặc các vấn đề về độ ổn định nếu chúng tồn tại.
  4. Kiểm tra xem phiên IPC vẫn đang hoạt động trên máy tính chạy Windows NT mà SQL Server đang chạy. Tùy thuộc vào việc bạn đang sử dụng, các lệnh khác nhau. Ví dụ, nếu bạn đang dùng đường ống được đặt tên, lệnh là "phiên NET" hoặc "TỆP thuần"; Nếu đây là kết nối ổ cắm TCP/IP, bạn có thể sử dụng "NETSTAT" để hiển thị các phiên TCP hiện hoạt; trong trường hợp IPX/SPX, bạn có thể phải sử dụng màn hình hiệu suất để theo dõi "kết nối mở" cho "NWLink SPX".
  5. Nếu các phiên IPC vẫn hoạt động trên máy tính chạy Windows NT, nó hoàn toàn bình thường cho SQL Server để giữ các quy trình kết nối đó. Khi Windows NT xóa các phiên IPC, SQL Server sẽ được thông báo và dọn dẹp quá trình kết nối cho phù hợp. Bạn có thể điều chỉnh các tham số mạng Windows NT nhất định để rút ngắn khoảng thời gian mà Windows NT phải đợi trước khi dọn lên các phiên đã chết. Một lần nữa, tùy thuộc vào việc bạn đang sử dụng, các tham số liên quan rất khác nhau.Để biết thêm thông tin, hãy bấm vào số bài viết sau đây cách sửa đổi các thiết đặt đăng ký này để khớp với những người được đề cập bên dưới để xem bài viết cách sửa đổi các thiết đặt sổ đăng ký này để khớp với những người được đề cập dưới đây trong cơ sở kiến thức Microsoft:
    120642 Tham số TCP/IP và cấu hình NetBT cho Windows 2000 hoặc Windows NT
    99745 Các tham số đăng ký NWLINK điều chỉnh
    • Các đường ống đã đặt tên: đường ống đã đặt tên được thực hiện trong lớp khối tin nhắn máy chủ (SMB) trên đầu các giao thức giao thông khác chẳng hạn như TCP/IP, NetBEUI hoặc NWLink IPX/SPX. Một lớp mỏng có tên NetBIOS thường được thực hiện giữa SMB và Layer Transport. Do đó, một cách thuận tiện để điều chỉnh thời gian của phiên không đáp ứng được đặt tên là các đường ống phải đợi trước khi đóng là thông qua việc điều chỉnh các tham số KeepAlive của lớp NetBIOS liên quan. Đối với TCP/IP, lớp NetBIOS liên quan là NBT (NetBIOS qua TCP) và tham số liên quan đến hàm SessionKeepAlive trong khóa đăng ký sau đây:
               KEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Netbt\Parameters      
      Nếu giao thức được sử dụng là NWlink IPX/SPX, tham số tham gia là KeepAliveCount và KeepAliveTimeout trong khóa đăng ký sau đây:
               HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NWNBLink\Parameters      
      Xin lưu ý rằng một số đường ống đã đặt tên trên NWLink có thể bỏ qua lớp NetBIOS (DirectHosting), nghĩa là các tham số trên NetBIOS NWNBlink không áp dụng.
    • Ổ cắm TCP/IP: máy chủ Windows NT sẽ định kỳ gửi đi "giữ các gói tin cho khách hàng và khách hàng dự kiến sẽ phản hồi. Nếu vì bất kỳ lý do nào mà máy khách không phản hồi với các gói này, Windows NT sẽ xóa bỏ phiên TCP sau khi thử dùng một số lần được cấu hình. Các tham số tham gia là KeepAliveInterval, KeepAliveTime và Tcpmaxdataretruyền dẫn trong khóa đăng ký sau đây:
               HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters      
    • IPX/SPX: tương tự như TCP/IP, Windows NT Server định kỳ gửi "giữ liên tục" các gói và máy khách phản hồi. Windows NT xóa bỏ kết nối SPX nếu không nhận được bất kỳ phản hồi nào sau khi gửi một số cấu hình của "tiếp tục sống" gói. Các tham số tham gia là KeepAliveCount và KeepAliveTimeout trong khóa đăng ký sau đây:
               HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NWLnkSPX\Parametes      
    Xin lưu ý rằng nếu các tham số "tiếp tục còn sống" cho IPCs của bạn được cấu hình để không bao giờ hết thời gian chờ, thì Windows NT sẽ giữ phiên IPC vô thời hạn, ngay cả khi khách hàng đã tắt hoàn toàn. Trong trường hợp này, SQL Server sẽ giữ các quy trình khách hàng này cũng vô thời hạn, được dự kiến. Để biết thêm thông tin về các tham số, vui lòng tham khảo tài liệu Windows NT hoặc bộ tài nguyên Windows NT của bạn. Nếu bạn nghi ngờ máy tính Windows NT của bạn sẽ không xóa bỏ các phiên này theo tham số cấu hình, bạn có thể liên hệ với nhà cung cấp hỗ trợ Windows NT chính để được trợ giúp.
  6. Nếu phiên IPC không còn tồn tại trên máy tính chạy Windows NT, nhưng SQL Server vẫn giữ quy trình khách như được hiển thị theo sp_who, bạn có thể sử dụng lệnh KILL để dọn dẹp quy trình làm giải pháp tạm thời và liên hệ với nhà cung cấp hỗ trợ SQL Server chính để được hỗ trợ thêm.
Để biết thêm thông tin về chủ đề này vì liên quan đến SQL Server 2000, hãy xem chủ đề "các phiên mồ côi" trong sổ làm việc trực tuyến của SQL Server.