Hello:
I have a few questions about how MySQL uses Ram. I have a machine
that I am using as a database server. The machine has close to 1G
of ram. It is running Slackware Linux 8.1 With a 2.4.18 kernel.
The main use of this server is a backend for Radius Authentication.
I have read all of the documentation I have been able to get my
hands on, and believe I have a very good understanding of how MySQL
works in general. However, this has me a little stumped.
Please take a look at the output from top, my.cnf, and the processlist
below.
-------begin top output-----------------
top - 15:21:46 up 56 days, 10:57, 11 users, load average: 0.03, 0.16, 0.15
Tasks: 61 total, 1 running, 58 sleeping, 2 stopped, 0 zombie
Cpu(s): 5.6% user, 2.0% system, 0.0% nice, 92.5% idle
Mem: 900472k total, 896048k used, 4424k free, 22956k buffers
Swap: 907664k total, 3676k used, 903988k free, 744248k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ Command
2361 mysql 9 0 53416 52m 2068 S 0.3 5.9 2:48.61 mysqld
2357 mysql 9 0 53416 52m 2068 S 0.0 5.9 0:00.18 mysqld
2359 mysql 9 0 53416 52m 2068 S 0.0 5.9 0:00.28 mysqld
2360 mysql 9 0 53416 52m 2068 S 0.0 5.9 0:11.29 mysqld
2362 mysql 9 0 53416 52m 2068 S 0.0 5.9 17:28.20 mysqld
2371 mysql 9 0 53416 52m 2068 S 0.0 5.9 0:02.82 mysqld
2386 mysql 9 0 53416 52m 2068 S 0.0 5.9 0:00.12 mysqld
2395 mysql 9 0 53416 52m 2068 S 0.0 5.9 0:01.01 mysqld
2419 mysql 9 0 53416 52m 2068 S 0.0 5.9 0:00.21 mysqld
2427 mysql 9 0 53416 52m 2068 S 0.0 5.9 17:00.51 mysqld
2428 mysql 9 0 53416 52m 2068 S 0.0 5.9 0:03.32 mysqld
2458 mysql 9 0 53416 52m 2068 S 0.0 5.9 0:01.15 mysqld
-------end top output-----------------
Notice that when viewing top output for user mysql that there are
12 seprate processes? I am assuming that this is done for connections
that the MySQL server may need to field. Does MySQL spawn a new
process for every connection that comes in? And if so why do I have
12 processes when the output from show processlist returns 7 rows.
Is this how you would expect the MySQL server to behave? It appears
that MySQL is sucking up a large amount of system recourses even
when no-one is connected... There is little else running on this
system besides MySQL. I have read similar messages to this email
in the mysql list archive, and am familiar with the fact that MySQL
will use key_buffer amount of ram for the mysqld process. According
to the top output It would appear to me that MySQL is using
52M*12 of ram which is 624M. Am I correct in my understanding?
I would assume that MySQL would share the cache between processes.
Is there a reason why each process needs key_buffer ram?
Am I doing something horribly wrong?
---------show processlist output -----
+-----+-------------+----------------+------------+-------------+-------+---------------------------------------------+------------------+
| Id | User | Host | db | Command | Time | State
| | Info |
+-----+-------------+----------------+------------+-------------+-------+---------------------------------------------+------------------+
| 1 | radiusd | localhost | radiusd_db | Sleep | 0 |
| | NULL |
| 20 | root | localhost | customers | Sleep | 23750 |
| | NULL |
| 49 | radiusd | 216.250.251.22 | radiusd_db | Sleep | 23076 |
| | NULL |
| 80 | root | localhost | customers | Sleep | 22168 |
| | NULL |
| 403 | radiusd | 64.139.37.2 | radiusd_db | Sleep | 2 |
| | NULL |
| 524 | replication | 64.139.37.2 | NULL | Binlog Dump | 9218 | Slave
|connection: waiting for binlog update | NULL |
| 769 | root | localhost | radiusd_db | Query | 0 | NULL
| | show processlist |
+-----+-------------+----------------+------------+-------------+-------+---------------------------------------------+------------------+
-----end show processlist output -----
-----/etc/my.cnf options -------------
[client]
#password = your_password
port = 3306
socket = /tmp/mysql.sock
[mysqld]
port = 3306
socket = /tmp/mysql.sock
skip-locking
set-variable = net_buffer_length=512K
set-variable = key_buffer=64M
set-variable = max_allowed_packet=1M
set-variable = table_cache=512
set-variable = sort_buffer=2M
set-variable = record_buffer=2M
set-variable = thread_cache=8
set-variable = max_connections=300
set-variable = thread_concurrency=4
set-variable = myisam_sort_buffer_size=64M
log-bin
binlog-do-db=radiusd_db
server-id = 1
[mysqldump]
quick
set-variable = max_allowed_packet=16M
[mysql]
no-auto-rehash
#safe-updates
[isamchk]
set-variable = key_buffer_size=128M
set-variable = sort_buffer=128M
set-variable = read_buffer=2M
set-variable = write_buffer=2M
[myisamchk]
set-variable = key_buffer_size=128M
set-variable = sort_buffer=128M
set-variable = read_buffer=2M
set-variable = write_buffer=2M
[mysqlhotcopy]
interactive-timeout
-----end /etc/my.cnf options ---------
-----show variables output -----------
+---------------------------------+---------------------------------------------+
| Variable_name | Value |
+---------------------------------+---------------------------------------------+
| back_log | 50 |
| basedir | /usr/local/mysql/ |
| binlog_cache_size | 32768 |
| character_set | latin1 |
| character_sets | latin1 dec8 dos german1 hp8 koi8_ru latin2 |
| concurrent_insert | ON |
| connect_timeout | 5 |
| datadir | /serve/mysql/ |
| delay_key_write | ON |
| delayed_insert_limit | 100 |
| delayed_insert_timeout | 300 |
| delayed_queue_size | 1000 |
| flush | OFF |
| flush_time | 0 |
| have_bdb | NO |
| have_gemini | NO |
| have_innodb | NO |
| have_isam | YES
| have_raid | NO |
| have_openssl | NO |
| init_file | |
| interactive_timeout | 28800 |
| join_buffer_size | 131072 |
| key_buffer_size | 67104768 |
| language | /usr/local/mysql/share/mysql/english/ |
| large_files_support | ON |
| locked_in_memory | OFF |
| log | OFF |
| log_update | OFF |
| log_bin | ON |
| log_slave_updates | OFF |
| log_long_queries | OFF |
| long_query_time | 10 |
| low_priority_updates | OFF |
| lower_case_table_names | 0 |
| max_allowed_packet | 1047552 |
| max_binlog_cache_size | 4294967295 |
| max_binlog_size | 1073741824 |
| max_connections | 300 |
| max_connect_errors | 10 |
| max_delayed_threads | 20 |
| max_heap_table_size | 16777216 |
| max_join_size | 4294967295 |
| max_sort_length | 1024 |
| max_user_connections | 0 |
| max_tmp_tables | 32 |
| max_write_lock_count | 4294967295 |
| myisam_max_extra_sort_file_size | 256 |
| myisam_max_sort_file_size | 2047 |
| myisam_recover_options | 0 |
| myisam_sort_buffer_size | 67108864
| net_buffer_length | 523264 |
| net_read_timeout | 30 |
| net_retry_count | 10 |
| net_write_timeout | 60 |
| open_files_limit | 0 |
| pid_file | /serve/mysql//fbi.pid |
| port | 3306 |
| protocol_version | 10 |
| record_buffer | 2093056 |
| record_rnd_buffer | 2093056 |
| query_buffer_size | 0 |
| safe_show_database | OFF |
| server_id | 1 |
| slave_net_timeout | 3600 |
| skip_locking | ON |
| skip_networking | OFF |
| skip_show_database | OFF |
| slow_launch_time | 2 |
| socket | /tmp/mysql.sock |
| sort_buffer | 2097144 |
| sql_mode | 0 |
| table_cache | 512 |
| table_type | MYISAM |
| thread_cache_size | 8 |
| thread_stack | 65536 |
| transaction_isolation | READ-COMMITTED |
| timezone | GMT |
| tmp_table_size | 33554432 |
| tmpdir | /tmp/ |
| version | 3.23.52-log |
| wait_timeout | 28800 |
+---------------------------------+---------------------------------------------+
-----end show variables output -------
Just a side question. I noticed in the show variables output the variable
have_raid? I do have the data directory stored on an external raid device,
however the variable is set to NO. Will this cause me any problems...
Thank you all so much for your help, MySQL is a great app, and I
apreciate all the hard work you have done...
-James...
---------------------------------------------------------------------
Before posting, please check:
http://www.mysql.com/manual.php (the manual)
http://lists.mysql.com/ (the list archive)
To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php