欢迎光临, 访客. 请先 登入註册一个帐号.
八月 07, 2020, 05:24:44 上午
19594 文章 在 3864 主题 由 4580 会员
最新註册会员: aa123aa1
LifeType 中文开发论坛  |  支援  |  安装与设定  |  安装与设定精华区  |  对于 Mysql 的调教 « 上篇主题 下篇主题 »
页: [1]
作者 主题: 对于 Mysql 的调教  (阅读 25610 次)
markwu
系统管理员
超级会员
*****
文章: 3928


Mark Wu


检视个人资料 个人网站
« 于: 一月 18, 2005, 04:18:15 下午 »

布大侠的来信:

引用
Dear Mark,

我是布大侠,近来在调整系统,发现plog在运行一阵子之后会在我的mysql中留下许多不会关闭的thread,一个晚上就多了三十几条死在那边,请问有么办法查出是哪里的问题?
我装的外挂都是你这边干来的,我想应该有很多人也有相同问题只是没注意到而已,但因为背包客栈流量不小,我的mysql跑一天就会挂了....请帮忙.


pLog 其实对于 DB 是没有怎么在调整的,所以当量一大很容易出现 performance 的瓶颈。有下面几个方式可以来调整 pLog 的 performance。

1. DB 效能不彰:为 DB 加上 Index。

程式码:

ALTER TABLE plog_articles ADD INDEX (num_reads), ADD INDEX (category_id), ADD INDEX (blog_id), ADD INDEX (user_id);
ALTER TABLE plog_articles_categories ADD INDEX (blog_id);
ALTER TABLE plog_articles_comments ADD INDEX (parent_id), ADD INDEX (article_id);
ALTER TABLE plog_articles_notifications ADD INDEX (article_id), ADD INDEX (user_id), ADD INDEX (blog_id);
ALTER TABLE plog_bayesian_filter_info ADD INDEX (blog_id); ALTER TABLE plog_bayesian_tokens ADD INDEX (blog_id);
ALTER TABLE plog_blogs ADD INDEX (owner_id);
ALTER TABLE plog_filtered_content ADD INDEX (blog_id);
ALTER TABLE plog_gallery_albums ADD INDEX (parent_id), ADD INDEX (owner_id);
ALTER TABLE plog_gallery_resources ADD INDEX (album_id), ADD INDEX (owner_id);
ALTER TABLE plog_host_blocking_rules ADD INDEX (blog_id);
ALTER TABLE plog_mylinks ADD INDEX (blog_id), ADD INDEX (category_id);
ALTER TABLE plog_mylinks_categories ADD INDEX (blog_id);
ALTER TABLE plog_myrecent ADD INDEX (blog_id), ADD INDEX (category_id), ADD INDEX (user_id);
ALTER TABLE plog_myrecent_categories ADD INDEX (blog_id);
ALTER TABLE plog_referers ADD INDEX (blog_id), ADD INDEX (article_id);
ALTER TABLE plog_trackbacks ADD INDEX (article_id);
ALTER TABLE plog_users_permissions ADD INDEX (blog_id), ADD INDEX (user_id), ADD INDEX (permission_id);


2. 常发生 Too many connection:加大 Mysql 的 max_connection。

预设值为 50。请自行视情况加大,例如

程式码:
set-variable = max_connections = 500


3. 常发生 mysql thread 没被使用,佔据 connection:缩短 Mysql 的 interactive_timeout。

预设值为 28800(八小时)。请自行视情况缩短,例如

程式码:
set-variable = interactive_timeout= 600


4. 虚拟主机商不准我用 pconnect:改为 non persistent connection。



程式码:
define( "ADODB_NEVER_PERSIST", true );  


加到 index.php 与 admin.php 的最前面

还有没有人有其他建议呢?
已记录

brian
新手见习
*
文章: 18


检视个人资料
« 回覆文章 #1 于: 一月 19, 2005, 07:53:06 上午 »

感谢Mark的协助,我已经採用缩短wait_timeout(interactive_timeout)的方式暂时解决了连线过多不会关闭的问题.不过这种作法好像有点治标不治本,希望有更好的解决方式.
已记录

far
访客
« 回覆文章 #2 于: 一月 19, 2005, 12:22:38 下午 »

