Chinaunix首页 | 论坛 | 博客
  • 博客访问: 485082
  • 博文数量: 279
  • 博客积分: 4467
  • 博客等级: 上校
  • 技术积分: 2830
  • 用 户 组: 普通用户
  • 注册时间: 2007-04-03 14:43
文章分类

全部博文(279)

文章存档

2013年(1)

2012年(39)

2011年(35)

2009年(29)

2008年(131)

2007年(44)

分类:

2009-01-11 22:34:49

MYSQL 的优化(/etc/my.cnf)W\3i4w+k Vq%`7C
        1)确认在“[mysqld]”部分加入了“skip-innodb”和“skip-bdb”参数;r Di h;S\`6v
        2)确认在“[mysqld]”部分加入了“skip-name-resolve”和“skip-locking”参数;c'eIv1~$z
        3)如果不需要的话,可以将二进制日志(binlog)停掉,方法是将“log-bin”注释掉;
@&Tq&T2RTkC         4)在内存允许的情况下,对一些参数进行重新配置,目标在于将大部分操作集中于内存中,尽量不进行磁盘操作,对于我的 MYSQL 服务器我是如下修改的,基于 2G 内存情况:#_CFH#{X u
4@a[ s.|k(E:a2T
        [mysqld]
9L[@{0K7J         set-variable    = key_buffer=512M
){1R9QXIY         set-variable    = max_allowed_packet=4M/SFL S4r7H eV
        set-variable    = table_cache=1024$x^k6j&@o Q J!m)F*c
        set-variable    = thread_cache=640Y{,T%SU(sh
        set-variable    = join_buffer_size=32M
LWfwnbk'y         set-variable    = sort_buffer=32M
4X!Z3gL:hG Wd         set-variable    = record_buffer=32M c]&g` t Q
        set-variable    = max_connections=512
5`e'Y,n.^0fm X         set-variable    = wait_timeout=120
"_}J9rE!V2[         set-variable    = interactive_timeout=120 sJvGE5?'@/P*T)W
        set-variable    = max_connect_errors=30000
S9@)W+e)k         set-variable    = long_query_time=1
Ua&x]{ law~8[7]E         set-variable    = max_heap_table_size=256MJu c0U T&Pc
        set-variable    = tmp_table_size=128MIlqBh%w'M
        set-variable    = thread_concurrency=8^6~-s^8st9WPeS'K
        set-variable    = myisam_sort_buffer_size=128M
E^V"E#m.Y/_
.?!ygK6?5Q         你可以根据“show status”命令返回的状态进行微调。我主要注意以下变量的数值,越小越好,最好为零:)&O8`3] w Y;c|
        Created_tmp_disk_tables
c,n~Z tQ#Hg2n         Created_tmp_tablesY@/r1BGm0C8LrhT
        Created_tmp_files@2o"VU^t u'Uj?
        Slow_queries
}onn!}t'Q"g 另外 mysql wait_timeout 那个值设置大了没用 做10左右就可了 (大C说得)
"JY.jq(p8|!y4tl %Q0Y O1T&Quxh
wait_timeout是使用长久连线时 空闲进程的控制 只要数据库在连接状态 他是不进行干预的 不管是否有查询或更新操作 把这个设置小一点 再使用pconnect就比较理想了 ;) ,T2]0i+Y*IN)L"~R

