MySQL · 源码分析 · mysqld_safe的代码考古

mysql属于什么软件

我记得几年前有几个朋友在编写和使用 PHP,因为我们公司正在开发一个需求简单的小项目。
我们从一开始就选择 MySQL,因为它易于安装并且完全不需要任何费用。
我当时用的是社区版,但是半夜服务器突然宕机了。
当我检查日志时,我注意到某些查询非常慢并且填满了我的内存。
第二天快速添加索引解决了问题。
后来项目火了,访问量增加,数据库压力很大。
就在那时我意识到,如果我花更多的时间设计表结构和添加外键约束,我可以节省多少麻烦。

等一下,还有一件事。
我记得使用mysqldump来获取数据。
导入了半天数据,查询发现是表太大,导入块的脚本还没完成。
如果当时我们使用InnoDB的物理备份,3 0分钟就可以完成。
我突然想到,现在云上的数据库服务,比如自动备份、自动伸缩的阿里云RDS,都挡住了这些运维细节。
从这个角度来看,数据库技术的进步实际上已经将人类从基本的运维中解放出来。
但在实践中,即使涉及到性能调优或奇怪的错误,你仍然需要了解基本原理,不能仅仅依赖自动化。

MySQL · 源码分析 · Subquery代码分析

MySQL与Redis数据库连接池介绍(图示+源码+代码演示)

哎呀,关于这个数据库连接池我需要多说几句。
当我在公司做项目的时候,我真的不明白这个东西的重要性。
首先我们需要知道创建数据库连接是一个复杂的过程。
这需要TCP三路握手,然后是MySQL认证,然后是SQL执行,最后必须关闭连接,TCP四路握手。
这种来回需要时间,并且很容易导致安全问题。

我记得我们公司的一个项目没有使用连接池。
每次访问数据库时,都必须重新建立连接,速度极其缓慢。
此外,频繁打开和关闭连接对数据库不友好,并且很容易浪费资源。

后来使用了数据库连接池,效果就出来了。
首先我们需要初始化连接池。
例如,如果是4 核处理器,则连接池大小可以设置为9 个连接。
这样后续的SQL操作就可以直接从连接池中取出连接,用完后放回去,而不必每次都重新建立连接。

我已经测试过了。
在不使用连接池的情况下,完成一次操作大约需要4 秒;使用连接池后只需要2 秒。
这个速度提升了一倍多。
另外,连接池还可以统一管理连接,避免连接泄漏,这也提高了安全性。

我们看一下代码实现。
例如,CDBConn 是一个数据库连接对象。
他需要知道他有什么连接池。
CDBPool是一个连接池,负责管理这些连接。
使用完连接后,将其归还给连接池,从而实现资源复用。

再比如,redis_pool也有类似的逻辑。
测试时,必须先修改配置,然后使用命令编译运行测试。
你会发现,当连接池不使用时,操作需要很长的时间;使用连接池后,速度略有提升。

所以数据库连接池用起来真的很有趣。
不过,这东西并不是万能的。
连接池大小要根据实际情况设置。
否则,使用太多会浪费资源。
你必须找到一个平衡点。