被MarkWu凹了一下..就来写一点点针对plog 0.32的db来写一点建议好了.:Q

    .32 最大的问题就是...db写的真够烂的.又没加Index..:Q

    然后它里面架构跟query根本就乱写.所以下面的tips能造成的功效有限..

    最好的作法就是..去改写plog底层..:Q

    1.0 虽然号称改了很多啦..但是...我看了之后的结果是..

    是比.32好多了..但是还是有很明显的问题阿.= =a

    plog_articles
     - topic 没事设text是自找麻烦..VARCHAR(150) [150看你对topic觉得多长是极限]
     - user_id, blog_id 其实有必要设到INT(10)么?= =a
       如果使用者(or blog)会小于250人(个)..设个TINYINT(3) unsigned就够了
       60000人以内.SMALLINT(5) unsigned
       1000000人以内.INT(7) unsigned.
       INT(10) unsigned.....yahoo才有可能有这个量吧.:Q
       当然也不要设的太紧.以免overflow..~___~
       你动了这个值.其他table有相同的也要改.不然会变慢.
     - num_reads也是.INT(10)也太......INT(6) or INT(7)也绰绰有余.
     - category_id, blog_id, user_id 加 INDEX
     - date 可加可不加.我试过只对前6位做INDEX.对于cal的速度有变快很多.
       但或许是因为我用mysql 5的关系..有时候出来的result怪怪的.:Q

    plog_articles_categories
    - blog_id 加 INDEX

    plog_articles_comments
    - topic VARCHAR(150) [150看你对topic觉得多长是极限]
    - article_id 加 INDEX

    plog_articles_notifications
    - 这整个db设计上就有问题.一篇文章只会有一个使用者去设定是否要
      notification.且一篇文章只会出现一次..基本上article_id他就可
      以是primary key.然后整个table只要剩article_id & user_id即可.
      甚至user_id也可以不要..
    - article_id 加 INDEX

    bayesian 系列我不管.因为基本上这只对判断英文准确率才高才正确.
    对于中文来说根本是乱判..所以我是把它disable.:Q

    plog_blogs
    -  owner_id 加 INDEX

    plog_filtered_content
    -  blog_id 加 INDEX

    gallery系列因为我不使用.所以没研究.

    plog_host_blocking_rules
    - blog_id 加 INDEX

    plog_mylinks
    - blog_id, category_id 加 INDEX

    plog_mylinks_categories
    - blog_id 加 INDEX

    plog_referers
    - blog_id, article_id 加 INDEX

    plog_trackbacks
    - article_id 加 INDEX

    plog_users_permissions
    - permission_id TINYINT(1)
    - (user_id, blog_id) 联合加 INDEX


    mysql server的tuning.我只列出一些针对my.cnf的更动.


    skip-name-resolve   # 不去做反解.但是打开这个请注意你mysql这个db的
                        # 权限设定

    low-priority-updates # Table-modifying operations will have lower
                         # priority than selects.

    set-variable    = connect_timeout=30    # timeout设小一点
    set-variable    = join_buffer_size=16M  # 听Mark说用到很多join..
    set-variable    = max_connections=1024
    set-variable    = wait_timeout=30
    query_cache_size = 128M


    其实还有很多可以设拉.以上mysql的数值是要看你的硬体去调整的..
    所以也不要照抄.:Q

==
懒的写了...zzz..
已记录
far
访客
« 回覆文章 #3 于: 一月 19, 2005, 12:39:40 下午 »

加注几点..

加INDEX只是治标不治本.真正要改善这个问题要去改写query.

加INDEX也不是通通都加就好.在Query里面有Where or ORDER BY到的才会有效果.(但是也不是一定.要有某些性质才会有用)

加INDEX会造成(INSERT.UPDATE.DELETE)变慢,但是SELECT变快,所以怎么斟酌就看个人需求了.

建议要加INDEX的话.去看看他query怎么写.大多都是WHERE OR ORDER BY什么.效果才会明显.

还有阿..Mysql的Cache一定要开.差很多的...
已记录
brian
新手见习
*
文章: 18


检视个人资料
« 回覆文章 #4 于: 一月 21, 2005, 01:14:58 下午 »

程式码:
define( "ADODB_NEVER_PERSIST", true );


回报一下,这个方法似乎没有用,我的mysql的errorlog里面仍然有很多被强迫关闭的connection.
已记录

页: [1]
LifeType 中文开发论坛  |  支援  |  安装与设定  |  安装与设定精华区  |  对于 Mysql 的调教 « 上篇主题 下篇主题 »
    前往: