Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1634416
  • 博文数量: 201
  • 博客积分: 2812
  • 博客等级: 少校
  • 技术积分: 3029
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-18 18:28
个人简介

从事数据库工作多年,目前看好分布式NeSQL/HTAP数据库在企业客户市场的发展。未来的主要方向是——致力于 NewSQL/HTAP 数据库的推广普及。

文章存档

2016年(1)

2015年(8)

2014年(23)

2013年(50)

2012年(32)

2011年(87)

分类: Sybase

2011-05-17 13:47:58

   Sybase IQ 提供了很多系统存储过程,这些存储过程一般以sp_iq开头,例如sp_iqtable、sp_iqcolumn、sp_iqindex、sp_iqdbspace、sp_iqfile等等。通过使用这些存储过程,数据库管理员或者应用开发人员(需要DBA授予相应存储过程的执行权限)可以获得数据库、dbspaces、数据库对象的相关信息。
   当IQ数据库中表的个数不太多的时候,一些系统存储过程执行速度还是比较快的。但是当库中表的数量较多时,有些系统存储过程的执行速度会比较慢。下面的将描述这些存储过程,并给出一些相关建议。
   1. sp_iqtable
      如果在表的数量比较多的数据库(根据我的测试,几千个表或是几万个表可以认为是比较多的表)中执行 sp_iqtable(不带任何参数),那么速度会比较慢。在我的一个测试环境中(有2500张表),这个存储过程执行完大约需要30秒。
      建议:
      (1) 如果可能,最好在执行sp_iqtable时指定参数,例如指定表名:
           sp_iqtable 'tpch_user.lineitem'或是
           select * from sp_iqtable('tpch_user.lineitem')
        上面的这两个用法当表数量较多的时候执行起来任然比较快,在我的测试环境中执行只需要大
        约0.3秒。
 
      (2) 执行select count(*) from sp_iqtable() 这种用法是可以的,当表的数量比较多时速度仍然
          比较快。
  
   2. sp_iqcolumn
      我的一个测试环境中(有2500张表),执行sp_iqcolumn 'lineitem' 大约需要5秒。而表的个数
   比较少时(不到10个),执行同样的存储过程只需要大约0.1秒。
      建议:
          (1) 这个存储过程还可以,虽然当表的数量较多时变慢了,但是还可以接受。
          (2) 在查看某个表的定义的列信息时,我们经常会使用它。只是需要做好准备,当库中的表个
          数比较多时,执行的会慢一些。
 
   3. sp_iqhelp
      我的一个测试环境中(有2500张表),执行 sp_iqhelp 'lineitem' 大约需要116秒。而表的个数
   比较少时(不到10个),执行同样的存储过程只需要大约2.5秒。
      建议:
          (1) 当表的个数较多时,这个存储过程执行比较慢,慎用这个存储过程!
         
   4. sp_iqdbspaceinfo
      我的一个测试环境中(有2500张表),执行sp_iqdbspaceinfo 'TPCH_USER_MAIN'或者select owner,object_name from sp_iqdbspaceinfo('TPCH_USER_MAIN',NULL,NULL,'table')大约都需要213秒。
      建议:
          (1) 如果可能最好不要使用上面的方法执行存储过程,如果想通过sp_iqdbspaceinfo存储过程
          获得某个dbspace上有哪些表,不要使用上面的方法,而是使用如下访问系统表的方法:
             select creator,tname 
             from SYSCATALOG
             where dbspacename = 'TPCH_USER_MAIN' and tabletype='TABLE';
 
          (2) 当表的个数较多时,为存储过程指定尽可能多的参数可以提高速度,例如:
              sp_iqdbspaceinfo 'TPCH_USER_MAIN','tpch_user','lineitem'
              以这种方式执行时只有0.6秒左右!
 
   5. sp_iqdbspaceobjectinfo
      我的一个测试环境中(有2500张表),执行sp_iqdbspaceobjectinfo 'TPCH_USER_MAIN'或者select owner,object_name from sp_iqdbspaceobjectinfo('TPCH_USER_MAIN',NULL,NULL,'table')与上面所说的sp_iqdbspaceinfo情况类似,也比较慢。这两个方式大约都需要115秒。
      建议:
          与sp_iqdbspaceinfo相同!
 
    
阅读(3375) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~