设为首页 加入收藏 网站搜索 繁體中文 中国建站网 — 站长资源平台

INFORMIX FAQ大全

来源本站整理 作者:佚名 时间:2006-8-14 14:19:15 该文得分0

如何加快查询的速度?

Question:为什么在一个有30000条记录并且建立有索引的表进行操作很慢,怎么办?

30000条记录并不是太多,你会感觉有慢不应该是记录数太多的缘故,原因可能是每条记录太长,或者你的机器的性能十分低,不过还是有一些方法可能会对性能有所帮助:

1.更新统计信息(update satistics on tablename),这很容易作,并且有可能会带来性能的提高。

2.删除,然后再重新创建索引。这样作能够增加索引的连续性。但是要求是DBA或者有创建索引的权限。

3.ALTER INDEX idxname TO CLUSTER: 这样作的目的是重新创建表并且通过索引来重新排列记录。结果是强制使记录在逻辑上连续,并且提高物理上的连续性。这样作的代价最大,但是效果最好。但是,一个表中只能有一个cluster index,并且,重新排列记录可能会强迫其他的查询使用其他的索引。作这种工作,你必须要为DBA或者有alter table 的权限。并且请注意,在你运行cluster index的时候,你必须要有足够的空间,因为在为一个表创建cluster index的时候,会拷贝表中所有的记录到一个临时表中,在临时表中进行排序操作,然后会删除原来的表,然后将临时表的名字改为原始表的名字。因此,如果这个表中的数据变化很大,如经常要进行大量的插入/删除的操作,这样作的好处就体现不出来。


应该使用online的mirroring功能吗?

Question:应该使用online的mirroring功能吗?

informix6.0以上的版本开始支持镜像(mirroring),镜像可以将相同的数据复制到多个磁盘上,当一个磁盘坏掉,online可以继续使用镜像磁盘来代替坏掉的磁盘。

一些操作系统(如HP-UX)也提供镜像的功能,还有硬件方式的镜像,三种镜像方式哪一种更好呢?


通常硬件镜像更好。因为它最快,然后是操作系统的镜像,最后才是ONLINE镜像。ONLINE镜像需要作一些逻辑上的运算,用于判断如何处理down掉的chunk。而是使用HP-UX或者硬件上的镜像不会出现这种情况。

HP的逻辑卷管理可以让你以“stripe"的方式将extents以轮转的方式分别存储在多个磁盘上。如果你使用数据分片策略,这也许会/也许不会带来性能的提高。

如果你使用HP-UX的磁盘镜像,在主磁盘繁忙的时候,读盘操作会被转移到镜像盘上,在磁盘负载很重的情况下,这会带来很大的性能提高。


关于NFS?

1.我们可以在远程主机上运行应用程序吗?(如C程序,shell scripts,perl scripts等等)运行的性能和在本地运行同样的程序相比如何?

由于NFS mounts远程主机上的文件系统到你的本地计算机,你可以象存取本地磁盘一样存取远程文件系统。这对性能的影响不大。

2.运行NFS需要什么软件?

只需要NFS和TCP/IP。

3.管理NFS是否困难?

主要的困难来自你必须要维护你的分布式文件的UID和GID必须要同步。使用NIS会使这项工作变得容易一点。


如何使用cron自动进行数据库备份?

echo '\n0' | tbtape -s 1 | head -100 


如何知道一个表存在在哪些dbspace上?

以下是一些sql语句:

SELECT TRUNC(partnum/16777216) dbspace, COUNT(*) tables, 

SUM(nrows) tot_rows, SUM(nrows*rowsize) bytes FROM systables 

WHERE tabtype = 'T' GROUP BY 1 ORDER BY 1; 


如果你在你的数据库中创建一个叫做'dbspaces'的表,然后将onstat -D的输出的dbspace名称放入这个表中,然后你就可以用:

SELECT dbs_name[1,12] dbspace, 

COUNT(*) tables, SUM(nrows) tot_rows, 

SUM(nrows*rowsize) bytes 

FROM systables, dbspaces 

WHERE tabtype = 'T' 

AND dbs_no = trunc(partnum/16777216)

GROUP BY 1 ORDER BY 1; 

输出为:

dbspace tables tot_rows bytes 

mcs_aaaaa 28 51 3715 

mcs_catalog 22 2695 114810 

mcs_eeeee 25 224  45446 

mcs_fffff 32 1412 201445 

mcs_mmmmm 35 165  262599 

mcs_wwwww 28 449  79385


注意:(“byte"仅仅为数据的字节数,不包括索引和其他的开销)


怎样使用“informix”用户和"informix"组?

1.是否应该使用informix帐号来管理数据库,例如:grant/revoke权限,创建/删除表,dbload等等。

2.应该创建一个单独的帐号来作这些事情吗?为什么? 3.是否应该用informix帐号来管理数据库应用程序,并且将所有的用户置于这个组内,?

我们仅仅使用informix帐号来进行DBA的管理工作,而不是用它来做所有的事情,你应该有一个informix帐号和一个informix组,帐号和组都是唯一的。在informix组中只应该有informix一个用户。

我们有一个“应用”帐号,这个帐号是所有的非系统表的属主,并且用它设置所有的权限,拥有所有的资源,数据,和可执行目录和代码。这样做的目的是隔离数据管理和服务器管理两种不同的工作。DBA的功能是独立的,(并且只有一个人可以执行这个工作),如果你的数据库规模很大或者即将变得很大,你会体会到这样作的好处。 如果你脱离这个原则,会出现严重的安全隐患。informix组内的其他用户可以执行INFORMIXDIR目录下的很多应用程序,而这些应用程序你一定不希望由他去执行。所以没有必要去冒险将所有的用户放在informix组中。     

如何知道数据库应用使用CPU的时间

通常在UNIX下面,可以使用time命令来得出一个进程说所占用的CPU的时间:

$ /bin/time test.4ge

real 9.0

user 1.6

sys .14

在这里,1.6+1.4 就是程序test.4ge所消耗的所有的CPU的时间。而“real”在这里不是特别重要。

然而在informix的环境中,time命令忽略了一个重要的方面,sqlturbo(数据库引擎)所使用的CPU时间。而且,如果你在一个应用程序中使用一个RUN语句,还要增加命令被RUN语句触发的时间。

一些操作系统(SCO Unix, Unix SVR4) 有一个叫做'timex"的命令,使用这个命令可以获得进程和其子进程所使用的CPU时间,在使用timex命令之前必须先打开记帐功能。

要打开记帐功能,首先用root用户登录系统,然后运行:

OS COMMAND 

-------- ------------------------------------- 

SCO Unix $ /usr/lib/acct/accton /usr/adm/pacct 

Unix SVR4  $ /usr/lib/acct/accton /var/adm/pacct 

Others OS  $ man acct 

当记帐功能打开之后,你就可以执行timex命令。使用-p选项(可以获得子进程使用的CPU时间)。

$ timex -p fglgo test.4gi

******** 

COMMAND RT END  REAL * CPU * CHARS BLOCKS 

NAME USER TTYNAME TIME TIME (SECS) *(SECS)*TRNSFD  R/W 

fglgo ignacio ttyp0 17:35:05 17:35:05 0.59 * 3.02 * 26256 9

[1] [2] [3]  下一页

相关文章
广告赞助
网友评论

共有 0 位网友发表了评论,平均得分: 0 查看完整内容

用户名:

分 值:100分 85分 70分 55分 40分 25分 10分 0分

内 容:

(注“”为必填内容。) 验证码: 验证码,看不清楚?请点击刷新验证码