How to check if any MySQL memory has been swapped out? This post explains it.
Check if system is currently using any swap:
server ~ # free -m total used free shared buffers cached Mem: 3954 2198 1755 0 190 1040 -/+ buffers/cache: 968 2985 Swap: 3906 0 3906
In the above example swap is not in use, so no further checks would be necessary.
However if free
command would report some usage, how
to check whether MySQL memory was swapped out or not?
It is not possible to determine that using standard tools such as
ps
or top
. They will report various
memory related information per each process, but no clear
indication whether something is in RAM or in swap space. But it
is possible with this trivial command:
awk '/^Swap:/ { SWAP+=$2 } END { print SWAP" kB" }'
/proc/$(pidof mysqld)/smaps
For example:
server ~ # awk '/^Swap:/ { SWAP+=$2 } END { print SWAP" kB" }' /proc/$(pidof mysqld)/smaps 612 kB
Linux reported 612KB of MySQL memory to have been swapped out.
/proc/<pid>/smaps
file was introduced in
kernel 2.6.14, so it should be available on many, even not so
recent, Linux distributions.
On Solaris, the quickest way is:
root@osol1:~# pmap -S 925 |grep mysqld 925: /opt/csw/mysql5/libexec/mysqld --defaults-file=/opt/csw/mysql5/var/my. 0000000000400000 8784 - r-x-- mysqld 0000000000CA3000 1940 1940 rw--- mysqld
The third column shows the swap usage.
If you need more infomration about How to prevent swapping on a MySQL server?, this post will drive you through all details.