Trong htop, cột VIRT (Virtual Memory) của tiến trình MySQL (hoặc bất kỳ tiến trình nào) không phải là dung lượng RAM thực tế mà MySQL đang chiếm. Nó có ý nghĩa như sau:

  • VIRT (Virtual memory size): tổng dung lượng không gian địa chỉ bộ nhớ mà tiến trình có thể truy cập. Bao gồm:
    • RAM thực sự đang dùng (RES)
    • Bộ nhớ đã được cấp phát nhưng chưa dùng
    • Các file mmap (bản đồ bộ nhớ, ví dụ file .ibd, log file, thư viện .so)
    • Shared memory, vùng swap khả dụng

👉 Vì vậy, việc bạn thấy MySQL có VIRT = 9.9GB chỉ nghĩa là MySQL đã map hoặc được phép dùng tối đa ngần ấy bộ nhớ trong không gian ảo của nó. Nó không có nghĩa là MySQL đang ăn gần 10GB RAM.

Để xem RAM thực sự MySQL chiếm, bạn nên nhìn:

  • RES (Resident Set Size): bộ nhớ thực MySQL đang dùng trong RAM.
  • SHR (Shared Memory): phần MySQL chia sẻ với tiến trình khác.

Ví dụ:

VIRT   RES   SHR
9.9G  1.2G  200M

→ MySQL chỉ đang thực dùng 1.2GB RAM, còn 9.9GB chỉ là vùng địa chỉ ảo nó có thể cấp phát khi cần.


Bạn có muốn mình chỉ cách kiểm tra chính xác MySQL đang dùng bao nhiêu RAM thực tế (tính cả buffer pool, query cache, tmp table…) thay vì chỉ nhìn htop không?