Oracle性能调整与优化第三部分(一)

日期: 2008-12-14 作者:Steve Callan翻译:黄永兵 来源:TechTarget中国 英文

  正如在第1和第2部分中提到那样,有几个相对容易的改善性能的步骤你可以采取,这些步骤其中一个涉及到使用自动化工具“指导”你编写SQL语句,有许多生产性能分析或性能调整工具的厂家,在接下来的文章中,我们将对它们中的一个进行考察。

  Quest Software

  许多DBA和开发者使用一个名叫Toad的工具,它出自Quest Software公司,按照Quest Software网站上说法,Toad用户社区大约有500,000数量的用户,Toad的一个特色就是它有能力优化SQL查询,换句话说,Oralce公司还没有占领调整顾问类型工具的市场。

  关于顾问工具你有多种选择,理解它们是做什么的,如果你没有工作在生产或开发环境中你使用它们做什么?可能仅仅是喜欢,即使你处于一个开发环境,但你可能也没有使用到非常大的数据,本文的焦点集中在如何产生大量的数据,我们将介绍Quest Software的另一个产品:DataFactory for Oracle。

  DataFactory

  DataFactory的用途是为多种数据库平台快速创建有意义的测试数据,包括Oracle、DB2、Sybase以及ODBC兼容的数据库,正常情况下,每服务器零售价为595美元,在Quest Software的网站有一个可免费使用30天的版本可下载。

  要获得这个软件(目前是5.5.0版本),你必须用真实的电子邮件地址注册,hotmail和gmail会被拒绝的,一旦你注册成功了,你将收到一封包含密钥的邮件,这个密钥用于解锁应用程序,开始30天的试用。
  
  安装过程是相当简单的,如果你运行了微软的AntiSpyware,你可能会收到一个或多个错误,禁用掉实时保护后重新安装。

  创建辅助对象

  了解应用程序较好的方法是使用它的辅助对象,一般的过程有:

  1、创建一个项目

  2、在方案中创建表

  3、运行脚本载入数据

  不幸的是,在禁用了系统名参考的约束上获取刷新最好的方法是使用内置的辅助对象,使用一个反复的处理方法,可以禁用掉所有约束直到载入脚本运行不出现错误为止,然而,当Quest运行时修复了这个bug时,我可以标识和禁用这个约束。

  启动DataFactory后,你可以选择启动自学教材,关于如何载入自学教材对象的指令(也就是所有的帮助)都在HTML文件中。

  启动自学教材


  帮助系统中的指令规定了使用哪些表,但那是不准确的,下一步我会提到要用到哪些表(总共15个,都是以DF_前缀开头的)。

  要创建辅助对象,安装下列步骤做:

  1、选择工具(Tools)创建辅助对象(Create Tutorial Objects),显示辅助对象创建向导。

  2、从选择连接方法的下拉列表中选择合适的数据库类型。

  3、点击下一步(Next)。

  4、输入连接参数。

  5、点击下一步(Next),显示完成页面。

  6、点击完成(Finish),DataFactory辅助表就创建好了。

  在创建表之前,你应该在数据库中先创建一个单独的方案对象,使用Oracle 10g,我创建了一个quest用户对象/方案(授予它connect和resource权限即可)。

  点击Tools Create Tutorial Objects

  点击Tools Create Tutorial Objects

  辅助设置向导显示它自己的版本和oracle的logo 

  辅助设置向导显示它自己的版本和oracle的logo 

  在完成页显示一列表名

  在完成页显示一列表名

  DataFactory告诉你创建成功了

  DataFactory告诉你创建成功了

  在左边框架中显示了项目文件夹

  在左边框架中显示了项目文件夹

  在主菜单上点击运行按钮(Run),立即报出ORA-02291错误,这是违反了完整性约束的错误提示(某些表上还不止一次),因为在一个外键关联的列上载入的数据没有同时往主表插入对应的数据,几乎所有的约束命名都采取SYS_Cxxxxxx命名结构,意味着它们不是明确的名字。

  报出ORA-02291错误

  为了解决完整性约束问题,你可以禁用掉约束(只要你知道要修改哪个表),下面的查询和ALTER TABLE命令显示识别并禁用有问题的约束:


SQL> select owner, constraint_name, table_name, column_name
2  from all_cons_columns
3  where constraint_name like ‘%9814%’;
OWNER CONSTRAINT_NAME                TABLE_NAME           COLUMN_NAME   
—– —————————— ——————– ————
QUEST SYS_C009814                    DF_ORDERS            CUSTID        
SQL> alter table df_orders
2  disable constraint sys_c009814;
Table altered.
 

  结果(Results)窗口显示你的脚本完全成功执行了,意味着你可以看看究竟创建了些什么。

  结果(Results)窗口显示你的脚本完全成功执行了

  不是一次分析一个表,使用内置的DBMS_STATS(它是Oracle推荐的分析工具包),如果你使用的是Oracle 10g,你应该添加一个WHERE dropped=’NO’条件阻止在显示查询结果时显示被删掉的表。


SQL> execute dbms_stats.gather_schema_stats(‘QUEST’);
PL/SQL procedure successfully completed.
SQL> select table_name, num_rows
2  from user_tables
3  where dropped=’NO’;
TABLE_NAME             NUM_ROWS
——————– ———-
DF_TITLES                   100
DF_MOVIE_CUSTOMER          1100
DF_MOVIE_EMPLOYEE           900
DF_DUMMY                   1100
DF_AUTHORS_TITLES          1100
DF_MOVIE_RENTAL             700
DF_PRODUCTS                 100
DF_MOVIE_TAPE               400
DF_CUSTOMERS               1100
DF_AUTHORS                 1100
DF_MOVIE_DISTRICT          1100
DF_ORDERS                   101
DF_MOVIE_MOVIE              900
DF_ORDERDETAILS             200
DF_MOVIE_STORE              500
15 rows selected.
 

  返回项目或列表,在列表中选择一个表,将会显示它的列和列的数据类型,你可能需要在结果(Results)和子段(Children)之间使用固定按钮功能。

  使用固定按钮功能

  使用DF_MOVIE_CUSTOMER作为一个例子,如何查看它的数据?随机字符串选项刚好准确地用于这里。

  使用DF_MOVIE_CUSTOMER作为一个例子

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

相关推荐