<Oracle优化新常态>第三章 三大配置

<Oracle优化新常态>第三章 三大配置

原创 小凡仙 海鲨数据库架构师
收录于话题
#Oracle优化新常态
12个
<Oracle优化新常态>第三章 三大配置
祖仙教
祖仙的神话
祖仙教

前期节要
<Oracle优化新常态>第一章
《Oracle优化新常态》第二章强拆(1)
《Oracle优化新常态》第二章强拆(2)

<Oracle优化新常态>第三章 三大配置

这张图是我们第二章进行的强拆三层空间的方法图。
本章不是再讲拆分,当为了加强大家的印象,每次都会贴本图。

今天我们将重要的三大配置,分别应用程序端,系统端,数据库端。
因为这三大配置,经常导致性能问题,而且很重要的问题!

第一大配置 应用程序连接池配置
因为ORACLE链接是进程,每来个链接进来的话,ORACLE后台要生成一个服务进程SERVER PROCESS 提供服务,而系统也要有个客户端进程。
而在WEB应用的今天,大量的,而且是频繁的短链接。就是发生一个WEB请求后,需要操作后台数据库,则需要链接一次数据库。查询完了,立马翻脸不认人。下次要的时候,在狗脸乞讨。

这个时候LINUX 系统需要FORK()函数生成一个进程出来,用完后就销毁!
在以前工厂中这种情况也有,只是比较少,无所谓而已。毕竟一个工厂顶多255台链接,大部分都是长链接,而且就是在早上上班的时候发生登录风暴!

可如今WEB天下,动不动就云ERP,从工厂内部,扩展到全球其他工厂,或者支持异地上班,比如说销售人员,在家工作比如说老板。这样的话需要1千个链接。而且每次都是短时间连一下,连完后就丢丢掉!

这样的情况很显然对数据库所在的LINUX服务器来说,鸭梨山大!AIX 和SORILAS,都跑不掉! 你说升级小型机,还是大型机也是给不了多少力的。

不用说云ERP了,就是工行的WEB网银都很累!工行的客户远远多于全球化的工厂用户。

所以就要配置应用链接池!
JAVA 应用有好多链接池可以玩! TOMCAT也有,。。。。

Proxool是一个Java SQL Driver驱动程序,提供了对你选择的其它类型的驱动程序的连接池封装。可以非常简单的移植到现存的代码中。完全可配置。快速,成熟,健壮。可以透明地为你现存的JDBC驱动程序增加连接池功能。

