免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 11593 | 回复: 13
打印 上一主题 下一主题

新手求教mysql性能问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-08-02 17:54 |只看该作者 |倒序浏览
本帖最后由 biosway 于 2013-08-02 18:20 编辑

硬件配置:
    CPU   :   (Intel(R) Xeon(R) CPU  E5606  @ 2.13GHz )  X 2
    MEM  :   32G
    HD    :    SATA  1TB
软件环境:
    OS                    :  centos 5
    DB                    :  mysql 5.0.95
    WEBSERVER      :    apache 2.2.3

数据库中只有一简单的张表:
+-----------   +--------------+------+----- +---------+----------------+
| Field            | Type              | Null |   Key   | Default  | Extra          |
+-----------  +------------- -+------+----- +---------+----------------+
| ID               | int(11)           | NO     | PRI  | NULL      | auto_increment |
| CLIENTID     | int(11)           | YES   | MUL | NULL      |                |
| KEY_WORD  | varchar(100)  | YES   |        | NULL      |                |
| URL             | text               | YES  |         | NULL      |                |
| ADV_IND     | int(11)            | YES  |        | NULL      |                |
| DATE_TIME  | datetime         | YES  |        | NULL       |                |
+-----------  +--------------   +------+-----+---------+----------------+
其中 CLIENTID 创建了 索引,CLIENTID 的取值范围是(1 - 30M),表中有 一亿多条数据。

MySQL的配置:
  1. [mysqld]
  2. max_connect_errors = 50000
  3. max_connections = 8000
  4. max_user_connections = 8000
  5. key_buffer_size =2048M
  6. tmp_table_size = 2048M
  7. table_cache = 1024
  8. sort_buffer_size= 6M
  9. default-character-set=utf8
  10. back_log = 1000
  11. wait_timeout = 7200
  12. interactive_timeout = 7200
复制代码
Apache 的 prefork 模块配置:
  1. <IfModule prefork.c>
  2. StartServers       8
  3. #MinSpareServers    5
  4. MinSpareServers   20
  5. MaxSpareServers   80
  6. #MaxSpareServers   20
  7. ServerLimit     8000
  8. MaxClients      8000
  9. #ServerLimit      256
  10. #MaxClients       256
  11. MaxRequestsPerChild  30000
  12. </IfModule>
复制代码
写了一个简单的查询 test.php:
  1. <?php
  2.         include 'db.php';
  3.         $cid = rand(1,30000000);
  4.         open_db_connect();  //打开并选择数据库,函数在db.php中
  5.         $sql = "SELECT DISTINCT ADV_IND FROM search_info WHERE CLIENTID='".$cid."'";
  6.         $result = mysql_query($sql) or die("error");
  7.         mysql_close($link);
  8. ?>
复制代码
用apachebench进行测试:

命令: ab -n 30000 -c 50 http://192.168.1.2/test.php
dstat 的显示:


命令: ab -n 30000 -c 100 http://192.168.1.2/test.php
dstat 显示:


命令: ab -n 30000 -c 200 http://192.168.1.2/test.php
dstat 显示:


测试过程中可以看到 cpu 的 IO wait 占用很严重 ,整个系统性能很差的原因是由于磁盘的性能不行还是其他原因?请高手指点! 谢谢!

还有就是如果并发量高的话,apache的日志中会出现如下错误:
  1. Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'
复制代码

论坛徽章:
13
双鱼座
日期:2013-10-23 09:30:05数据库技术版块每日发帖之星
日期:2016-04-20 06:20:00程序设计版块每日发帖之星
日期:2016-03-09 06:20:002015亚冠之塔什干火车头
日期:2015-11-02 10:07:452015亚冠之德黑兰石油
日期:2015-08-30 10:07:07数据库技术版块每日发帖之星
日期:2015-08-28 06:20:00数据库技术版块每日发帖之星
日期:2015-08-05 06:20:002015年迎新春徽章
日期:2015-03-04 09:57:09辰龙
日期:2014-12-03 14:45:52酉鸡
日期:2014-07-23 09:46:23亥猪
日期:2014-03-13 08:46:22金牛座
日期:2014-02-11 09:36:21
2 [报告]
发表于 2013-08-03 09:01 |只看该作者
到达最大连接数了

论坛徽章:
0
3 [报告]
发表于 2013-08-05 18:48 |只看该作者
不要用本地机压本地机!
max_connections = 8000这种配置是无聊的,MYSQL最在支持1024,你写再大已无用!
像这种单台APACHE都顶不住ab -n 30000 -c 50
要压最好是一台APCHE,一台MYSQL。

论坛徽章:
4
双子座
日期:2014-08-28 10:08:002015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:58:112015年亚洲杯之阿联酋
日期:2015-03-13 03:25:15
4 [报告]
发表于 2013-08-05 21:27 |只看该作者
mysql最大支持1024?  对这个表示质疑,楼上的意思是说linux默认的限制吗?  ulimit -n设置一下不救可以了?

论坛徽章:
0
5 [报告]
发表于 2013-08-05 22:22 |只看该作者
回复 4# weishuo1999


    MySQL能支持的最大连接数取决于给定平台上线程库的质量。Linux或Solaris应能支持500-1000个并发连接,具体情况取决于RAM容量,以及客户端正在作什么。MySQL AB提供的静态Linux库能支持高达4000个连接。

说话是要讲道理的,MYSQL手册中就有!

论坛徽章:
0
6 [报告]
发表于 2013-08-05 22:26 |只看该作者
ulimit -n是打开的文件链接数,打开的文件链接数/5是max_connections
max_connections是并发的连接数!1024已经很大了!

论坛徽章:
4
双子座
日期:2014-08-28 10:08:002015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:58:112015年亚洲杯之阿联酋
日期:2015-03-13 03:25:15
7 [报告]
发表于 2013-08-06 08:51 |只看该作者
对这个问题,依然表示质疑,我们公司的主库是最大3000的连接数,平时的连接数稳定在1500+,如果mysql限制了只能使用1024的最大连接,那也太弱了。我看一下手册和源码再讨论这个问题回复 6# witer666


   

论坛徽章:
4
双子座
日期:2014-08-28 10:08:002015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:58:112015年亚洲杯之阿联酋
日期:2015-03-13 03:25:15
8 [报告]
发表于 2013-08-06 08:57 |只看该作者
能否把相关的mysql手册的链接发一下看看?回复 5# witer666


   

论坛徽章:
0
9 [报告]
发表于 2013-08-06 10:00 |只看该作者
回复 3# witer666

像我这台服务器的硬件配置,如果单做 mysql 服务器 或者 单做 apache 服务器,这两者的最大并发数量的推荐配置是什么? 问题应该主要集中在 msyql 上吧,apache的并发处理能力应该比 mysql 要强不少。
   

论坛徽章:
0
10 [报告]
发表于 2013-08-06 10:22 |只看该作者
回复 7# weishuo1999
请问你们公司的主库的 3000 并发是什么样的配置?硬件和软件,能不能说一下,我对比一下做个参考,谢谢!

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP