文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>MYSQL最佳化設定

MYSQL最佳化設定

时间:2008-03-20  来源:剑心通明

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

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

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

GLOBAL MEMORY与THREAD MEMORY
MYSQL在配置内存时分成两各阶段,一是当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(调整前的设定没有做最佳化设定,所以2G记忆体只给了约40M给MYSQL用)-----------
[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 <---网络暂存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=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

相关阅读 更多 +
排行榜 更多 +
找茬脑洞的世界安卓版

找茬脑洞的世界安卓版

休闲益智 下载
滑板英雄跑酷2手游

滑板英雄跑酷2手游

休闲益智 下载
披萨对对看下载

披萨对对看下载

休闲益智 下载