DBCP (Database Connection Pool)是一个依赖Jakarta commons-pool对象池机制的数据库连接池,Tomcat的数据源使用的就是DBCP。目前 DBCP 有两个版本分别是 1.3 和 1.4。1.3 版本对应的是 JDK 1.4-1.5 和 JDBC 3,而1.4 版本对应 JDK 1.6 和 JDBC 4。因此在选择版本的时候要看看你用的是什么 JDK 版本了,功能上倒是没有什么区别。
(主页:http://commons.apache.org/dbcp/

C3P0是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布,包括了实现jdbc3和jdbc2扩展规范说明的Connection 和Statement 池的DataSources 对象。
(主页:http://sourceforge.net/projects/c3p0/

商业中间件连接池 weblogic的连接池 websphere的连接池

NET IIS 容器也有, 小仙就配过。
string cs =

"server=.;uid=sa;pwd=tcaccp;database=pubs;pooling=true;min pool size=5;max pool size=10"

其中 pooling 表示是否打开连接池,默认为打开,关掉时需要 pooling = false;

min pool size 表示连接池最少保存几个连接对象;

max pool size 表示连接池最多保存几个连接对象。(最大值不能为 0,也不能小于最小值)

配置好以后,通过 SqlConnection con = new SqlConnection(cs); 即可得到一个属于连接池的连接对象。

在做 ASP.Net 程序时,我们会发现,如果网站20分钟不访问,再次访问就会比较慢,这是因为IIS默认的 idle timeout 是20分钟,如果在20分钟内没有一个访问,IIS 将回收应用程序池,回收应用程序池的结果就相当于应用程序被重启,所有原来的全局变量,session, 物理连接都将清空。回收应用程序池后首次访问,相当于前面我们看到的程序启动后第一次访问数据库,连接的建立时间将比较长。所以如果网站在某些时段访问量很少的话,需要考虑 idle timeout 是否设置合理。

PHP 好像没有现成的连接池可以使用,不过PHP经常和MYSQL搭伙过日子,利用MYSQL的内置连接池功能。

链接池注意要点就是 最大链接数和最小链接数,不要太大的差距。而且不要很频繁地释放链接回操作系统!

目前来说链接池对ORACLE来说,有一项功能没有实现,就是尽可能地把同一条相似的语句,分配在同一个链接上。这样就重复利用了SESSION_CURSOR_CACHE的参数。

第二大配置 系统大页内存。

目前的PC服务器基本上都是4GB以上的64系统。AIX和SUNSOARLAS 基本上配置好了大页内存,而LINUX6系列默认都是小页内存。
关于内存可以参考如下
Linux 64 页表,进程内存,大页
Linux_x86_64BIT内存管理与分布
部分SWAP 内存知识

因为系统存在着程序逻辑内存和真实的物理内存的映射关系,而这个关系需要用部分内存来保存起来。
而且是每个进程都需要一部分内存。内存的多少取决于程序使用的逻辑内存量。
虽然内存映射关系进行了4层以上的映射。不过也抵不住程序使用内存的野心。
最终导致内存表的变态的肥肥!

比如说 你有张100MB的数据库表,经过一年的运行和积累达到了1GB。每个回话,也就是每个链接,有个语句,自然是SQL全表扫描该表的语句,扫描1GB。那么该进程需要1GB逻辑内存地址和物理内存地址映射。
假设下,原来100MB需要1MB内存地址来保存映射关系,现在需要10MB了。
比如说我们现在有1500个数据库连接,加上连接池不重用连接线路的话,1500*10MB=14GB内存保存映射关系表!
有点夸张了! 不过我现在有个11.2.0.1 JAVA开发高级人员,觉得自己很牛鸡巴,自己搭建了ORACLE数据库。
结果连接池也没配,大页内存也没有配。 大约230个应用程序连接数,占了3.2GB的映射表(内存表) 系统总共才32GB 。

默认情况下LINUX是4K内存页大小的。 也就是说3.2GB除以4KB,大约有多少个页。我就不算,你可以算算看! 这么多页,CPU需要把它掉入到CPU寄存器中。所以CPU处理这活的话,累死了!

而LINUX 可以开启2MB的大页内存。这样的话CPU也轻松了,页表大小也少了。

第三大配置 数据库内存自动分配!

只从ORACLE开始人性化来,从ORACLE 9I开始,到目前的ORACLE 12C。基本上免除了大家辛苦,而有细致调整各个功能池的大小。现在12C自动完成。
最小分配单位是64MB。

这样的人性化工作,非常适合JAVA开发人员了使用,以前需要专职DBA来完成的工作,现在要么JAVA开发人员搞,要么运维工程师来搞。基本上连上网,照着网络配置下,启动了图形界面后就一路向西去了!

终于不需要DBA了,老子天下第一! 十八武艺样样精通!

很显然做为专业DBA来说,这话就咽不下去了! 那也没办法,咽下去,等你的数据库慢了后,再高价请我吧!! 哈哈。

专业DBA 一来 就PASS掉自动内存调整参数。

设置PGA多少,SGA多少。
SGA 中 DB_CACHE多少, SHARD_POOL多少,LARGE_pool多少,JAVA_POOL,STREAM_POOL多少。剩下的就交给SGA自动调整吧!

具体调多少,要参考上图 OLTP,OLQP,OLAP类型! 单机还是RAC

一般来说OLAP 需要大大的DB_CACHE。 而OLTP SHARD_POOL 就要很多,起码要跟DB_CACHE平分秋色。RAC当中的SHARD_POOL要超过DB_CACHE。

至于PGA+SGA 在整个内存的分配,一般参考80%系统内存! OLTP SGA>PGA 而OLAP PGA=SGA。

另外 数据库系统内存除了装监控代理比如说ZABBIX AGENT 外,禁止装其他应用程序!
比如说OEM或者说EM!

第四配置! 超线程

一般我是禁用掉超线程的。 超线程在PC BIOS 里面禁止。
为什么呢?
因为超线程,不是真的CPU内核,是利用CPU暂时空闲时间,虚拟的内核。
也就是在CPU空闲当中。利用它的空闲做其他的事情。而且当主活回来后,再还给它! 这里面涉及到了上下文切换。切换就需要时间,内存调度嘛!本来主活的数据保留在寄存器,一级缓存,二级缓存,乃至内存中。这下好了,被超线程给赶跑了,再把数据调回来就麻烦了。

所以超线程适合计算类型的应用。至于数据库嘛!大家都懂的,密集型IO操作!

苹果手机用户打赏区
<Oracle优化新常态>第三章 三大配置
理科精华
RAC crs_stat 命令结果完整显示
归档日志比在线日志小
分区表
INDEX肥胖化
OracleDG 备库 STANDBY 日志传输小结
ORACLE索引名称矫情
ASM中的几个概念
抓取性能不错的脚本
RMAN duplicate 方式做个备库
direct path read
共享池内存三维
PGA内存
一个性能优化案例INSERT
SGA内存
Linux 64 页表,进程内存,大页
Linux_x86_64BIT内存管理与分布
部分SWAP 内存知识
理解队列锁
ORACLE闪回之闪回查询
ORACLE 闪回之闪回删除
ORACLE闪回之闪回表
ORACL 闪回功能之闪回数据库
ORACLE 索引全扫描逻辑读
解析过程中的软软解析
ORACLE索引范围扫描逻辑读ARRAY
UNDO
归档日志比在线日志小
RAC 修改 IP
RAC
ASM 再平衡
RAC安装
使用UDEV绑定ASM盘符
网络命名关系图

RAC 修改私有网卡IP
RAC私网修改错了咋办
只有数据文件情况下恢复数据库

猜你喜欢

转载自blog.51cto.com/15057847/2651723