php mysql分片查询,数据库服务:MySQL终极优化指南

使MySQL拥有NoSQL一般的性能。

大家都知道,NoSQL更容易水平扩展和集群管理,只需少量的人工干预。然后迁移到NoSQL需要付出昂贵的代价,数据需要重要组合,导入,代码也需要重新编写。但MySQL也有自己的优点,像支付事务等功能。因此我们需要正确的使用MySQL。

1). 使用正确的版本

Mysql在每个版本升级中都会有大的性能提升,因此通常情况下应该及时更新Mysql到最新版本。基准测试表明SSD硬盘上的I/O性能在5.5版本上比5.1高20%。

2). 使用Percona分支

速度比MySQL快40%

更稳定的性能

包含XtralDB, InnoDB分支,提供更多的可调谐性和更好的内存使用率

更多的参数选项,容易更好的控制。

3). Percona安装

yum install Percona-Server-client-56 Percona-Server-server-56

4). 是否应该进行数据分片?

在不熟悉你的数据的情况下,很难说清是否需要分片数据。但在大多数情况下使用Mysql进行数据分片是错误的,或许可以        使用其他的数据库来实现。众所周知,Mysql并不适合于数据分片,特别是集群管理。

5). 处理php连接mysql是的timeout问题

PHP5.3以前,PHP跟mysql的通信使用libmysql库。5.3时,PHP团队为php编写了专用库mysqlnd(Mysql Native Driver),它能更好的与PHP结合。例如我们可以使用PHP代码继承mysqlnd,添加查询日志,负载均衡,查询缓存待功能。

一个最大的缺点就是libmysql和mysqlnd都不支持连接超时时间和查询超时时间小于1秒,也就是说如果mysql服务不可用时,最小的timeout时间为1秒,在高负载的服务器上是不可接受的。

(1). 使用PDO设置超时时间

$pdo=newPDO("mysql:host=localhost;dbname=test","username","password");

$pdo->setAttribute(PDO::ATTR_TIMEOUT,1);

(2). 使用mysqli设置超时时间

$mysqli=mysqli_init(); //不能使用$mysqli = new mysqli('localhost'),否则无法设置超时时间

$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT,1);

$mysqli->real_connect("localhost","username","password","test");

6). 关于超时

如果不设置Mysql超时时间,遇到慢的SQL查询时,PHP-FPM会一直堵塞,直到超过最大执行时间(max_execute_time)。即使PHP-FPM进程被强制结束,查询仍然会在Mysql中执行。

7). 使用HAProxy设置超时时间

使用HAProxy做为Mysql的负载均衡时,它允许设置TCP超时时间,可以设置连接、查询时间到微秒级别。

timeout connect 500ms //连接后端服务器的超时时间

timeout client 1000ms //haproxy发送数据给后端服务器时超时时间

timeout server 1000ms //haproxy等待服务器响应时超时时间

8). 使用Percona工具集中的pt-kill杀掉长时间执行的查询。

(1). 安装

(2). 使用

pt-kill --daemonize --kill --busy-time 60s --match-user webuser

9). php、mysql是否应该使用长链接

php5.4基准测试显示,使用持久链接比非持久链接快20%-25%,每个请求大概快20ms。

3adde38199cf4a9db3f069c795e27a6f.png

优点:无需每个请求创建mysql连接

缺点:

1). 缺少重置连接机制,未提交的事务可能被下一个PHP-FPM进程提交。mysqli可以每次重用时调用mysql_change_user()重置。

2). 在连接上设置的mysql变量会被下一个进程使用。 需要为每个PHP-FPM进程分配一个连接。总连接数 =pm.max_children * server num

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值