<Oracle优化新常态>第三章 三大配置
原创 小凡仙 海鲨数据库架构师
收录于话题
#Oracle优化新常态
12个
祖仙教
祖仙的神话
祖仙教
前期节要
<Oracle优化新常态>第一章
《Oracle优化新常态》第二章强拆(1)
《Oracle优化新常态》第二章强拆(2)
这张图是我们第二章进行的强拆三层空间的方法图。
本章不是再讲拆分,当为了加强大家的印象,每次都会贴本图。
今天我们将重要的三大配置,分别应用程序端,系统端,数据库端。
因为这三大配置,经常导致性能问题,而且很重要的问题!
第一大配置 应用程序连接池配置
因为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操作!
苹果手机用户打赏区
理科精华
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私网修改错了咋办
只有数据文件情况下恢复数据库