mysql连接池初识

由于mysql客户端编程还未深入学习,所以mysql连接池的一些知识可能没办法深入下去。

线程池和连接池的区别

  • 线程池是主动操作,主动获取任务并执行任务;
  • 连接池是被动操作(类似内存池),池的对象被任务获取,执行完任务后归还;
  • 一个连接只能被一个线程使用;
  • 服务端和客户端是相对的;

在这里插入图片描述

  • 连接池内部是长连接

连接池设计要点

在这里插入图片描述

  • 同时并发128个连接,大部分情况同时操作数据库64个线程

    • 最小连接数64,最大连接数128
    • 任务:获取连接,操作数据库,归还连接
  • 注意:避免占用连接不归还

  • 分库,例子如下:
    用户消息 独立数据库和独立服务器 poolname = “login”
    聊天消息 独立数据库和独立服务器 poolname = “msg”

  • mysql连接池要设置重新连接以及字符集修改为4字节utf8类型

    mysql_options(m_mysql, MYSQL_OPT_RECONNECT, &reconnect);	// 配合mysql_ping实现自动重连
    mysql_options(m_mysql, MYSQL_SET_CHARSET_NAME, "utf8mb4");	// utf8mb4和utf8区别
    

    utf8只支持3个字节的unicode,所以要换成utf8mb4可以支持4个字节

  • 线程池和连接池的数量通常相同

  • 虚拟机对于性能很大单线程对写入性能影响很大, 磁盘io写入等待时间长

IO密集型任务

在这里插入图片描述

  • 一个cpu可以有多个核心

杂项

  • 连接池–同步连接,要阻塞等待io返回
  • 异步比同步在编程上复杂的多;
  • 重点问题:
    • 为什么要用连接池
    • 连接池和线程池怎么配合同步的连接池
    • 连接池-线程池数量,io同步的时间的问题
    • mysql redis同步连接和一步连接的区别
    • 连接池的扩展功能

补充提高

  • 了解一下druid连接池
  • 如何从连接池中分析中最大连接时间,归还的时间- 请求的时间 =1001ms,超过1000ms打印警告信息。
  • 每秒请求连接的次数req_count
  • 程序异常,可能连接没有归还,
    • m_used_list.push_back
    • 每隔5s检测连接,如超时5s没有归还,则手动销毁,重新创建新连接加入m_free_list
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值