Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15131971
  • 博文数量: 7460
  • 博客积分: 10434
  • 博客等级: 上将
  • 技术积分: 78178
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-02 22:54
文章分类

全部博文(7460)

文章存档

2011年(1)

2009年(669)

2008年(6790)

分类: Mysql/postgreSQL

2008-03-20 16:45:00

以下设定适用于1024M-2048M如内存更大的话请自行做调整。给各项参数增加内存配置量会加快速度,但是使用过多的内存而导致启用swap的话,会严重导致系统执行效率下降。

#
没有修改参数,用默认值的内存使用量:约40MB,使用my-large.cnf,内存使用量:约420MB但是可以提高DB的存取执行效率。

-- ---------------------------------------
设定说明------ -----------------------

GLOBAL MEMORY
THREAD MEMORY
在配置内存时分成两各阶段,一是当SERVER启动时配置给整个系统使用,二是当CLINT联机进来的时候配置给单一联机使用。前者被称为GLOBAL后者被称为THREADMEMORY的总用量简单的说就是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,原理就像是L1L2L3 CACHEtable_cache的参数定义了能够CACHE多少个TABLEtmp_table_size是定义在内存中开?的暂存TABLE有多大,也就是说,这是个全域的内存配置。TMP TABLE超过这个大小,就会被写到上。要比对这个参数是否太大要比较SHOW STATUS(mysql中查看运作状况的指令)中的open_tablesopened_tables数量,前者是目前所开启的TABLE数,后者是曾开启的TABLE数,如果后者比前者大很多,表TABLE CACHE太小。可以试着调大数值。

wait_timeout
这个参数是由global wait_timeout或是interactive_timeou继承下来的。而且在COMMAND LINE时无法看到GLOBAL WAITTIMEOUT,这个值会继承自interactive_timeout

-------MY.CNF(
调整前的设定没有做最佳化设定,所以2G记忆体只给了约40MMYSQL)-----------
[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(
调整后的设定,2G记忆体指定了512M左右给MYSQL)-----------------------[mysqld]
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=512M
set-variable = max_allowed_packet=4M
set-variable = table_cache=1024 <---
允许暂存在CACHE里的TABLE数量。
set-variable = thread_cache=64
set-variable = join_buffer_size=32M<---
使用到JOIN时会用到,如果有大量Select动件时可视情况增加,提供执行效能。
set-variable = sort_buffer=32M<---
用来排序的BUFFER,如果DB回传大量的查询结果而且又使用ORDER BY,增加这个BUFFER大小可以提升速度。
set-variable = record_buffer=32M
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=256M
set-variable = tmp_table_size=128M
set-variable = myisam_sort_buffer_size=128M
set-variable = max_allowed_packet=1M
set-variable = net_buffer_length=16K <---
网络暂存BUFFERTCP最大封包长度是16384
set-variable = thread_concurrency=4 <---
设置为你的cpu数目x2,例如,只有一个cpu,那么thread_concurrency=2 <---2cpu,那么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=64M
set-variable = sort_buffer=64M
set-variable = read_buffer=16M
set-variable = write_buffer=16M

[myisamchk]
set-variable = key_buffer=64M
set-variable = sort_buffer=64M
set-variable = read_buffer=16M
set-variable = write_buffer=16M

[mysqldump]
quick
set-variable = max_allowed_packet=16M

[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates

[mysqlhotcopy]
interactive-timeout

阅读(600) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~