一次内存优化Double-》double(二)interner weak & db方案实现

intern(四)怎么样防止内存泄漏

 

===============DB方案实现==========================================================================================================


 

 

 

背景;

1 oracle 不让用,只能在k8s建了一个mysql pod

2 pod不分配公网端口-侵入了微服务入口instance的client hello

 

后来未使用sharding sphere的原因:

1 分表业务相对局部

2 引包困难

3 侵入了ssl jdbc,也因为ssl,所以性能损伤

com.mysql.cj.protocol.a.NativeSocketConnection

com.mysql.cj.protocol.StandardSocketFactory#performTlsHandshake

com.mysql.cj.protocol.ExportControlled#getSSLContext

 

key:

1 连接管理:因为使用了ssl 代理,mysql可能cut与代理服务器的tcp连接,在与mysql服务器的inactive里处理与前端的连接close

 

2 使用myisam

1000批量分表并发(注意批量格式)values()插入(https://www.cnblogs.com/silyvin/p/9106598.html);

不需要事务,允许有些记录插不进重试人工介入,但该失败记录记录在另有张audit表里;一个批次异常后使用二分查找异常行

myisam单线程插入性能式innodb 2倍,实测单线程qps500-1000row,200w单表30-60分钟

myisam数据没有存在页,不用考虑单行4.5KB大小与页16KB的关系

 

3 分片在内存里使用list o(n)分好

分片数量不仅考虑查询性能,同时考虑并发写入性能,4核8线程机器,io密集型线程数取12;分片数应大于12才能充分发挥多线程优势

流量大约1000*4.5KB=4MB,12个线程大约50MB,如果库IO性能承压可分库

 

4 分表不需要考虑历史数据重分片,所有取模的数字可以不用2的次方

 

posted on 2025-04-30 23:24  silyvin  阅读(13)  评论(0)    收藏  举报