SQL Server 2005: Không đủ bộ nhớ hệ thống để chạy truy vấn này


13

Một trong những Máy chủ SQL của chúng tôi, đã chạy ổn định trong một thời gian (năm), gần đây đã bị lỗi bộ nhớ không đủ. Từ Nhật ký sự kiện ứng dụng, chúng ta thấy:

ID sự kiện: 701

Mô tả: Không đủ bộ nhớ hệ thống để chạy truy vấn này.

Nhóm của chúng tôi quản lý máy chủ này được tạo thành từ hầu hết các nhà phát triển nhân đôi nhiệm vụ sysadmin. Tuy nhiên, chuyên môn chính của chúng tôi là phát triển. Điều đó đang được nói, chúng tôi đang thua lỗ về cách chúng tôi đi khắc phục sự cố này. Chúng tôi đã lùng sục các diễn đàn và không có gì và không tìm thấy bất cứ thứ gì phù hợp

Vì vậy, đây là một số chi tiết để hỗ trợ khắc phục sự cố:

  • Bộ nhớ máy chủ tối thiểu của chúng tôi được đặt thành 0.
  • Bộ nhớ máy chủ tối đa của chúng tôi được đặt thành 2000.
  • Tổng bộ nhớ vật lý là 3,325,85 MB (từ sysinfo).
  • Tổng bộ nhớ ảo là 7,10 GB (từ sysinfo).
  • Chúng tôi không sử dụng AWE để phân bổ bộ nhớ, nhưng bây giờ chúng tôi sẽ xem liệu nó có tạo ra sự khác biệt không.
  • Lỗi này được ném bởi một công việc đang sao lưu nhật ký giao dịch, không chạy truy vấn.
  • Chúng tôi có nhiều máy chủ liên kết. Các loại RDBMS ở phía bên kia là SQL Server (2005 và 2000), các hệ thống Oracle 10g và OSI PI.
  • Nó là không liên tục tại thời điểm này. Chúng tôi dường như không thể tương quan bất kỳ thời gian hoặc sự kiện với các lỗi.
  • Tất nhiên, việc khởi động lại dường như làm cho nó biến mất trong một thời gian, điều này có ý nghĩa do bản chất của thông báo lỗi.
  • Máy chủ này tăng gấp ba lần như một máy chủ ứng dụng (một vài Dịch vụ Windows) và máy chủ web, cũng như máy chủ cơ sở dữ liệu.

BIÊN TẬP:

Chúng tôi đang trên SP3. Hầu hết các bài đăng chúng tôi tìm thấy là trước SP1, không áp dụng cho chúng tôi.

SELECT  SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')

trả lại

Phiên bản tiêu chuẩn 9.00.4035.00 SP3


Bạn có thể xem lại Nhật ký lỗi máy chủ SQL không vì có thể có thêm thông tin chi tiết về lỗi này.
John Sansom

Câu trả lời:


4

Tôi cũng đề nghị sử dụng tham số khởi động -g. Nó dường như làm việc cho hầu hết mọi người và có lẽ cũng sẽ làm việc cho bạn. Mối quan tâm duy nhất của tôi là vấn đề cơ bản có thể không được giải quyết. Ví dụ: nếu có rò rỉ bộ nhớ do máy chủ được liên kết và MTL được tăng lên 512Mb thì đó có phải là khoảng thời gian dài hơn giữa các vấn đề bộ nhớ không? Tôi không biết câu trả lời cho điều đó nhưng tôi có xu hướng đồng ý với UndertheFold rằng nước hoa có thể là một khởi đầu tốt.


7

Thông báo lỗi "Không đủ bộ nhớ hệ thống để chạy truy vấn này."đề cập đến Không gian địa chỉ ảo (VAS) không khả dụng và không phải là bộ nhớ theo nghĩa thông thường tức là trong không gian xử lý SQL Server.

Cho rằng bạn chỉ chạy với 3GB trên máy chủ này và SQL Server đã được chỉ định tối đa 2GB, điều này có nghĩa là HĐH và quan trọng hơn là mọi thứ khác trên hộp có ít hơn 1GB để chơi. Đó không phải là toàn bộ bộ nhớ.

Nếu vấn đề này thực sự là do rò rỉ bộ nhớ thì đó là VAS bên ngoài không gian xử lý SQL Server (memToLeave) đang được sử dụng.

