`

perl 时间性能分析

    博客分类:
  • perl
 
阅读更多
项目中有个组件是用perl语言编写,最近该组件有个新需求要开发,学习代码的过程中发现现有代码连数据库的方式是用sqlplus连接oracle,将其数据生成到文本文件,再利用读文件的方式读入到内存数据结构中. 这种方式虽然能解决问题,如果改成直连数据库,就可以不用文本文件中转了,性能是否也会提升?
让我们来对比下, 以下代码分成两块 if块里的内容是直连,else块里的内容是sqlplus方式.
数据量是60W条左右.


#!/usr/bin/perl
use DBI;
my $now1 = time;

if(0) {
	$dbname="sid";
	$user="user";
	$passwd="password";
	$dbh="";
	$dbh = DBI->connect("dbi:Oracle:$dbname",$user,$passwd) or die "can't connect to
	database ". DBI-errstr;
	#连接数据库
	$sth=$dbh->prepare("select * from dba_source");
	$sth->execute;
	#执行sql语句
	while (@recs=$sth->fetchrow_array) {
		#读取记录数据
		print $recs[0].":".$recs[1].":".$recs[2]."\n";
	}
	#断开连接 
	$dbh->disconnect;
}
else {
	system "sqlplus", "system/orcl\@ORCL", "\@zsql.sql";
	my $dbdata = "C:/Perl/bin/test/dbout.txt";
	open(IN, $dbdata);

	while(<IN>) {
		chomp;
		my $oneLine = $_;
		print "oneLine:$oneLine\n";
	}
}

my $now2 = time;
my $diff = $now2 - $now1;
print "time cost:$diff s\n";



oracle直连:
第5行的条件改成1,运行3次,耗时分别为 58s, 58s, 50s.
sqlplus连接:
第5行的条件改成0,运行3次,耗时分别为 260s, 209s, 147s.

可见,虽然sqlplus连接第三次运行的耗时在不断减少,但不可否认,直连比sqlplus方式至少快1倍.
通过加上-d:NYTProf运行,并生成html后,
perl -d:NYTProf z1.pl
nytprofhtml nytprof.out


我们可以看到sqlplus语句的运行时间是27.3s,而直连时只消耗了375ms.



细心的读者可能会发现sqlplus连接时耗时从260->209->147,耗时减少明显,那到底是sql数据被缓存还是perl自身的优化呢? 通过对比两次sqlplus运行的prof信息,我们可以看到print语句运行时间从171s降低到了41s, 看来是perl内部对print做了些优化.





  • 大小: 26.7 KB
  • 大小: 31.8 KB
分享到:
评论

相关推荐

    perl gui 日志分析工具

    Perl GUI日志分析工具是一款基于Perl编程语言开发的图形用户界面应用,专为解析和分析日志文件设计。它能够帮助用户快速理解日志数据,提取关键信息,从而进行故障排查、性能监控或数据分析。这款工具包含源码,使得...

    perl gui 日志分析工具 附源码

    3. **统计分析**:工具会自动统计日志中的各种信息,如错误次数、请求频率、响应时间等,并以图表形式展示,便于快速理解和识别问题。 4. **搜索与高亮**:用户可以搜索特定字符串或模式,并将匹配的行高亮显示,...

    PERL编写的服务器响应时间(ping)测试

    标题 "PERL编写的服务器响应时间(ping)测试" 涉及到的是使用Perl编程语言来实现一个功能,该功能可以测量服务器的响应时间,并将结果以图形化的HTML文件展示出来。Perl是一种通用的、解释型的脚本语言,特别适合...

    practical mod_perl

    此外,mod_perl的性能监控和调优也是重要内容,包括日志分析、性能基准测试和资源管理。 除了基本功能,mod_perl还提供了一系列高级特性,如Apache::Registry、Apache::ASP等,它们使得开发人员能够更方便地实现MVC...

    linux 下安装perl的详细过程

    这一步可能会花费较长时间,取决于系统的性能。 ```bash # 编译Perl源代码 make # 测试编译结果 make test ``` 在编译过程中,如果出现任何错误或警告,需要仔细检查并解决这些问题。`make test`命令可以帮助验证...

    advanced perl

    总结起来,高级Perl技术培训涵盖了Perl语言的多个高级方面,包括最新的Perl5.10版本特性、测试方法(包括代码覆盖分析)、数据库访问、性能分析与基准测试、面向对象编程、以及使用Moose库和Catalyst框架的现代Perl...

    最新perl中文教程

    Perl最初由Larry Wall于1987年设计,目的是为了文本处理和系统管理,但随着时间的发展,它已广泛应用于网络编程、图形处理、数据库接口和各种自动化任务。 "Perl语言入门.pdf"可能包含Perl的基础语法,例如变量声明...

    系统管理的Perl Scripts

    通过正则表达式,Perl可以轻松地对日志文件进行分析,查找特定模式,甚至进行数据提取和转换。例如,`grep`命令可以用来快速过滤日志信息,而`awk`的功能在Perl中可以通过更直观的方式实现,使得处理复杂逻辑变得...

    Higher order perl programming

    - **作用域与持续时间**: 解释了Perl中作用域与持续时间的区别,这是理解变量生命周期的关键。 - **错误处理**: 提供了最佳实践,帮助程序员有效地处理程序中的错误情况。 - **代码复用**: 讨论了如何编写可重用的...

    推荐一篇好文章:关于利用perl 脚本产生状态机的verilog代码和DC 脚本的

    此外,`fsm_perl`还能够自动生成配套的Synopsys Design Compiler脚本,这些脚本可以用于合成、比较每个合成实现的面积和时序性能。 #### 设计流程 图1展示了基本的`fsm_perl`设计流程: 1. 使用任何文本编辑器...

    Perl专家编程

    - **信号处理和异步I/O**:Perl可以处理操作系统发出的信号,并支持非阻塞I/O,这对于编写高性能的网络服务器或长时间运行的守护进程非常有用。 - **多线程编程**:Perl具有内置的多线程支持,可以利用多核处理器的...

    Perl CGI 轻松进阶 PDF

    7. **优化和性能**:随着网站流量的增长,优化CGI程序以减少响应时间和提高服务器效率变得尤为重要。这包括缓存策略、减少不必要的数据库查询、使用高效的算法等。 8. **Perl模块的使用**:Perl拥有丰富的模块生态...

    Perl语言在电路设计中的应用

    此外,Perl还可以用来生成测试案例来验证数据保持时间(Data Hold Time),即数据在输出后需要保持稳定的时间长度。这对于确保整个系统的稳定运行至关重要。 #### 四、实例分析 假设我们需要为一款SRAM芯片编写...

    perl dev kit 8.2.1 for linux-64bit

    5. **性能分析**:通过集成的性能分析工具,开发者可以分析代码的运行时间和内存使用情况,优化代码性能。 6. **源码分析**:PDK提供了源码分析工具,可以帮助开发者理解代码结构,查找潜在的代码异味或不良编程...

    Intermediate.Perl(chm + pdf )

    - `Gettext`库的使用,实现程序的本地化,包括消息翻译和日期/时间格式化。 9. **性能优化** - 代码审查技巧,找出性能瓶颈并进行优化。 - 使用` Benchmark`模块进行性能测试,以及如何避免不必要的计算和数据...

    生物信息学编程用书perl

    - **7.5 分析DNA序列**:讲解如何使用Perl进行DNA序列的统计分析。 - **7.6 练习题**:提供练习题加深理解。 - **第8章:遗传密码** - **8.1 哈希表**:介绍Perl中的哈希数据结构及其应用。 - **8.2 数据结构与...

    MySQLTuner,一个用Perl编写的脚本,它允许你快速审查MySQL安装情况,并进行调整以提高性能和稳定性

    这个工具由Perl语言编写,其主要目的是通过分析MySQL服务器的当前配置和运行状态,帮助管理员识别潜在的性能瓶颈,并提供针对性的调整建议,以提升数据库的性能和稳定性。 MySQLTuner的工作原理是通过检查一系列...

    Perl Debugged-Peter J. Scott

    4. **性能优化**:分析和识别性能瓶颈,学习如何利用Perl的性能分析工具进行优化。 5. **编程范式**:提倡防御性编程,预防错误的发生,以及编写可读性、可维护性更强的代码。 6. **错误处理和异常处理**:理解...

Global site tag (gtag.js) - Google Analytics