网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.Oracle数据库连接池下如何跟踪终.
.SQLPlus命令使用指南(三).
.ORACLE WEBDB Q 与 A.
.Oracle 9i 数据库设计指引全集(.
.使用Text_IO实现EXCEL报表的PLL程.
.网格技术的构架、特点及其管理.
.在Oracle iAS 10g中创建Report S.
.创建Bitmap_Join_Indexes中的约束.
.在UNIX环境下创建第二个数据库实.
.Oracle优化的五个方面.
.甲骨文扩大合作伙伴网 推新Oracl.
.Oracle的SQL语句执行效率问题查找.
.pl/sql developer工具几点妙用.
.RMAN 初学者指南.
.ORACLE SQL性能优化系列 (八).
.全文索引查询模板的使用.
.oracle安装问题(小菜问题).
.编写叙述程式 (Scripts): .BAT 档.
.如何使用Oracle的Decode函数进行.
.研究生管理信息系统的开发流程.

在复杂应用环境下监控 ORACLE 数据库性能(1)

发表日期:2008-2-9


前言 在单一的应用环境或业务相对简单的系统下,系统性能问题,瓶颈所在往往是不言自明,解决问题的前提—— 定位问题是比较轻易解决的, 但在一个复杂的应用环境下, 各应用系统对系统资源往往是一种共享和竞争的关系, 而且应用系统之间也可能存在着共生或制约的关系, 资源利益的均衡往往是此消彼长, 而这种环境下的应用系统一旦出现资源竞争,系统的瓶颈往往难以断定,甚至会发生不同应用设计人员之间互相推诿责任的扯皮现象,本文仅就此问题对Linux 平台下各应用系统对Oracle 数据库的使用情况作一探讨, ORACLE 数据库的 TUNING 不是一个可以一言以蔽的主题, 本文无意概全,内容仅涉及问题的定位及各应用对数据库资源的共享与竞争问题。 本文试验及问题取证的环境 RedHat6.1 Web server(Apache1.3.9+PHP4.0)+Client/Server(Pro*C) 之 Server 端 RedHat6.2 + Oracle8.1.6.1.0 RedHat7.1 Web server(Apache1.3.20+PHP4.06) + Oracle8.1.7.0.0 为方便问题的讨论,应用系统已做简化,竞争方仅包括一个 Pro*C 的 daemon 程序作为 C/S 模式的服务端,和由 Apache+PHP 所支持的 WEB 网站业务。 1. 单个 SQL 语句的处理 首先,最简单的情况莫过于单个 SQL 语句的分析,SQL 语句的优化也是数据库优化的一个最直接最立竿见影的因素。 SQL 语句的性能监控从监控工具来说大致可分为由高级语言提供和由 ORACLE 本身提供,高级语言以典型的应用 C 语言和 WEB 开发语言 PHP 为例,C 语言中可以用 gettimeofday 函数来在某一数据库操作之前和之后分别获取一个时间值,将两个时间值之差做为衡量该数据库操作的效率,在 PHP 中,也可以用 gettimeofday, 操作方法当然与 C 语言中有所不同。 当然,PHP 中也有其它一些函数可以达到同样的时间精度,关于时间精度的考虑,不能简单以大小衡量微秒级的时间数值,因为时钟中断的时间间隔从根本上决定了时间计算所能达到的精度,此外,操作系统本身对进程的时间片分配,及进程切换的开销等因素也在一定程度上影响时间数据的意义。 所以,以下时间的计算最理想的情况是对同一操作在尽可能避免缓存的情况下进行多次的循环操作,取总的时间值加以平均,从而得到比较接近真实情况的时间值。 C 语言的例子 #define TV_START 0 #define TV_END 1 int how_long(int cmd, char *res); strUCt CMD_TIME{ int times; /* times occured within specified package number */ struct timeval time; /* total time consumed by the cmd */ }; void foo() { int id; how_long(TV_START, NULL); EXEC SQL WHENEVER SQLERROR CONTINUE; EXEC SQL WHENEVER NOT FOUND CONTINUE; EXEC SQL select user_id into :id from users where name='slimzhao';2; how_long(TV_END, time_consume); puts(time_consume); } int how_long(int cmd, char *res) /* return value: -1 error, 0 sucess,res: 20 bytes is enough */ { static struct timeval before, after; if(cmd == TV_START) { gettimeofday(&before, NULL); return 0; } else if(cmd == TV_END) { gettimeofday(&after, NULL); if(res) { if(after.tv_usec > before.tv_usec) { sprintf(res, "%ld %ld", after.tv_sec - before.tv_sec, after.tv_usec - before.tv_usec); } else { sprintf(res, "%ld %ld",
after.tv_sec - before.tv_sec - 1, 1000000 + after.tv_usec - before.tv_usec); } } return 0; } else { return -1; } } 前言 在单一的应用环境或业务相对简单的系统下,系统性能问题,瓶颈所在往往是不言自明,解决问题的前提—— 定位问题是比较轻易解决的, 但在一个复杂的应用环境下, 各应用系统对系统资源往往是一种共享和竞争的关系, 而且应用系统之间也可能存在着共生或制约的关系, 资源利益的均衡往往是此消彼长, 而这种环境下的应用系统一旦出现资源竞争,系统的瓶颈往往难以断定,甚至会发生不同应用设计人员之间互相推诿责任的扯皮现象,本文仅就此问题对Linux 平台下各应用系统对ORACLE 数据库的使用情况作一探讨, ORACLE 数据库的 TUNING 不是一个可以一言以蔽的主题, 本文无意概全,内容仅涉及问题的定位及各应用对数据库资源的共享与竞争问题。 本文试验及问题取证的环境 RedHat6.1 Web server(Apache1.3.9+PHP4.0)+Client/Server(Pro*C) 之 Server 端 RedHat6.2 + Oracle8.1.6.1.0 RedHat7.1 Web server(Apache1.3.20+PHP4.06) + Oracle8.1.7.0.0 为方便问题的讨论,应用系统已做简化,竞争方仅包括一个 Pro*C 的 daemon 程序作为 C/S 模式的服务端,和由 Apache+PHP 所支持的 WEB 网站业务。 1. 单个 SQL 语句的处理 首先,最简单的情况莫过于单个 SQL 语句的分析,SQL 语句的优化也是数据库优化的一个最直接最立竿见影的因素。 SQL 语句的性能监控从监控工具来说大致可分为由高级语言提供和由 ORACLE 本身提供,高级语言以典型的应用 C 语言和 WEB 开发语言 PHP 为例,C 语言中可以用 gettimeofday 函数来在某一数据库操作之前和之后分别获取一个时间值,将两个时间值之差做为衡量该数据库操作的效率,在 PHP 中,也可以用 gettimeofday, 操作方法当然与 C 语言中有所不同。 当然,PHP 中也有其它一些函数可以达到同样的时间精度,关于时间精度的考虑,不能简单以大小衡量微秒级的时间数值,因为时钟中断的时间间隔从根本上决定了时间计算所能达到的精度,此外,操作系统本身对进程的时间片分配,及进程切换的开销等因素也在一定程度上影响时间数据的意义。 所以,以下时间的计算最理想的情况是对同一操作在尽可能避免缓存的情况下进行多次的循环操作,取总的时间值加以平均,从而得到比较接近真实情况的时间值。 C 语言的例子 #define TV_START 0 #define TV_END 1 int how_long(int cmd, char *res); struct CMD_TIME{ int times; /* times occured within specified package number */ struct timeval time; /* total time consumed by the cmd */ }; void foo() { int id; how_long(TV_START, NULL); EXEC SQL WHENEVER SQLERROR CONTINUE; EXEC SQL WHENEVER NOT FOUND CONTINUE; EXEC SQL select user_id into :id from users where name='slimzhao';2; how_long(TV_END, time_consume); puts(time_consume); } int how_long(int cmd, char *res) /* return value: -1 error, 0 sucess,res: 20 bytes is enough */ { static struct timeval before, after; if(cmd == TV_START) { gettimeofday(&before, NULL); return 0; } else if(cmd == TV_END) { gettimeofday(&after, NULL); if(res) { if(after.tv_usec > before.tv_usec) { sprintf(res, "%ld %ld", after.tv_sec - before.tv_sec, after.tv_usec - before.tv_usec); } else { sprintf(res, "%ld %ld", after.tv_sec - before.tv_sec - 1, 1000000 + after.tv_usec - before.tv_usec); } } return 0; } else { return -1; } } 前言 在单一的应用环境或业务相对简单的系统下,系统性能问题,瓶颈所在往往是不言自明,解决问题的前提—— 定位问题是比较轻易解决的, 但在一个复杂的应用环境下, 各应用系统对系统资源往往是一种共享和竞争的关系, 而且应用系统之间也可能存在着共生或制约的关系, 资源利益的均衡往往是此消彼长, 而这种环境下的应用系统一旦出现资源竞争,系统的瓶颈往往难以断定,甚至会发生不同应用设计人员之间互相推诿责任的扯皮现象,本文仅就此问题对Linux 平台下各应用系统对ORACLE 数据库的使用情况作一探讨, ORACLE 数据库的 TUNING 不是一个可以一言以蔽的主题, 本文无意概全,内容仅涉及问题的定位及各应用对数据库资源的共享与竞争问题。
本文试验及问题取证的环境 RedHat6.1 Web server(Apache1.3.9+PHP4.0)+Client/Server(Pro*C) 之 Server 端 RedHat6.2 + Oracle8.1.6.1.0 RedHat7.1 Web server(Apache1.3.20+PHP4.06) + Oracle8.1.7.0.0 为方便问题的讨论,应用系统已做简化,竞争方仅包括一个 Pro*C 的 daemon 程序作为 C/S 模式的服务端,和由 Apache+PHP 所支持的 WEB 网站业务。 1. 单个 SQL 语句的处理 首先,最简单的情况莫过于单个 SQL 语句的分析,SQL 语句的优化也是数据库优化的一个最直接最立竿见影的因素。 SQL 语句的性能监控从监控工具来说大致可分为由高级语言提供和由 ORACLE 本身提供,高级语言以典型的应用 C 语言和 WEB 开发语言 PHP 为例,C 语言中可以用 gettimeofday 函数来在某一数据库操作之前和之后分别获取一个时间值,将两个时间值之差做为衡量该数据库操作的效率,在 PHP 中,也可以用 gettimeofday, 操作方法当然与 C 语言中有所不同。 当然,PHP 中也有其它一些函数可以达到同样的时间精度,关于时间精度的考虑,不能简单以大小衡量微秒级的时间数值,因为时钟中断的时间间隔从根本上决定了时间计算所能达到的精度,此外,操作系统本身对进程的时间片分配,及进程切换的开销等因素也在一定程度上影响时间数据的意义。 所以,以下时间的计算最理想的情况是对同一操作在尽可能避免缓存的情况下进行多次的循环操作,取总的时间值加以平均,从而得到比较接近真实情况的时间值。 C 语言的例子 #define TV_START 0 #define TV_END 1 int how_long(int cmd, char *res); struct CMD_TIME{ int times; /* times occured within specified package number */ struct timeval time; /* total time consumed by the cmd */ }; void foo() { int id; how_long(TV_START, NULL); EXEC SQL WHENEVER SQLERROR CONTINUE; EXEC SQL WHENEVER NOT FOUND CONTINUE; EXEC SQL select user_id into :id from users where name='slimzhao';2; how_long(TV_END, time_consume); puts(time_consume); } int how_long(int cmd, char *res) /* return value: -1 error, 0 sucess,res: 20 bytes is enough */ { static struct timeval before, after; if(cmd == TV_START) { gettimeofday(&before, NULL); return 0; } else if(cmd == TV_END) { gettimeofday(&after, NULL); if(res) { if(after.tv_usec > before.tv_usec) { sprintf(res, "%ld %ld", after.tv_sec - before.tv_sec, after.tv_usec - before.tv_usec); } else { sprintf(res, "%ld %ld", after.tv_sec - before.tv_sec - 1, 1000000 + after.tv_usec - before.tv_usec); } } return 0; } else { return -1; } } 前言 在单一的应用环境或业务相对简单的系统下,系统性能问题,瓶颈所在往往是不言自明,解决问题的前提—— 定位问题是比较轻易解决的, 但在一个复杂的应用环境下, 各应用系统对系统资源往往是一种共享和竞争的关系, 而且应用系统之间也可能存在着共生或制约的关系, 资源利益的均衡往往是此消彼长, 而这种环境下的应用系统一旦出现资源竞争,系统的瓶颈往往难以断定,甚至会发生不同应用设计人员之间互相推诿责任的扯皮现象,本文仅就此问题对Linux 平台下各应用系统对ORACLE 数据库的使用情况作一探讨, ORACLE 数据库的 TUNING 不是一个可以一言以蔽的主题, 本文无意概全,内容仅涉及问题的定位及各应用对数据库资源的共享与竞争问题。 本文试验及问题取证的环境 RedHat6.1 Web server(Apache1.3.9+PHP4.0)+Client/Server(Pro*C) 之 Server 端 RedHat6.2 + Oracle8.1.6.1.0 RedHat7.1 Web server(Apache1.3.20+PHP4.06) + Oracle8.1.7.0.0 为方便问题的讨论,应用系统已做简化,竞争方仅包括一个 Pro*C 的 daemon 程序作为 C/S 模式的服务端,和由 Apache+PHP 所支持的 WEB 网站业务。
1. 单个 SQL 语句的处理 首先,最简单的情况莫过于单个 SQL 语句的分析,SQL 语句的优化也是数据库优化的一个最直接最立竿见影的因素。 SQL 语句的性能监控从监控工具来说大致可分为由高级语言提供和由 ORACLE 本身提供,高级语言以典型的应用 C 语言和 WEB 开发语言 PHP 为例,C 语言中可以用 gettimeofday 函数来在某一数据库操作之前和之后分别获取一个时间值,将两个时间值之差做为衡量该数据库操作的效率,在 PHP 中,也可以用 gettimeofday, 操作方法当然与 C 语言中有所不同。 当然,PHP 中也有其它一些函数可以达到同样的时间精度,关于时间精度的考虑,不能简单以大小衡量微秒级的时间数值,因为时钟中断的时间间隔从根本上决定了时间计算所能达到的精度,此外,操作系统本身对进程的时间片分配,及进程切换的开销等因素也在一定程度上影响时间数据的意义。 所以,以下时间的计算最理想的情况是对同一操作在尽可能避免缓存的情况下进行多次的循环操作,取总的时间值加以平均,从而得到比较接近真实情况的时间值。 C 语言的例子 #define TV_START 0 #define TV_END 1 int how_long(int cmd, char *res); struct CMD_TIME{ int times; /* times occured within specified package number */ struct timeval time; /* total time consumed by the cmd */ }; void foo() { int id; how_long(TV_START, NULL); EXEC SQL WHENEVER SQLERROR CONTINUE; EXEC SQL WHENEVER NOT FOUND CONTINUE; EXEC SQL select user_id into :id from users where name='slimzhao';2; how_long(TV_END, time_consume); puts(time_consume); } int how_long(int cmd, char *res) /* return value: -1 error, 0 sucess,res: 20 bytes is enough */ { static struct timeval before, after; if(cmd == TV_START) { gettimeofday(&before, NULL); return 0; } else if(cmd == TV_END) { gettimeofday(&after, NULL); if(res) { if(after.tv_usec > before.tv_usec) { sprintf(res, "%ld %ld", after.tv_sec - before.tv_sec, after.tv_usec - before.tv_usec); } else { sprintf(res, "%ld %ld", after.tv_sec - before.tv_sec - 1, 1000000 + after.tv_usec - before.tv_usec); } } return 0; } else { return -1; } }
上一篇:SQL语句性能调整(1) 人气:638
下一篇:在Windows 2000下优化Oracle9i性能(1) 人气:979
浏览全部Oracle教程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