不是 PHP 不行了,而是 MySQL 数据库扛不住啊
大家好,我是码农先森。
大多数的业务场景下 PHP 还没有达到性能瓶颈,然而 MySQL 数据库就先行驾崩了。但我们总是不分青红皂白,一股脑的把原因归结于是 PHP 语言不行了,每当遇到这种情形我就会感叹到 PHP 的命真苦啊。PHP 作为一门优秀的开源编程语言,在编程语言界一直享有「PHP是世界上最好的语言」的美誉,它让 PHP 靓仔们养了家糊了口过上了小康生活,但一遇到点性能问题就被疯狂的吐槽,它真是干了件吃力不讨好的活。当然我相信这种吐槽是少数的,绝大数的人都还是会秉承理性公正的眼光来看待 PHP 语言,在碰到问题时会仔细分析缘由,找到问题的症结并解决它,让 PHP 绽放属于它自己的光芒。
还记得在之前的工作经历中,使用 ThinkPHP 框架开发公司内部的 ERP 后台系统,很多的情况都是数据库拖慢了用户的访问速度,比如开发的一些财务数据报表,这些接口往往都会聚合了好几张数据表的数据,左连接一张表右连接一张表,动不动还搞个全连接,这能不慢嘛。不仅如此,还有在一个接口里 SQL 语句的查询都嵌套了好几层,各种子查询漫天飞,这样的代码现状简直惨不忍睹,数据量小的时候尚且能用不会影响用户的体验,当数据量上来时接口就经常搞超时,数据库的慢日志都打满了。在我印象中有个最深刻的例子,就是有一个速卖通的产品编辑功能,一个页面需要能同时编辑几十个产品,这就是所谓的批量编辑,而且每个产品的详情数据特别多,还包括很多的图片,每次加载这些数据和图片就半天了,这个功能使用人数最多、使用次数最频繁,同时也是被吐槽的最多的。如果有开发过类似功能的朋友,可能会有比较深刻的感触。
还有一种用脚本跑异步任务的场景,由于有些报表用接口是真的搞不出来了,那就用脚本的方式定时计算。但当时由于我们的数据量比较大,都是上百万千万级别的,单进程跑数据太慢,为了提升效率就直接干上了 PHP 多进程。那时我们还满心欢喜的 Fork 着进程,一启动脚本就是并发几十个进程,结果现实情况就是给我们当头一棒,阿里云 MySQL 数据库监控系接连报警,登上云控制台一看傻眼了,CPU 直接干到 100% 满载运行,搞的 ERP 后台系统都无法正常访问了。还被技术老大当头呵斥你们搞什么飞机,吓得我们赶紧通过 Kill 命令把脚本进程强制杀掉。说到这里可能有些朋友会有些疑惑了,为什么异步脚本会影响到 ERP 后台系统呢?原因是大多数的 PHP 靓仔们都有直接在线上环境修改代码的习惯,当然这种事情在我们这里也不例外了哈哈,甚至有时都变成了常态,感觉就是怎么方便怎么来。所有的业务都是共享一个数据库,这不就影响到 ERP 后台系统了嘛。
通过谈我之前的经历,可以看出并不是 PHP 不行,而是因为没有正确的使用好 PHP 而把数据库搞垮了,单纯的责怪 PHP 语言本身没有任何意义。很多时候性能的瓶颈,往往都是先在数据库层面出现,比如某些查询没有命中索引、子查询嵌套层数过多、长事务造成死锁、并发大量的操作造成负载过高等等。总而言之,在我的经历中把 PHP 语言干出性能瓶颈的场景还是占少数,夸张点可以说几乎没有哈哈,可能是我资历尚浅,不过话又说回来,大家的经历和我的应该也差不多。最后希望大家可以在数据库层面多花一些功夫,而不是纠结于这门语言到底行不行了,如果数据库都不行了,那么换什么语言都是白瞎,愿这一点大家能有相应的共识。本次的分享内容就到这里结束了,希望对大家能有所启发。
感谢大家阅读,个人观点仅供参考,欢迎在评论区发表不同观点。
欢迎关注、分享、点赞、收藏、在看,我是微信公众号「码农先森」作者。
不是 PHP 不行了,而是 MySQL 数据库扛不住啊的更多相关文章
- 基于Mysql数据库亿级数据下的分库分表方案
移动互联网时代,海量的用户数据每天都在产生,基于用户使用数据的用户行为分析等这样的分析,都需要依靠数据都统计和分析,当数据量小时,问题没有暴露出来,数据库方面的优化显得不太重要,一旦数据量越来越大时, ...
- 阅读之MySQL数据库分表
移动互联网时代,海量的用户数据每天都在产生,基于用户使用数据等这样的分析,都需要依靠数据统计和分析,当数据量小时,数据库方面的优化显得不太重要,一旦数据量越来越大,系统响应会变慢,TPS直线下降,直至 ...
- MYSQL数据库的优化
我们究竟应该如何对MySQL数据库进行优化?下面我就从MySQL对硬件的选择.MySQL的安装.my.cnf的优化.MySQL如何进行架构设计及数据切分等方面来说明这个问题. 服务器物理硬件的优化 在 ...
- [转]MySQL数据库的优化-运维架构师必会高薪技能,笔者近六年来一线城市工作实战经验
本文转自:http://liangweilinux.blog.51cto.com/8340258/1728131 年,嘿,废话不多说,下面开启MySQL优化之旅! 我们究竟应该如何对MySQL数据库进 ...
- MySQL数据库的优化-运维架构师必会高薪技能,笔者近六年来一线城市工作实战经验
原文地址:http://liangweilinux.blog.51cto.com/8340258/1728131 首先在此感谢下我的老师年一线实战经验,我当然不能和我的老师平起平坐,得到老师三分之一的 ...
- Javaweb 第5天 mysql 数据库课程
MySQL数据库课程 两日大纲 ● 数据库的概念.MySQL快速入门.SQL语言简介 ● 数据库操作.表操作.数据记录操作.数据类型和约束 ● 查询 ● 多表关系.多表连接查询 ● 视图 ● 数据备份 ...
- MySQL 之 MySQL数据库的优化
服务器物理硬件的优化 在挑选硬件服务器时,我们应该从下面几个方面着重对MySQL服务器的硬件配置进行优化,也就是说将项目中的资金着重投入到如下几处: 1.磁盘寻道能力(磁盘I/O),我们现在用的都是S ...
- nodejs进阶(6)—连接MySQL数据库
1. 建库连库 连接MySQL数据库需要安装支持 npm install mysql 我们需要提前安装按mysql sever端 建一个数据库mydb1 mysql> CREATE DATABA ...
- 当忘记mysql数据库密码时如何进行修改
因为长时间没有使用数据库了,或者把密码改完之后就忘了数据库密码,不能正常进入数据库,也无法修改密码,有一个简单的常用修改密码方式: 1.首先找到和打开mysql.exe和mysqld.exe所在的文件 ...
- MySQL数据库和InnoDB存储引擎文件
参数文件 当MySQL示例启动时,数据库会先去读一个配置参数文件,用来寻找数据库的各种文件所在位置以及指定某些初始化参数,这些参数通常定义了某种内存结构有多大等.在默认情况下,MySQL实例会按照一定 ...
随机推荐
- 2020-2021 ICPC, NERC, Northern Eurasia Onsite BEIJ 题解
B. Button lock 题意:有 \(d\) 个 01 按键以及一个 reset 按键,你需要把所有题目给定的 \(n\) 个密码全部表示一遍.只有按下 reset 按键后才能使所有 01 按键 ...
- Python使用Matplotlib画以日期为X轴的图
Python使用Matplotlib画以日期为X轴的图 步骤: 用pd把字符串格式的日期转成date格式. 使用 AutoDateLocator 设置x轴的属性. 1 from matplotlib ...
- 3568F-麒麟KylinOS国产操作系统演示案例
- 嵌入式测试手册——基于NXP iMX6ULL开发板(2)
基于测试板卡:创龙科技TLIMX6U-EVM是一款基于NXP i.MX 6ULL的ARM Cortex-A7高性能低功耗处理器设计的评估板,由核心板和评估底板组成.核心板经过专业的PCB Layout ...
- Nginx负载配置
目录 Nginx 负载均衡笔记 1. 概述 1.1 Nginx 简介 1.2 负载均衡概述 2. 四层负载均衡(传输层) 2.1 工作原理 2.2 特点 2.3 优缺点 优点 缺点 2.4 示例场景 ...
- SpringCloud 微服务与微服务对接心德
导读 先简单介绍下背景,公司里的项目,有一块需要与公司里的其他项目组对接.我们这边用的注册中心Nacos,对方用的eureka,之前都是自己写接口,然后服务中引入这个接口工程,都是注册到同一个注册中心 ...
- Mybatis ResultMap复杂对象一对一查询结果映射之association
Mybatis复杂对象映射配置ResultMap的association association:映射到POJO的某个复杂类型属性,比如订单order对象里面包含user对象 表结构 项目结构 pom ...
- P1387
#include<iostream> #include<utility> using namespace std; typedef long long ll; #define ...
- 【实操记录】MySQL主从配置
本文使用MySQL原生支持的主从同步机制,详细记录了配置步骤及运维操作方法,可供大家直接参考.使用. 本文假设已经部署了两台主机的MySQL软件,且数据库服务正常,详细部署步骤可本站搜索:" ...
- API网关实践-网易云轻舟微服务
微服务最佳实践中,我们需要通过统一的 API 网关进行服务能力的共享,API 网关为用户提供发布.管理.保护和监控 API的能力,帮助用户在自己的多个系统之间,或者内部系统与合作伙伴以及第三方的系统之 ...