2008年3月18日
#
某天,停车,图方便随便停在路边,抱怨了两句,ld随即顶回一句:“只要有边就能停”
一直认为lob类型的性能要好过long,但是之前只了解到long的种种限制,oracle也是不推荐使用long类型,这几天由于一个项目问题,产品里面一个表字段用了long类型,分析下来操作long的时候,性能有所影响,想把它改成lob,就简单验证了一下
首先创建两个测试表:
create table test_long (a int primary key,b long);
create table test_clob (a int primary key,b clob);
用附件java代码,往两个表里面各插入100条数据,保证插入数据是一样的,lob字段长度为10k(如果小于4k,oracle可以把它保存到到表内,不会存储在表外,性能没有问题,这个我基本确定,而且我们应用中这个字段经常会超过4k)。
做一个简单查询对比一下:
SQL> set autotrace traceonly;
SQL> select * from test_clob where a=1;
统计信息
----------------------------------------------------------
331 recursive calls
0 db block gets
69 consistent gets
4 physical reads
0 redo size
1278 bytes sent via SQL*Net to client
837 bytes received via SQL*Net from client
5 SQL*Net roundtrips to/from client
12 sorts (memory)
0 sorts (disk)
1 rows processed
SQL> select * from test_long where a=1;
统计信息
----------------------------------------------------------
236 recursive calls
0 db block gets
43 consistent gets
0 physical reads
0 redo size
675 bytes sent via SQL*Net to client
531 bytes received via SQL*Net from client
3 SQL*Net roundtrips to/from client
5 sorts (memory)
0 sorts (disk)
1 rows processed
对比一下,long开销比lob小,当然你可以把lob字段启用缓存,把4次物理读去掉,但还是多了(73-43)次逻辑读,update也试了一下,lob产生的redo比long大,就不列出来了,有兴趣的可以自己试试
测试下来,看来之前的认识不对,不确定的东西最好还是动手试试,当然对于新应用,还是不建议用long,毕竟oracle已经废弃它了。
testClobLong.java
用远程桌面连接登入服务器的时候,你可能会经常碰到下面的情况:
也就是说,服务器的连接数已经满了,很多时候,可能是别人异常断开连接,导致连接没有释放,一般这时候你需要去机房登入服务器断开连接,其实windows提供了tsdiscon命令来做这事情
有时候,我们可能希望看到lr的出错页面:比如lr出错,但是后台服务器没有错误日志,这时候,我们希望能看到错误页面的内容来判断问题出在什么地方,但是lr没有提供类似的功能
我们可以通过一种变通的办法来实现:
首先找到你出错的页面,保存该页面到参数里面:
web_set_max_html_param_len(“2048”);
web_reg_save_param(“FILED”,”LB=”,”RB=”,”Search=Body”,LAST);
然后输出到日志里面: lr_output_message(”#######################################%s”,lr_eval_string(”{FILED}”));
修改lr run-time的几个设置:
1、Always send messages
2、continue on error (这样才能保证运行lr_output_message)
这样lr会把所有的lr_output_message输出保存到日志文件
当然你不要下载资源文件,否则保存到的就不是html页面了,可能是一个gif :(
最后,结合lr controller的错误信息,定位到出错的vuser id,查看该vuser的log文件就能看到错误页面了
非常有效的一个小技巧,用它解决了一个难缠的问题。
慢慢变味了,一群无聊的人整天盯着别人捐了多少,很奇怪
最近一段时间特别忙,以至于发生地震这么大的事情都没注意到,首都人民不断告诉我被震了也没当回事,昨晚回家打开电视,新闻频道,懵了,坐下来一直看,到晚上2点,满目苍痍,真为处于震中的人揪心,中间鼻子酸了N次,也愤怒了N次(那些恶心人的地方官,难道就不能说点实际的东西吗?)
1、政府反映非常迅速
2、子弟兵真好
2、有一个好总理
3、地方政府不作为,官话套话(被采访的那个什么何彪,真想抽丫的)
4、为什么总是学校?处于地址多发地带的学校和其他公共设施为什么都是豆腐渣
为所有受难的人祈祷!为我们饱受磨难的祖国祈祷!
公司员工捐款20W,尽点绵力
摘要: 这几天测试一个引擎的性能,用一个单表查询的case,测试出来的结果是210tps,cpu也正常,在85%左右,也没怀疑。
后面再重新测试的时候,加上了gc log,用gc分析工具分析了一下gc的吞吐量,发现吞吐量奇低,竟然只有77%左右,很是奇怪,看了一下gc日志,所有都是global gc, 怀疑gc策略有问题,查了一下资料,参考了下面一篇文章:
阅读全文
Sybase ASE有三种锁模式:AllPages,DataPages,DataRows
Sybase的数据有table pages和index pages,最小分配单位为pages,不同的锁模式对于table pages和index pages有不同的表现,具体如下:
Locking Schema | Locks on Index | Locks on Data |
All Pages | Page | Page |
DataPages | Not locked | Page |
DataRows | Not locked | Row |
如上表所示:
1、AllPages锁模式对于并发的限制最高,他对index pages和table pages都加页锁(当页被锁住的时候,页上的所有rows都不能被其他session访问)
2、DataPages对table pages加页锁
3、DataRows:强烈建议用这个锁模式,对于oltp应用,如果用前两种锁模式会导致频繁死锁
另外,DataPages和DataRows对于index pages的控制采用latch方式,一种轻量级的锁机制(熟悉oracle会比较清楚)
对于Sybase ASE来说,锁是非常宝贵的资源,不要长时间持有锁,所以一般我们在写应用的时候尽量减少长事务
另:Sybase ASE缺省的事务隔离级别:Read Committed
一个用户点击就是一个用户请求,一个webservice类似的调用也算一个请求,等等
一个用户在某个时间点上当然只能发起一个用户请求,一个用户请求就是一个并发
我们一般纠缠在同一事物并发还是不同事务并发。
可能在一个时间点上,有100个用户在发送浏览,查询动作,10个用户在下订单,5个用户在做付款动作,你说这个时间点上有多少个并发请求,当然是115个了
衡量一个系统性能主要靠的就是这个吞吐量(tps)
当然我们也非常关心同时100个用户并发下订单的时候系统是否能支撑(这是通常我们大部分人理解的并发),我们会说这是核心业务,我们要得出数据(是否要考虑背景业务呢,呵呵,很难说的清楚,我一般就不考虑)