今天做了一些测试和实验,主要是想了解Oracle在我现有的测试环境下能达到多大的并发,询问师傅后,师傅说测试工具自己写,也一并介绍了两款软件,Orion和Loadrunner,后者是收费的。于是,自己写好了。
下午调试好数据库后,开始进行实验。首先看了相应的文档,然后活跃利用两个动态性能视图,v$session和v$process,v$session在10g和11g都加上了很多性能方面的字段,对收集数据来说v$session越来越方便了,不过今天主要测试的还是系统并发,连接数之间的一些压力测试。测试环境16个Inter Xeon 4核CPU,64G内存的服务器,Oracle 11g。OK,用Java写了一个连接数据库操作(如果我能在实习之前把Perl学完,那该多好啊,后面就能简化很多工作)。代码很简单,就是一个Connection 数组,长度为150,一个for循环执行150次,每次循环就是一个Connection对象连接数据库,简单的说就是一次循环一个连接。好的,第一次执行JAVA程序就爆掉了,不断select count(*) from v$session;还不到150个session就出现上限了,于是JAVA程序返回错误,已经连接进来的连接开始销毁。Oracle初始化参数Processes设置150,然后监控select count(*)from v$process,看到149后爆掉。至此,得到第一个dedicated server方式的瓶颈——processes参数。原先是想设置Shared server试试的,后询问黄忠,从黄忠处得知这台测试机大概可以设置2000左右processes,并且机子许可情况下尽量不要用shared server。
遂继续测试,processes设置1500,JAVA中Connection数组增长到1500,循环1200次,JAVA程序再次爆掉,还是不断select count(*) from v$process;才645,我去。第二次瓶颈,于是以为是PGA不够,遂设置PGA的目标值为1G,继续测试,还是645爆掉。查看v$pgastat看PGA的使用情况,PGA才使用600M左右,百思不得其解,求问师傅浔阳。从浔阳第一句回答就是反问JAVA的内存是否遇到瓶颈,或者其他资源。遂继续测试,得到JAVA程序中for循环次数上限值为618时程序不会接收到错误,在此之下再开一个sqlplus,连接成功(如果是数据库或者系统资源的问题,在登录时会产生错误提示,这个在processes参数为150时,已有149个oracle进程的情况下再登录sqlplus就会提示错误登录失败),果真是JAVA的问题,于是分两次执行同一个JAVA程序,进程到达了1250+,PGA超过了设定目标值,使用达到了1.3G左右,从文档中也可以得知,PGA的目标值只是一个目标,提供PGA的自动管理,在实习条件允许的情况下就算超过目标值也不会暂时造成PGA的瓶颈。种种原因今天的测试与学习先暂放一个段落等待明天继续,随后补充一些相关的知识来更完善测试。
小总结为,并发连接数与processes参数有关,而这个processes参数则与服务器的一些硬件的性能相关,包括内存等。并发连接数还与PGA有关。今天的测试还未达到PGA的瓶颈,不过PGA的瓶颈据我目前猜测是否也与系统内存相关,等待测试。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22232708/viewspace-703099/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/22232708/viewspace-703099/