X_vJC:~ timeout的时间,我的经验值是5-20,看你的SERVER的访问量了~~ (梦飞说的)9mGCS.?;E
V!zq#af
访问量越大 这个值就应该越小 否则留出的空闲进程太多 会占用不必要的内存
(f~2~ ]9Hr`.yH 在一个15分钟在线3000人的论坛上 设置为3比较合适 同时打开pconnect9x'uH1]:o
e`;iEA$u!w?
第三种;`Rp{Viz
数据库连接过多的错误,可能的原因分析及解决办法I;Gj qeA6J!] d(K

F0s{~3F#^v5QK QUOTE:
+D0Z*a*q ab1~ 分析 sl2i9O]
T(mu^gY2U5A]9r
系统不能连接数据库,关键要看两个数据: ~0l{%G}
1、数据库系统允许的最大可连接数max_connections。这个参数是可以设置的。如果不设置,默认是100。最大是16384。 6c(V5e&J5e?Xt
2、数据库当前的连接线程数threads_connected。这是动态变化的。 c,W H1V4esc
查看max_connections、max_connections的办法见后。
+T'J/k%i]u%a7V)ks
$c,kqG{U$LT-|     如果 threads_connected == max_connections 时,数据库系统就不能提供更多的连接数了,这时,如果程序还想新建连接线程,数据库系统就会拒绝,如果程序没做太多的错误处理,就会出现类似强坛的报错信息。
:@,LU#R[M
Wd3} R6S7`       因为创建和销毁数据库的连接,都会消耗系统的资源。而且为了避免在同一时间同时打开过多的连接线程,现在编程一般都使用所谓数据库连接池技术。
1I;G+hsar .Y!W1\H2D+W:b|
但数据库连接池技术,并不能避免程序错误导致连接资源消耗殆尽。
w e i!eN ]%A bj8yhP+{
      这种情况通常发生在程序未能及时释放数据库连接资源或其他原因造成数据库连接资源不能释放,但强坛系统估计不会发生这种低级的编程错误。
%p.N8ETu8O,bN!gI       该错误的简便的检查办法是,在刷新强坛页面时,不断监视threads_connected的变化。如果max_connections足够大,而threads_connected值不断增加以至达到max_connections,那么,就应该检查程序了。当然,如果采用数据库连接池技术,threads_connected增长到数据库连接池的最大连接线程数时,就不再增长了。 R7[n,lo0Tk$qWu9I

*Xvfi.~4Kh`K A 从强坛出错的情况看,更大的可能性是数据库系统没能进行适当地配置。下面提出一点建议。供参考
&O6x.tf&gEL v }(L [iL.I:d7Z
让你们的工程师把MySQL的最大允许连接数从默认的100调成32000。这就不会老出现连接过多的问题了。 a+bf g$m+}

'[6OvX[ } R7h4C)R5]s
查看max_connections
*M1Xl$n3x5S!M f3j ~#|J0o-@[9F)q
进入MySQL,用命令:show variables
\.qd:R0T#i4[+I#aXa-H 查看数据库最大可连接数的变量值:max_connections Xa c#i4l:f,qo#IZ @
K+mb(d X)X(H
-LJ6I)FOmf$\

-\)P$q^j g e2~j 查看threads_connected 4mc)Plz2w5S,g!M lZ:X6O

f"{bHm!PeML/Q 进入MySQL,用命令:show status
9v8F*o|,v'Z?K-s 查看当前活动的连接线程变量值:threads_connected `u#y nOi v6F
RY!~ qC)O m\

i| z~F1]}&{fEUy%U 设置max_connections
s9A#m)q;J*n\ RWu%e }]
设置办法是在my.cnf文件中,添加下面的最后红色的一行: %X}D!W{ kZeX
1Y Y2Pp*c"L"|oEQMbc
--------------------------------------------------------------------------------
7LU S/a+rw vJ8br
*Ho3@"S%{M [mysqld] (Sh T x mB ~
port=3306 kM[,Gz4o0G!N.}
#socket=MySQL 5b0~#Lh[ ]
skip-locking Iz6d c3O SCi E
set-variable = key_buffer=16K
k Hp l;`0I8sR set-variable = max_allowed_packet=1M
4t?-h:@N'c set-variable = thread_stack=64K *w`.?7WW#s CY"^%Oy0te
set-variable = table_cache=4 fr#y;Irn3^;qQu
set-variable = sort_buffer=64K ?@q`m9~/zn%`
set-variable = net_buffer_length=2K 3B9s6o,~"[S8oK
set-variable = max_connections=32000
BM:} ^{:@0q/I$z
,wR Y6e!q/FO#^$u;X
#R H.nyI#x_\1D5Y --------------------------------------------------------------------------------
*~']!grz{!~ }S ;EZ*^n6Rf@G
修改完毕后,重启MySQL即可。当然,为了确保设置正确,应该查看一下max_connections。
Ee#`rt+|
&qEQKq}&P 注意: 0^+g)Zi x
1、虽然这里写的32000。但实际MySQL服务器允许的最大连接数16384;
R-a_ke 2、除max_connections外,上述其他配置应该根据你们系统自身需要进行配置,不必拘泥; +u]Yc5M3[ Q
3、添加了最大允许连接数,对系统消耗增加不大。 0o5{.K,S8S
4、如果你的mysql用的是my.ini作配置文件,设置类似,但设置的格式要稍作变通。
6d nfo+`xJ
阅读(549) | 评论(0) | 转发(0) |
0

上一篇:mysql优化方法

下一篇:mysql优化经验

给主人留下些什么吧!~~