Bộ nhớ máy chủ SQL
Nó liên quan đến bộ nhớ SQL Server. Khi máy chủ sắp hết bộ nhớ, chúng tôi khuyên bạn nên thêm bộ nhớ bổ sung vào phần cứng để khắc phục sự cố sử dụng CPU.
Nhưng trước khi tiếp tục nâng cấp bộ nhớ, như một phần của việc khắc phục sự cố, làm cách nào để chúng tôi kiểm tra / tính toán bộ nhớ SQL hiện đang được sử dụng trên phiên bản.
Ví dụ:
TÊN MÁY CHỦ: XXXXXXXXXXXXX
Bộ nhớ vật lý đã cài đặt (RAM): 64,0 GB
Bộ nhớ SQL Server hiện được cấp phát: 58982 MB -> 58,982 GB
Trong trường hợp này, chúng tôi chỉ có một phiên bản (MSSQLSERVER) trên máy chủ và 80% bộ nhớ đã được phân bổ cho phiên bản theo tiêu chuẩn. Và 20% được phân bổ cho Ứng dụng & Hệ điều hành.
Khi chúng tôi kiểm tra trên Resource Monitor, nó sẽ hiển thị là đã lấp đầy 80% vì chúng tôi đã đặt Bộ nhớ máy chủ SQL thành đó.
Nhưng nó không có nghĩa là 80% SQL được sử dụng hoàn toàn, vì SQL sẽ giữ một số không gian trong bộ đệm ở phần phụ trợ. Khi tôi lướt web, tôi nhận được công thức dưới đây để tính toán Bộ nhớ SQL được sử dụng trên phiên bản nhưng các thông số này đã bị xóa trên công cụ giám sát hiệu suất từ lâu.
Có cách nào để kiểm tra, hiện tại SQL đã sử dụng bao nhiêu trong số 80% (HOẶC) về những chỉ số nào chúng ta có thể tiến hành nâng cấp bộ nhớ.
CÔNG THỨC TÍNH TOÁN BỘ NHỚ SQL: (Các tham số dưới đây đã bị xóa khỏi Màn hình Hiệu suất)
*Database Usage(GB) = (Totalpages-Freepages-Stolenpages)8/1024=MB/1024=GB
Trả lời
làm cách nào để chúng tôi kiểm tra / tính toán bộ nhớ SQL hiện được sử dụng trên phiên bản.
Điều đó khá đơn giản để làm. Bạn có DMV sys.dm_os_process_memory sẽ cung cấp cho bạn thông tin. Nó sẽ cung cấp cho bạn physical memory usedvàtotal memory used (RAM+Page file)
select (physical_memory_in_use_kb/1024) as Phy_Mem_used_MB, (virtual_address_space_committed_kb/1024) as Total_mem_Used_MB
from sys.dm_os_process_memory
Nhưng nó không có nghĩa là 80% SQL được sử dụng hoàn toàn, vì SQL sẽ giữ một số không gian trong bộ đệm ở phần phụ trợ
Khi SQL Server đạt đến giá trị bộ nhớ máy chủ tối đa, nó sẽ giữ bộ nhớ đó trừ khi thông báo bộ nhớ thấp yêu cầu nó giải phóng bộ nhớ. Vì vậy, có thể nó không sử dụng hết nhưng nó vẫn sẽ giữ nó. Điều này được gọi là bộ nhớ đệm vì điều này giúp tránh các lỗi trang cứng.
Có cách nào để kiểm tra, hiện tại SQL đã sử dụng bao nhiêu trong số 80% (HOẶC) về những chỉ số nào chúng ta có thể tiến hành nâng cấp bộ nhớ.
Giống như tôi đã nói một khi được sử dụng, nó sẽ hiển thị tất cả bộ nhớ như được sử dụng ngay cả khi nó không cần các trang đó trong xử lý truy vấn. Khi có yêu cầu mới, các trang này sẽ được chuyển ra ngoài để tạo không gian cho các trang mới.
Làm thế nào để bạn định nghĩa "được sử dụng"? Một trang đã được đọc vào bộ nhớ cache một giây trước, liệu đó có được tính là đã sử dụng không? Một phút trước? Một giờ? Một tuần?
Vấn đề là không có những thứ được gọi là "tận dụng". Máy chủ SQL giữ các trang (và những thứ khác) trong bộ nhớ. Khi có áp lực bộ nhớ (bên trong hoặc bên ngoài), cơ chế lão hóa bộ nhớ cache truyền thống (về cơ bản) được sử dụng để loại bỏ những thứ ít được sử dụng gần đây nhất. Tất nhiên, có nhiều chi tiết hơn về việc xử lý bộ nhớ (cache), nhưng về cơ bản, nó được xử lý giống như bất kỳ cơ chế lưu trữ nào.
Vì vậy, các khái niệm như "sử dụng" hoặc cấu hình tối ưu không tồn tại. Tất nhiên, bạn có thể thấy nếu có nhiều bộ nhớ không được sử dụng bởi máy chủ SQL. Nhưng khi máy chủ SQL được phân bổ bộ nhớ, nó sẽ bị treo vào nó trừ khi có áp lực bộ nhớ. Biết đâu, có lẽ ai đó sẽ cần trang đó vào giây tiếp theo?
Ví dụ, bạn có thể giảm bộ nhớ máy chủ tối đa và xem khi nào hiệu suất của bạn bắt đầu giảm.
Sử dụng MemoryManagerInfoquy trình đã lưu trữ, có thể tìm thấy ở đây:
https://github.com/aleksey-vitsko/Database-Administrator-Tools
Nó cung cấp thông tin chi tiết về cách SQL Server hiện đang sử dụng bộ nhớ:
Xem ví dụ trên hình bên dưới - đây là những gì máy chủ của tôi hiện đang sử dụng:
Đại khái, Total Server Memory= Database Cache Memory+ Free Memory+ Stolen Server Memory(Bộ nhớ máy chủ bị đánh cắp bao gồm Plan Cache, Locks, v.v.)