利用Apache 的ab工具测试承压

第一:ab所在的位置

ab工具在apache目录下面的bin目录下。找到ab工具所在的目录后,直接使用

ab -V 命令:可以获得当前ab测试工具的版本号。

第二:ab压力测试工具的使用方法

在ab工具下直接使用命令,即可进行压力测试。其中ab命令支持很多参数,具体可以百度或者参考文档。案例如下:

ab -c 200 -n 10000 http://www.xxx.cn/index.php

-c : 每秒请求200次;

-n:表示总共发送请求数10000次;

-t:表示总共发送请求时间;

第三:常见一键包里,只要安装了apache都有这个工具

例如phpstudy这样的集成环境都自带有apache的ab网站压力测试工具
不管是windows系统还是linux系统,只要安装了apache或者自带有apache,都有这个工具。比如说:linux下常见的wdcp,AMH,或者说windows下的phpstudy等一键包,也都有apache的这个ab测试工具。而且,保管你找到一次,这辈子都不会忘记。。

总结

用法就是如此的简单,命令很好记。ab工具可以用来对网站的任何页面进行压力测试,比如说QPS的测试等。实在是对网站进行性能优化的必备神器啊,不管是做运维还是做web开发的,都得学会哦。

类似的还有WB(Webbench)工具,下次有空再写


当遇到ab测试提示apr_socket_connect()的时候,是由于本地apache配置设置过低,而测试的并发过大,可以通过增加并发数上限解决这个问题,步骤如下:
1、停止Apache服务;

2、找到apache/conf/httpd.conf文件,用文本编辑器打开找到这两行:# Server-pool management (MPM specific)# Include conf/extra/httpd-mpm.conf把第二行include……..这行的注释去掉。

3、找到apache/conf/extra/httpd-mpm.conf文件,打开,找到:
ThreadsPerChild 150MaxRequestsPerChild 0把上面的150调大,Windows下最大为1920.
注意:尖括号里的名字是winnt,不要看错了

4、重新启动Apache服务.

MySql having用法

Mysql中,where是聚合前筛选条件,用于行列数据进入,不可结合函数使用;而having则是用于聚合后数据的筛选,可以接合函数使用,一般having 跟在group by后面使用。
以下是实际使用:
找出person表中重复的邮箱

#方法1 使用临时表 语句比较复杂
select s.email from (
    select email,count(email) as num from person group by email 
) as s 
where s.num>1
#方法2 使用having
select email from person group by email having count(email)>1

#注意having属于聚合后筛选,应在where后,且放置于order by后面

mysql 关联查询 索引不起作用原因记录

今天联表查询的时候发现,两个表的’openid’都已经加了索引,联表的使用也是用的索引字段,理论上应该能命中索引,但是explain分析索引失效了,导致查询平均时间从0.01暴涨到平均十几秒

SELECT l.*,m.nickname,m.id AS member_id,m.mobile,m.avatar,m.realname,m.weixin,m1.nickname AS m1_nickname,m1.id AS m1_id,m1.mobile AS m1_mobile,m1.avatar AS m1_avatar,m1.realname AS m1_realname,m2.nickname AS m2_nickname,m2.id AS m2_id,m2.mobile AS m2_mobile,m2.avatar AS m2_avatar,m2.realname AS m2_realname,ml.logno,ml.createtime AS rechargetime,ml.rechargetype FROM `ims_vcshop_reward` l LEFT JOIN `ims_vcshop_member` m ON l.openid=m.openid LEFT JOIN `ims_vcshop_member` m1 ON l.m1=m1.id LEFT JOIN `ims_vcshop_member` m2 ON l.m2=m2.id LEFT JOIN `ims_vcshop_member_log` ml on ml.id=l.logid WHERE l.uniacid=2  ORDER BY l.id DESC limit 0,50

修改后命中索引

最后通过百度大法发现
1、两表关联使用的条件字段中字段的长度是否是一致的(本人测试不影响,规范期间数据库相同字段还是要保持长度一致)

2、两表关联使用的条件字段中字段的编码是否是一致的

如果以上两种情况不满足,也会导致索引失效;
本人在此就是’openid’字段,分别使用了utf8和utf8mb4两种编码,导致索引失效;

Mysql 5.7 5.6 5.5新增保留字

Mysql5.6新增保留字

GET IO_AFTER_GTIDS IO_BEFORE_GTIDS
MASTER_BIND ONE_SHOT PARTITION
SQL_AFTER_GTIDS SQL_BEFORE_GTIDS

Mysql5.7新增保留字

ACCOUNT ALWAYS CHANNEL
COMPRESSION ENCRYPTION FILE_BLOCK_SIZE
FILTER FOLLOWS GENERATED (R)
GROUP_REPLICATION INSTANCE JSON
MASTER_TLS_VERSION NEVER OPTIMIZER_COSTS (R)
PARSE_GCOL_EXPR PRECEDES REPLICATE_DO_DB
REPLICATE_DO_TABLE REPLICATE_IGNORE_DB REPLICATE_IGNORE_TABLE
REPLICATE_REWRITE_DB REPLICATE_WILD_DO_TABLE REPLICATE_WILD_IGNORE_TABLE
ROTATE STACKED STORED (R)
VALIDATION VIRTUAL (R) WITHOUT
XID

MySql 使用CASE WHEN语法条件性处理数据

假设数据库有字段 id,money1,money2,m1,m2,查询时需要判断mid=m1则累计money1,mid=m2则累计money2,此时可以使用CASE WHEN语法条件性处理数据

SELECT SUM(
    CASE WHEN m1=:id THEN money1 WHEN m2=:id THEN money2 ELSE 0 END
) AS money FROM TABLE
# Tips:匹配m1=:id时,返回money1;匹配m2=:id时,返回money2,否则返回0