swappiness oracle,SWAPPINESS与连接池,解析

SWAPPINESS是LINUX 系统设置使用SWAP分区的意愿倾向

默认是60,如果倾向多使用SWAP分区可以设置100,反之不倾向使用SWAP分区的话可以设置10.

WAP是UNIX虚拟内存管理的基础架构之一,在WINDOWS上实际也有一个类似的虚拟内存管理机制,就是PAGEFILE.SYS。

主要是使用磁盘空间来模拟内存,或者是说当内存不够的时候使用磁盘空间。

不过现在LINUX为了充分使用物理内存,会把某些进程的内存移到SWAP上。

不过谁的进程都不愿意被移走,所以系统优先移动文件缓存区!

所以这个SWAPPINESS是设置 系统文件缓存和进程的内存优先级别!

anon_prio = swappiness;

file_prio = 200-anon_prio;

anon_prio 叫匿名块,也就是进程的内存. 从上面公式可以看出SWAPPINESS设置大小就是进程优先级别, 越小越不优先,越大越优先. 而文件缓存优先级别反而是200-进程优先级别.

SWAPPINESS设置成0, 并不是关闭进程被SWAP的开关!

不管怎么样,只要内存不足就会SWAP,无论是文件还是进程,都逃不掉的!

为了防止物理内存与SWAP都完全耗尽的情况发生,LINUX还引入了OOM KILLER机制来确保最坏的情况下,确保系统还能最低限度的运行。因为MYSQL是一种单进程多线程的数据库,因此MYSQL服务进程使用的内存会相当大,因此很容易被误杀。OOM KILLER总是找OOM_SCORE比较高的进程下手。

所以选择进程级别的数据库,比如ORACLE 和PG!

不过进程数据库带来个问题,它没有TREACH_CAHE。没有复用的线程连接池。既然没有线程,那么就在应用程序搞个链接池呗!比如C3P0,DBCP等JAVA框架!

连接池的作用是除了链接复用外,主要是解决把短链接优化成长链接。因为链接的建立和连接的释放在LINUX系统里是昂贵操作,低频率连接无感知。而高频链接就是个问题!

连接池初始化多少个链接数呢?才是合适啊?如果数据库的PROCESS设置了3000,是否意味着连接池最大连接数也可以设置3K呢?

连接数意外着是并发数据,同时向数据库获得连接,并向数据库发生QPS请求,或者是TPS请求。对数据库来说是3K并发量!

提高并发量的前提是

第一点 系统有足够资源来支撑。

第二点 就是资源分割合理,减少资源的争用。

并发,并行,多线程其实都是一个概念!

为什么要多线程,并行执行呢?单线程,串行,单发不香吗?其实主要是嫌弃它慢啊,而且系统资源很大的空闲。假如单发很快,就没有必要搞多线程啦!

第三点 单线程,单发,串行足够慢

那么数据库连接池应该设置成多大呢?结果可能会让你惊讶,因为这个问题的正确问法是:

“这个数据库连接池应该设置成多小呢?”

下面这个视频是Oracle Real World Performance Group发布的,请先看完:

http://www.dailymotion.com/video/x2s8uec

视频中对Oracle数据库进行压力测试,9600并发线程进行数据库操作,每两次访问数据库的操作之间sleep 550ms,一开始设置的中间件线程池大小为2048:

2048连接时的性能数据

每个请求要在连接池队列里等待33ms,获得连接后执行SQL需要77ms

此时数据库的等待事件是这个熊样的:

6df122237d79091e41fea9da62fa050d.png

能看到,中间件连接池从2048减半之后,吐吞量没变,但wait事件减少了一半。

接下来,把数据库连接池减到96,并发线程数仍然是9600不变。

96个连接时的性能数据

队列平均等待1ms,执行SQL平均耗时2ms。

wait事件几乎没了,吞吐量上升。

没有调整任何其他东西,仅仅只是缩小了中间件层的数据库连接池,就把请求响应时间从100ms左右缩短到了3ms。

But why?

主要是连接数多了,发生并发争用!主要是违背了前3点其中一点!

连接数设置多小才合适,需要对应用进行压测。你的应用是混合类型,OLTP,OLAP还是啥的?做了读写分离吗?

解析

有硬解析,比如MYSQL

有软件解析,比如PG和ORACLE共享池

有软软解析,比如ORACLE-PGA 游标缓存。

还有无解析,直接在客户端上缓存游标

JAVA MYBATIS 设置语句缓存 CACHE STATEMENT SIZE

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值