Tôi sẽ đề nghị sử dụng tham số khởi động -g để gán thêm bộ nhớ cho phần memToLeave.

Xem bài viết sau để biết thêm thông tin:

http://www.johnsansom.com/sql-server-memory-configuration-determining-memtoleave-sinstall/

Bạn cũng có thể muốn giảm cài đặt bộ nhớ tối đa của SQL Server nhưng tôi sẽ làm điều này như là phương sách cuối cùng.


Bài báo hay. Cảm ơn cho tác giả là tốt! Chúng tôi có một số AppDomain không tải trong nhật ký SQL của chúng tôi. Chúng tôi chỉ có 2 thủ tục được lưu trữ CLR và về cơ bản họ chỉ nhận và đưa dữ liệu đến / từ một dịch vụ web. Có vẻ kỳ lạ là 2 thủ tục lưu trữ CLR này sẽ sử dụng quá nhiều VAS ngoài hộp.
Aaron Daniels

Không có gì. Như bạn có thể biết, phân bổ mặc định cho memToLeave chỉ là 256MB. Đây là một hộp cát nhỏ cho AppDomains của bạn, tất cả mã CLR / mã được quản lý, truy vấn Máy chủ được liên kết, SSIS, v.v. đặc biệt nếu bạn đang sử dụng tất cả bộ nhớ có sẵn trên máy chủ. Tôi sẽ đề nghị nhân đôi nó lên 512MB bằng tham số khởi động -g.
John Sansom

1

Điều này có thể liên quan đến rò rỉ bộ nhớ của trình điều khiển máy chủ được liên kết, theo chủ đề diễn đàn này :

Sau đây là những gì Microsoft nói với chúng tôi.

Rõ ràng xử lý dữ liệu bằng cách sử dụng một máy chủ được liên kết cụ thể trình điều khiển fox pro gây rò rỉ bộ nhớ sẽ tích tụ theo thời gian.


0

Máy chủ này tăng gấp ba lần như một máy chủ ứng dụng (một vài Dịch vụ Windows) và máy chủ web, cũng như máy chủ cơ sở dữ liệu.

Tôi sẽ thiết lập bộ nhớ tối thiểu của bạn - hoàn toàn có khả năng các quá trình khác này đang "đánh cắp" bộ nhớ từ SQL

Bạn có thể chạy nhật ký truy cập bằng perfmon để xác nhận điều này và / hoặc cung cấp cho mình thêm thông tin để xác định vấn đề thực sự là gì.


0

Tham khảo lấy từ blog này!

Có nhiều cách khác nhau để giải quyết vấn đề này.

Trước tiên, hãy kiểm tra cài đặt Máy chủ SQL của bạn để biết bộ nhớ máy chủ min min và bộ nhớ máy chủ max tối đa. Nếu bạn tìm thấy sự khác biệt rất nhỏ về cả hai giá trị, hãy tăng bộ nhớ máy chủ max max của bạn.

Thứ hai, Tìm ra các truy vấn chạy dài với thông tin sử dụng bộ nhớ của nó và nếu truy vấn này ở trạng thái không hoạt động, vui lòng xác minh và hủy quá trình này. Tối ưu hóa hiệu suất cơ sở dữ liệu là một điều quan trọng cho việc sử dụng bộ nhớ.

Thứ ba, Tìm ra cách sử dụng chỉ mục cho các truy vấn chạy dài bởi vì nếu không lập chỉ mục thích hợp thì hệ thống của bạn tăng / giảm DISK và nó ảnh hưởng trực tiếp đến bộ nhớ của bạn.

Thứ tư, Kiểm tra kích thước của tệp hoán trang bộ nhớ ảo và tăng kích thước của tệp này.

Thứ năm, Kiểm tra kích thước của bộ nhớ min tối thiểu trên mỗi truy vấn, thực tế nó là mặc định 1024 KB nhưng trong các tình huống hiếm gặp, bạn có thể giảm kích thước của tham số này. Trên thực tế, điều này là không nên, nhưng bạn có thể thử nó.

Thứ sáu, Hãy thử thực hiện lệnh DBCC này và một lần nữa điều này không được khuyến khích vì nó có thể ảnh hưởng đến hiệu suất chung của máy chủ. Nhưng bạn có thể thử điều này.

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.