POSTGRESQL 在多并发连接的时候,会考虑使用pgbouncer , MYSQL 实际上很少听到说,还要使用代理的情况, 大多都是直接连接到mysql或者即使有中间件,也没有提到多路复用的技术.
实际上PROXYSQL 是支持多路复用技术应用在 MYSQL 上的,具体到底怎么应用,应用以后会怎样,这都是本篇需要说的问题.
如果没有
在ProxySQL中的多路复用是一个允许多个前端连接复用同一个数据库后端连接的特性。MySQL使用“每个连接的线程”而不是“线程池”实现。这将导致为每个连接打开一个单一的thead,随着连接数量的增加idel连接也会增加,会消耗资源降低性能。ProxySQL使用了“线程池”,通过多路复用,ProxySQL减少了数据库后端分配和管理的资源数量. 这就是ProxySQL 的多路复用的主要的作用.
在POSTGRESQL 中的pgbouncer 中是有相关某些情况不能使用代理, ProxySQL 作为 MYSQL的通用型代理, 在某些情况下,也是有不能进行复用的情况,或 如果要复用,必须有一些前提条件.
1 正在处理的transaction 在没有commit 前,他所使用的connection 是不能进行复用的.
2 当有表锁,刷表以及读锁的情况下, 是不能进行相关复用的
3 以及使用其他的类似 get_lock 函数的情况
4 在查询中获取系统变量的情况下 例如 select @@tx_isolation 或者自定义变量的情况下.
其实以上的这些问题都比较好理解, 一句话,如果本线程处理的事务必须在这个线程完成,