分类: Mysql/postgreSQL
2008-03-20 16:45:00
以下设定适用于
#没有修改参数,用默认值的内存使用量:约40MB,使用my-large.cnf,内存使用量:约420MB但是可以提高DB的存取执行效率。
-- ---------------------------------------设定说明------ -----------------------
GLOBAL MEMORY与THREAD MEMORY
在配置内存时分成两各阶段,一是当SERVER启动时配置给整个系统使用,二是当CLINT联机进来的时候配置给单一联机使用。前者被称为GLOBAL后者被称为THREAD,MEMORY的总用量简单的说就是GLOBAL+(THREAD数*THREAD MEMORY)这个公式所算出来的内存消耗应该要小于系统的总内存(这是废话当然要小于啰),但是实际上测试时,系统内存不足就会回应TOO MANY CONNECTION而暂停回应。但是大量的REQUEST很容易让DB挂给你看。通常USED CONNECTION会大量增加,是因为TABLELOCK,导致新的QUERY被暂存,后来才发现减低TABLE LOCK的时间与次数,才是解决DB TIMEOUT卡死的方式。但是TABLE LOCK一般是因为SQL查询写的不好,可能需要调整程序里的SQL语法,所以只好以缩短wait_timeout的时间做为应急的办法。但是这会增加CPU LOADING,所以调整要小心一点,慢慢TEST出最佳调整参数值。
TMP TABLE与TABLE CACHE
当一个查询所耗用的内存超过配置的BUFFER时,MYSQL会开启暂存TABLE,暂存TABLE先放在内存中,内存不足再利用DISK,原理就像是L1、L2、L3 CACHE。table_cache的参数定义了能够CACHE多少个TABLE,tmp_table_size是定义在内存中开?的暂存TABLE有多大,也就是说,这是个全域的内存配置。TMP TABLE超过这个大小,就会被写到上。要比对这个参数是否太大要比较SHOW STATUS(mysql中查看运作状况的指令)中的open_tables跟opened_tables数量,前者是目前所开启的TABLE数,后者是曾开启的TABLE数,如果后者比前者大很多,表TABLE CACHE太小。可以试着调大数值。
wait_timeout
这个参数是由global wait_timeout或是interactive_timeou继承下来的。而且在COMMAND LINE时无法看到GLOBAL WAIT﹍TIMEOUT,这个值会继承自interactive_timeout。
-------MY.CNF(调整前的设定没有做最佳化设定,所以
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
skip-innodb
[mysql.server]
user=mysql
basedir=/var/lib
[safe_mysqld]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
------------------------------------------------------------------------------------------------------------
-------------MY.CNF(调整后的设定,
skip-innodb <---如果不用到innodb数据表,去掉innodb支持,节省内存
skip-bdb <---如果不用到bdb数据表,去掉bdb支持,节省内存。
skip-locking <---关闭外部锁定可以提高数据表存取性能。
skip-name-resolve <---关闭DNS反查动作。
datadir=/DB/data <---数据存放位置。
socket=/var/lib/mysql/mysql.sock <---sock文件位置。
[mysql.server]
user=mysql
basedir=/var/lib
[safe_mysqld]
err-log=/var/log/mysqld.log <---err-log存放位置。
pid-file=/var/run/mysqld/mysqld.pid <---PID文件位置。
open_files_limit=8192 <---允许MYSQL开启系统档案数上限。
[mysqld]
set-variable = back_log=50
set-variable = connect_timeout=10
set-variable = key_buffer=
set-variable = max_allowed_packet=
set-variable = table_cache=1024 <---允许暂存在CACHE里的TABLE数量。
set-variable = thread_cache=64
set-variable = join_buffer_size=
set-variable = sort_buffer=
set-variable = record_buffer=
set-variable = max_connections=32000
set-variable = wait_timeout=120
set-variable = interactive_timeout=120 <---联机timeout时间。
set-variable = max_connect_errors=30000
set-variable = long_query_time=1
set-variable = max_heap_table_size=
set-variable = tmp_table_size=
set-variable = myisam_sort_buffer_size=
set-variable = max_allowed_packet=
set-variable = net_buffer_length=16K <---网络暂存BUFFER,TCP最大封包长度是16384。
set-variable = thread_concurrency=4 <---设置为你的cpu数目x2,例如,只有一个cpu,那么thread_concurrency=2 <---有2个cpu,那么thread_concurrency=4。
#set-variable = log_slow_queries=/var/log/log_slow_queries.log
#log-bin <---去掉log,提高性能。
server-id = 1
[isamchk]
set-variable = key_buffer=
set-variable = sort_buffer=
set-variable = read_buffer=
set-variable = write_buffer=
[myisamchk]
set-variable = key_buffer=
set-variable = sort_buffer=
set-variable = read_buffer=
set-variable = write_buffer=
[mysqldump]
quick
set-variable = max_allowed_packet=
[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates
[mysqlhotcopy]
interactive-timeout