Q1 什么是内存DBMS?
内存DBMS是一种新的在MMDBMS服务器启动后在内存中管理整个数据库的数据库管理系统。内存DBMS是在要求提高事务处理速度的背景下出现的。因为内存DBMS的整个数据库都在内存中,内存DBMS访问磁盘的次数相对于磁盘DBMS要少得多。因为整个数据库常住在内存中,数据处理算法非常简单。因为这些原因,内存DBMS的性能相对于磁盘DBMS要高得多。当然,内存DBMS不只是性能高,同样具有磁盘DBMS的各种功能。
Q2 请用一句话定义Altibase内存数据库
Altibase是一个数据库管理系统(DBMS)。它在内存中保存和管理数据,可以不通过硬盘直接访问数据。它提供高效的事务处理解决方案。
Q3 Altibase支持什么操作系统?
因为Altibase内存DBMS在开发中使用一个操作系统无关的模块,所以通过在makefile文件中设置一些选项,重新编译Altibase的源代码可以很方便的移植到其他操作系统。Altibase支持如下的一些32位和64位的操作系统。 Solaris, DEC TRU64, HP-UX, AIX Linux, Windows 2003 VxWorks, QNX
Q4 Altibase和磁盘DBMS的最大区别是什么?
有两个主要区别。一个是数据库所在的位置不同。磁盘DBMS总是将数据库存在磁盘上,将要访问的数据放在内存缓冲中。内存DBMS将磁盘上的备份数据库加载到内存中并在内存中进行管理。第二个区别就是他们的性能有非常大的不同。另外由于运行环境不同二者之间也有一些其它的区别。在性能方面内存DBMS大约比磁盘DBMS高10倍,功能方面内存DBMS和磁盘DBMS基本相同。 Q5 Altibase的稳定性如何?
Altibase内存DBMS在2000年10月首次发布。因为我们有长时间研究和开发DBMS丰富的经验,所以我们能在如此短的时间内开发出一个商业数据库产品。其间,Altibase的性能,稳定性和易用性也在通信,证券和国防领域被验证。Altibase从未让使用它的用户失望。
系统故障时,如果没有硬盘故障,则可以使用altibase启动时的恢复机制进行完全的恢复。但是如果出现硬盘故障,则只能恢复到最近一次的备份。 系统运行当中可以进行全部备份或表级备份
Q6 既然整个数据库都在内存中,数据库的稳定性不会出现问题吗?
数据库更新时,Altibase立即在日志文件中记录更新的信息。如果系统发生故障,Altibase分析日志文件内容并正确的恢复数据库。
Altibase还具有强大的复制功能,通过复制使系统具有高可用性和高稳定性。
Q7 我知道Altibase的优点之一是数据库复制特性,为什么它如此重要
是的,Altibase的优点之一是数据库复制特性。首先,Altibase复制的性能非常好。虽然根据查询类型和网络环境的不同会有一点区别,但是在复制中只有简单的SQL语句的情况下,Altibase可以保持独立系统(没有复制的情况下)性能的95%以上,而其它公司的同类产品还不到60%,因此,Altibase数据库复制的性能可以认为非常好。Altibase复制可以自动检测网络和媒体故障并进行适当的处理,在从这些故障恢复后执行完美的数据库复制。如果您想了解Altibase复制的更详细的信息,请查阅本页上部的“产品介绍”菜单中的“数据库复制”子菜单中的内容
Q8 Altibase复制时系统的性能
Altibase复制时能保持系统90%的性能。Altibase复制时性能的保持可以说是Altibase产品的技术核心,在多种实际应用中得到了验证。
Q9 Altibase复制中数据安全性和完整性
Altibase复制是通过日志传递的方式来实现的。日志具有特定格式,所以在数据传送中无需加密即可保障数据的安全。
数据的完整由TCP控制,利用其本身的查错功能。
Q10 其他内存DBMS提供的用户接口不够好,用户很难开发应用程序。Altibase为用户提供什么样的用户接口?
因为内存DBMS是一个新技术,所以用户还会面对很多的麻烦。内存DBMS的目的是提高性能,如果系统提供给用户方便的接口,DBMS的性能会下降,所以其他产品在CLI层只提供ODBC和JDBC接口。但是相对于其他产品,Altibase的应用程序开发容易的多,因为Altibase是作为一个通用内存DBMS来开发的。除了ODBC和JDBC之外,Altibase还提供支持嵌入式SQL和PSM(类似于存储过程)的SES。Altibase也支持ISAM接口,这样就使您已经用ISAM开发的程序不用修改就可以在Altibase上使用。
Q11 Altibase对用户数是否有限制,多少用户可以并发访问?
ALTIBASE可以产生1000多个连接。受操作系统限制,一般最多1000多个同时的socket. 由于实际上是使用连结池来提供连结,所以并不存在限制连结的问题。由于Altibase在内存中操作,速度一定会比磁盘数据库快,也就能提供更好的并发性。
Q12 系统到底需要多少内存
这是根据用户的数据量而不同的。一般以数据文件大小的150%~200%作为所需内存空间。
Q13 将磁盘上的备份数据库加载到内存中需要多少时间?
加载4G的数据大概需要5分钟时间 (SUN E250),根据系统的配置这个数据将变化 Q14 当数据量大大超出内存时的解决方案。
使用硬盘swapping。系统性能降低。不建议这种应用形式,因为altibase中没有这种转化的机制,
而且也不符合内存数据库的思想。
可以只对关键模块使用Altibase, 其余数据保存在磁盘数据库中。 但在大部分情况下,可将所有数据保存在内存中,Altibase独立使用。
Q15 Altibase是否是独立的数据库管理系统,当它与其它磁盘数据库混合连用时是否是作为磁盘DBMS的访问前端?
Altibase是独立的数据库管理系统,与磁盘数据库一样可以独立使用。它内部具有管理机制和查询算法,并不是作为磁盘DBMS的访问前端使用的。
Q16 Altibase与磁盘数据库连用时是否需要写应用程序?与磁盘数据库是否存在标准接口?
Altibase与磁盘数据库的连用通过写应用程序来实现。二者之间不存在国际标准的接口。
Q17 怎样定义冷热数据,如何进行冷热数据转换?
程序员设计时访问量大,影响性能的数据一般被指定为热数据。把这样的数据存储到ALTIBASE中使用,能提高系统的性能。访问量小,对系统性能没有明显影响的数据称为冷数据。
冷热数据转换是通过应用程序实现的。很多时候,Altibase与磁盘数据库的连用是以模块方式实现的,Altibase负责的模块主要存放热数据。
Q18 如果只用Oracle, 客户端一个SQL语句即可访问数据,如果二者连用,是否客户端要分别建立与Altibase和Oracle之间的联系,并且需要访问两个DB?
是的。这种情况下客户端需要访问两个DB。
Q19 系统移植时工作量有多大?(数据移植,客户端程序移植,两个数据库之间的联系程序)。
先要把现有系统的数据以文本形式下载,再使用iLoader上传到ALTIBASE。速度是 10000~20000 tps(transaction per sec)。
客户端程序移植和两个数据库之间的联系程序,由于Altibase支持ODBC, JDBC, SES如C/C++等多种标准借口,所以这种移植是非常容易实现的。
Q20 我们看到很多Altibase与Oracle连用的实例,能否介绍一下Altibase独立应用情况。
在Altibase的实施中,大部分情况都是Altibase独立使用的。Altibase的独立使用的实施与传统磁盘数据库非常相似。
只有当数据量很大情况下,已有的服务都是基于硬盘的数据库,如果把这些都转移到ALTIBASE数据库需要很多的费用 (Altibase价格增长),所以只把那些影响系统性能的服务转移到ALTIBASE。 Q21 Altibase可否提供硬件+软件的解决方案,比如可以自带备用电源,保障断电时数据不丢失。
用户可以根据自身需要决定是否使用备用电源或第三方HA设备。应用于磁盘数据库中的HA设备,也可以在Altibase中使用,如VERITAS Cluster可用于altibase。
但由于Altibase强大的复制功能,很多用户发现没有必要使用上述方法。 Q22 Altibase benchmark测试的环境,测试部门。
1. 测试环境 Server : sun E-450 memory : 4GB CPU : 2 * 400Mz 2. 测试部门 韩国altibase公司内部和韩国三星电子
Q23 如何决定是采用独立模式还是混合模式?
一般根据客户需求和性价比决定。如果对大量数据的访问性能都有很高要求,应该采用独立模式,如果只对小部分数据的访问速度和性能上存在高要求,则可以使用混合模式。 Q24 假如主机内存只有40多GB,对altibase正常运行是否有影响?
对altibase正常运行是有影响的,内存不够,可能会使用交换空间,性能会受到影响。
Q25 isql 客户端连接远程Altibase 主机报错? [ERR-91015 : Communication failure.]
1.建议更换Altibase 客户端版本
2.重新设置 ALTIBASE_HOME , PATH 环境变量
Q26 Altibase 参数修改步骤
1、 修改 103 和 39的 altibase.properties,这个文件修改只能是下次重起数据库的时候有效。 PREPARE_LOGFILE_COUNT=2
REPLICATION_PREFETCH_LOGFILE_COUNT=3 REPLICATION_PREFETCHER_RETRY_TIME=1 2、 Replication sync 之前做以下操作
iSQL> alter system set REPLICATION_PREFETCH_LOGFILE_COUNT = 3; iSQL> altier system set REPLICATION_PREFETCHER_RETRY_TIME = 1; iSQL> check properties; Q27 备机重启动后无法连接AB。 error:
TRANSITION TO PHASE : PROCESS hostid->844d7498 [FAILURE] Startup Failed....
[ERR-51039 : Internal Error : Invalid Protocol (err3)] [ERR-51039 : Internal Error : Invalid Protocol (err3)]
由于改变了hostid,出现连接错误。把hostid改回成之前的hostid,问题得以解决。 连接成功。
注意:以后遇到类似问题,都要先确认一下hostid是否有改动或网卡更换。
Q28 现在一台PC机上装了solaris和altibase,能否与sun或IBM服务器装的altibase间replication? 操作出现如下错误:
iSQL> create replication rep1 with '10.200.26.36',20300 from sys.acct to sys.acct; [ERR-61023 : The replication is disabled]
问题应该是没有启动Replication模块。
需要修改$ALTIBASE_HOME/conf/altibase.properties 中 REPLICATION_PORT_NO = 20301属性,就是再配一个Replicaion专用的端口号。
再重新启动Altibase 就可以启动Altibase Replication功能了。
create 语句中使用的端口号是对方Altibase的 REPLICATION_PORT_NO 。
Q29 创建一个用户test,在该用户下创建replication时出错:
iSQL> create replication rep1 with '10.200.50.247',20301 from test.ACCT to sys.ACCT; [ERR-31084 : The user has no permission to execute the SQL statement
Altibase Replicaion 只能在sys/manager 用户下进行管理。 Q30 ALTIBASE有三种运行模式,如何设置这三种模式?
我们售前跟您说的Altibase 3种运行模式,不知道是不是说的 Altibase内存数据库、Altibase磁盘数据库、Altibase与其他数据库联用这个概念。
这是一个逻辑上的模式,Altibase 没有具体限制。Altibase 内存数据库 、Altibase 磁盘数据库都是可用的。
Q31 ALTIBASE提供active-active和active-standby两种复制模式,如何设置实现?
Altibsae Replication 可以通过设置Altibase 配置文件启用。并通过sql 语句建立表级复制关系。双向复制关系则为active - active ,单向复制则为active - standby。
Q32 3种模式 :
1. enable only memory space 2. enable only disk space 3. enable memory and disk space altibase默认安装是第一种模式么?
第一种模式和第三种模式的区别是不是在于写磁盘数据库的同步上(两者都是要在磁盘上写log的)? 第一种模式和第三种模式是怎样配置实现的?效率相比较情况?
Altibsae 内存数据库和磁盘数据库是以表空间为区分的。
默认表空间为 SYS_TBS_MEMORY ,即内存表空间,内存表空间只有这一个,而磁盘表空间可以建立多个。//这个可以参考sql 手册。
可以在创建数据库用户时指定默认表空间。也可以在创建表时指定表空间。 这样就可以把热数据和历史数据分开放到内存和磁盘表空间。
另外Altibase 的内存数据库与磁盘数据库是通用一个数据引擎的。他们都会写磁盘log ,以保证数据完整性。不同的是实时数据文件的存放地分别是内存或磁盘。
从效率上将Altibsae 磁盘数据库性能在一定范围内能达到Oracle的性能(我们做了一些tcp 标准测试,性能上与Oracle 互有优劣)。
而内存数据库性能在实时业务处理方面要远强于Oracle,所以第三种模式的效率就要看您怎样去部署。
Q33 ODBC是在CLI基础上封装的,对不对? 二者的效率有明显的差别么?
Altibase CLI (UNIX App 接口) 和ODBC (Window ODBC 驱动) 其实是一样的APP 接口,现在我们也在统称为ODBC。函数说明您可以参考ODBC 手册。
Q34 有没有ODBC和CLI的函数封装包提供?
我们只提供编译好的LIB 库文件,安装包里包含这些库文件
Q35 用iSQL in sysdba mode启动数据库为什么返回如下错误? bash-3.00$ isql -s 127.0.0.1 -u sys -p manager -sysdba
Error : Cannot Specify Server or PORT when using sysdba mode
sysdba mode 只能本机登陆,去掉-s 参数就可以登陆了。
Q36 设置MEM_MAX_DB_SIZE = 1G 为什么使用中数据库会大于1G?
MEM_MAX_DB_SIZE 是数据的大小,不包括索引以及临时内存空间的大小。
Q37 关于logfile文件的删除问题,是根据什么删除的,是checkpoint么?
logfile 会自动删除。具体的逻辑如下:
Altibase 是由数据文件 dbs/mydb-0-1 mydb-1-1 .. 和日志文件 logs/logfile.. 保证数据的完成性。 其中数据文件保持两分,当发生checkpoint 时交替将内存脏页写回到数据文件中。(如果chekpoint时宕库,则由另一份数据文件与已经有的日志文件恢复所有数据)
当checkpoint 成功完成时,删除已经在数据文件更新的相关数据的相关日志logfile。(相关管理数据在logarchor文件中)
Q38 当checkpoint 成功完成时,删除已经在数据文件更新的相关数据的相关日志logfile。
在使用过程中2月20号发现1月份的logfile还存在,checkpoint时间间隔为6000s,如果正常应该只存在6000s时间内的logfile,为什么会出现logfile不删除的情况,是checkpoint未成功么? 怎么实现manual checkpoint?
如果使用了Replication ,并且没有启动日志会积压的。
可以在isql中手动执行checkpoint , isql> alter system checkpoint;
Q39 PARALLEL_LOAD_FACTOR,MULTIPLEXING_THREAD_COUNT等参数是根据CPU数来设制的,现在海南项目使用的是SUN服务器,为1个CPU8个核,设制参数按1来算还是按8?
关于PARALLEL_LOAD_FACTOR,MULTIPLEXING_THREAD_COUNT 参数,可一不用设置,会自动识别的。
//其中PARALLEL_LOAD_FACTOR只在Altibase 启动时有所影响,但是无关紧要。
MULTIPLEXING_THREAD_COUNT 我们在其他多核的系统中也是采用默认值的。一些特殊的情况,我们都是反复测试才能设置最佳的值,建议不用修改。
Q40 表创建了sequence,双机同步,sequence值没有同步过去,请问如何解决?
这个Altibase 不支持双机的sequence复制 , 建议将双机两边的sequensce 单、双数分开,这样切换的时候就不会重复。
//就是两边建立sequence的时候,增量设为2。
Q41 请问怎样在isql下取得前几天的日期? 我们有清单表是用日期的,需要定期删除增加 能计算前几天的日期就行,还有后几天
DATEADD
DATEADD (date, number, date_field_name) 说明
将日期或时间date的 date_field_name加number类型数值 . number为小数是,忽略小数点后面的数字.
date_field_name为 ?SECOND?时 number必须为 68年以内的值, ?MICROSECOND?时number必须为30天以内的值.
DATEADD 中可用的date_field_name如下.
CENTURY ,YEAR ,QUARTER ,MONTH ,WEEK,DAY ,HOUR,MINUTE,SECOND,MICROSECOND
Q42 是不是ora2alti.cfg文件的ALTI_TABLE_CREATE = 0
# 1.create 2.truncate 0: nothing有误,帮忙解释一下2和0的区别?
0是 append,当有 pk时,发生冲突肯定不能插入进去。
Q43 dbs下的文件大小和内存表的大小之间的系数关系是?
mydb-0-0(大小:1G) 和 mydb-1-0 是一对,大小差不多。为了做 ping-pong checkpoint,存在2份。
存两份的原因除了备份以外,还有在 checkpoint 时间内也能处理事务。
这个文件中存放系统信息(table schema等信息)以及实际数据,所以与内存表达小出不多。
Q44 autocommit off 模式下,怎么在数据库端发现并断掉加了表级锁的连接。 [ERR-11075 : The transaction exceeds lock timeout specified by user.]
1 . 请及时commit,或查找没有断开的连接断掉。 2 . sesssion close的方法如下:
登陆sysdba用户 :$isql -u sys -p manager -sysdba
查找需断开的连接:> select comm_name , DB_USERNAME , id from v$session;
回滚相应的连接、并断开:> alter database mydb --数据库名-- session close 63 --session id--; 如果连接中需要回滚得事务比较多,这种方法会非常慢。 3 . 重新启动数据库。15G 的数据大概需要10~15分种。
Q45 我们需要把 cursor 的结果直接取到一个结构里.
问题是,结构类型定义在 一个统一的头文件中. 存放在专用的include 目录 现在编译出现问题了,找不到头文件rs.h里定义的结构类型.
我在编译时:加了include 选项的
sesc -o /App_ibs/iBOSS/rating/src/rs/obj -t cpp -
include /App_ibs/iBOSS/rating/include /App_ibs/iBOSS/rating/src/rs/loadParaTool.sc
在loadParaTool.sc 文件里也加了 exec sql INCLUDE rs.h; 不行
include \也不行
您可以参考 $ALTIBASE_HOME/sample/SESC 的 Makefile. 1.sesc 只是预编译器, 不能那么做。 2.include 的时候,要用 -I。
altibase@[/home/altibase/altibase_home/sample/SESC][196]>gmake -n connect1 sesc -t cpp connect1.sc xlC_r -q64 - DPDL_NDEBUG qflag=w:w
-O2
-qcheck=nobounds:div:null -qinline
-D__PDL_INLINE__
-qtempinc
-qinfo
-D_POSIX_PTHREAD_SEMANTICS -D_REENTRANT -qspill=32000 -
-DPDL_LACKS_PDL_TOKEN
-c
-DPDL_LACKS_PDL_OTHER -DPDL_AIX_MAJOR_VERS=5
-DPDL_AIX_MINOR_VERS=3
-I/home/altibase/altibase_home/include -I. -o connect1.o connect1.cpp xlC_r -O2 -qinline -q64 -bmaxdata:0xFFFFFFFFFFFFFFFF -L.
-L/home/altibase/altibase_home/lib -o connect1 connect1.o -lsesc -lodbccli -lpthreads -lhm
Q46 isql 察看sql语句查询时间时只能到0.01s , 能不能看到毫秒级?
您可以通过下列的语句在数据库端查询,连接程序的执行sql语句及执行时间(毫秒级)。 SELECT a.client_constr, a.comm_name, b.execute_time, b.query FROM SYSTEM_.V$SESSION a, v$statement b Where a.id = b.session_id;
Q47 应用中,发生 Communication link failure 的情况有几种?
1、没有 connection的时候 2、发生 Timeout
- 有 Query Timeout, Fetch Timeout, UTrans Timeout, Idle Timeout 其中,Query Timeout 不会断开连接,其他情况都发生连接中断. 3、网络问题
4、DB Server 结束的时候
5、DB Server 已结束,无法连接的时候
Q48 Altibase是否支持数据库的快照(snapshot)功能? 不支持
Q49 执行下列sql时出错。 \
TO_CHAR(ADD_MONTHS(period_end,MONTHS_BETWEEN(TO_DATE(:fee_date,'yyyymm'),TO_DATE
(sum_period_date,'yyyymm'))),'yyyymmdd') FROM unitele.BS_BILL_PERIOD_T WHERE city_code = :city_code AND period_id = 1\
Altibase不支持在select 后的字段名、表明项中使用host变量。但是可以用类似下列的方法解决: strcpy(query, \,fee_date); EXEC SQL EXECUTE IMMEDIATE :query;
Q50 altibase的add_month和Oracle结果不一样 oracle add_month(2006-09-30,-1)=2006-08-31 altibase add_month(2006-09-30,-1)==2006-08-30
Altibase的add_month函数与oracle是有上面所述的区别。 可以用dateadd函数进行调整。
Q51 Altibase 不支持哪些sql语句?
alter table BF_BILL_THREAD_T modify (err_info varchar2(500)); 即不支持字段的修改。
如果在系统运行时,修改字段很可能引起错误。还是用iloader导出数据并重新倒入比较安全。 但是支持:
alter table add column delete column
Q52 启动altibase总报[2006/09/24 15:33:48] [Warning] Memory allocation failed. Size: 4198464 Timeout: -1 测试服务器为HP系统。
从报错可以看出为内存分配的问题,需要察看的为以下几个方面: 1.内存使用情况(glance)
2.altibase.properties 中的属性MEM_MAX_DB_SIZE(确定正确设置后又没有重新启动)
3.系统配置属性sam => kernel configuration => configurable (其中maxdsiz_64bit限制了最大内存使用量)
4.察看硬盘使用情况(df -k)。
经察看为第3个属性引起的问题。重新设置最大内存使用量(install manu中有详细介绍),重新启动系统,重新启动数据库,数据库恢 复正常。
Q53 绑定参数函数与绑定列函数?
绑定参数函数向数据库提供数据,用于insert、update及where子句等;绑定列函数用于从数据库读取数据
Q54 占位符???在to_date函数中是否可用。
可以使用
Q55 批量插入出错的问题。
由于使用了函数SQLSetConnectAttr(dbc,SQL_ATTR_BATCH,SQL_BATCH_ON,0),重复设置了批处理开关导致批量插入出错,将这个函数注释掉后,错误消失
Q56 NUMERIC数据类型precision与scale的关系。
numeric(precision,scale),是从距离小数点scale个数字位置开始,保留高位precision
个数字有效。经分析,确定Precision-scale可作为numeric整数位数的计算及进行数据类型的转换的依据
Q57 取出空(null)数据出错的问题
使用nvl函数避免取出为空的数据时出错的问题
Q58 Altibase 是否支持日志分析器?
目前Altibase 4.3.9版本还不支持日志分析器。
Q59 Oracle 也可以把指定表 Keep 到 SGA 的 Buffer 领域,则 MMDBMS 一样,不是吗?
即使是同样的数据在内存里, Altibase 的内存是数据库存储介质本身,但 Oracle 的 Memory(Keep) 是为了弥补磁盘用的 Cache 用。
因此,Select 时 Access 数据的方法(Algorithm)就不一样。 Altibase 是根据索引直接访问数据,所以 Random Access 较强,但 Cache 对顺序 Access 强。
毕竟 Oracle 也强化了此功能,但原理上 Altibase 更优。 如果不走索引,全表扫描的话,两个数据库性能差不多,但如果走索引, Altibase 肯定比 Oracle 快。
最重要的是 Update/Insert/Delete 等 DML操作 Oracle 要写到磁盘。 Q60
Update/Insert/Delete 等 DML操作:
oracle 也是先在buffer上进行操作,再定向到disk上操作,不是吗?
可以定时回写,但写的时候为了以后从磁盘方便快速读取,重新整理后写到磁盘。但 Altibase 除了logging 以外, checkpoint 的时候才发生 Disk I/O ,是 dump 方式,所以简单快速.
更重要的是 Oracle 本身不建议把 U/I/D 操作频繁的表keep 到 Buffer ,这样可能更降低性能。 Oracle 建议把 Reference 表 Keep 到 Buffer。
Q61
当 hardware的memory,altibase 会出现erorr,还是会停止?
Hardware 的 Memory 坏掉了, Altibase 可能直接死掉,可能跟 kill -9 一样,数据库级别什么报错和日志都没有。 这种情况没有遇到过,所以这只是可能。 Q62
当 hardware的disk出现 error 时,altibase 会出现erorr,还是会停止?
Disk 也会跟 Memory 坏掉现象一样。 但 Altibase 运行状态中 dbs 和 logs 目录的 Disk 没有问题,应该没有什么问题。
Memory 和 Disk 坏掉了, Altibase 本身不会有日志,但操作系统本身会给 altibase 进程发送 signal。 Q63
Altibase 启动时间多少?
启动时间受到以下因素影响: 数据量/ 索引量/ 磁盘速度/ CPU 个数/ CPU 主频的影响。
磁盘速度和数据量决定数据加载到内存的时间,索引量和 CPU 个数以及主频影响rebuild index 时间,因为 Altibase 创建索引的时候使用全部的 CPU。
我们一个案例中,数据大概 48G,索引大概18G,磁盘写的速度 50-70M/s,CPU 32 个(dual core),1.9GHz, 11分钟就能启动。
还有可以通过 altibase.properties 的SHM_DB_KEY 设置,可以把数据放到共享内存领域。 这样即使关闭 altibase ,数据在共享内存中,不会释放内存,但可以节省加载数据的时间。 所以数据量大的 Site, 比如 100G 数据量的,我们就放在共享内存领域中。 Q64
在两套altibase数据库之间建立复制,可以消耗10%左右的性能 现在在两套数据库之间建立两个复制rep1,rep2,是否可以?如果可以对性能的影响如何?
可以建立。 altibase 复制是基于 ip 和 replication_port_no 的, 所以只要有两个不同的 ip<不同的网卡> ,两套数据库之间可以建立多个复制。 建立 1个复制有5-10% 性能下降,那么建立2个有10-20% 性能下降。 注意点: 一般两套数据库之间建立多个复制的目的是抛开网络瓶颈,提高复制的速度。 但这两个复制不能保证顺序,所以互相有关系的表务必放在同一个复制关系中。 Q65
怎样通过 jdbc把存储过程打印出来?
关联altibase 的视图和meta table,才能知道存储过程内容,jdbc 也要访问数据库才行。 Q66
两个数据库是否可以建立数据连接?
不支持 DB-Link。 Q67
数据同步的刷新速度,是否建议使用频繁同步?
这里指的数据同步如果是 altibase 内存上的数据页和对应的磁盘上的数据文件的话,不用频繁同步。 altibase 现在是通过 checkpoint 实现这个功能,而且日志是实时同步,所以没有必要数据页频繁同步,也能保证数据库的完整性。 Q68
多事物同时操作内存数据库和ORACLE数据库,数据的一致性和准确性是否可以保证?
altibase 和 oracle 都作为数据库,保证事务本身的特性。 但多事物同时操作内存数据库和ORACLE数据库时,数据库级别不能保证数据的一致性和准确性,需要应用来减少不一致性。 altibase 和 oracle 上不可能完全的同时提交,所以有可能数据不一致,但缩短提交的时间差,尽量减少误差。 Q69
如果是大查询部分表在内存数据库中,另一部分在oracle数据库中是否可以操作?
altibase 和 oracle 是完全独立的数据库,一个表不能同时放在2个数据库上,如 1个表不能同时放在oracle 和 DB2 上一样。 Q70
是否支持BEA TUXEDO中间件的数据库接口?
不支持 tuxedo 中的 xa功能,只是负载均衡用。国内国外案例里通过 tuxedo 再连接 altibase 数据库的非常多。 Q71
索引的使用方式和数据库其他实体比oracle9i有什么变化?
altibase 数据库使用的引擎为 B-Tree,跟 oracle 没有太大的差别。 但oracle 优化数据库的根本在于最小化磁盘 I/O,altibase 优化数据库的根本在于最小化访问次数。 Q72
除ODBC数据库引擎外,内存数据库还支持其它哪种数据库引擎?
altibase 数据库引擎就有一个,同时支持内存表和磁盘表,没有 ODBC 数据库引擎说法。 而且作为独立的数据库,altibase 不支持其他数据库的引擎。 Q73
内存数据库的连接库及接口分布情况?
通过 isql/iloader 等command 或应用接口可以连接数据库。 应用接口有 ODBC/ Embedded SQL/ JDBC/ window ODBC Driver/ Unix ODBC / PHP Interface/ Perl DBD等。 Q74
实时操作和大批量操作在同台内存数据库中对内存数据库参数影响如何?
主要考虑大批量操作变更数据库参数即可,而且现在很多案例都包括实时操作和大批量操作。 Q75
与session有关的参数有那些,是否制约大批量操作?
altibase Starting Manual 的 property 部分的有关 session 参数上有详细说明。 可以调节客户端服务器端通信 Buffer, TIMEOUT 参数,所以不制约大批量操作。 以下为那些参数。 CM_BUF_SIZE CM_DISCONN_DETECT_TIME CM_DISCONN_HIGHWATER_MARK IPC_CHANNEL_COUNT IPC_CHANNEL_RETRY_COUNT MAX_LISTEN NLS_USE PORT_NO
PSM_FILE_OPEN_LIMIT FETCH_TIMEOUT IDLE_TIMEOUT QUERY_TIMEOUT UTRANS_TIMEOUT Q76
如果错删数据,并且已经提交,如何可以恢复呢?
根据事务的特性,已经提交的事务不能回滚,即删除数据并提交的数据不能恢复。 Q77
访问私有内存或共享内存的速度与访问内存数据库的速度,哪一个更快?
内存数据库毕竟本身是数据库,所以访问内存以外还要管理事务等。 虽然使用共享内存技术时性能比内存数据库快 2-3倍,但无法变更数据结构,如果变更数据结构,业务开发量非常大。 而且不能用 SQL,不能关联表,维护较难;多并发的环境下不能保证一致性。 如果使用数据库,能保证事务(原子性、一致性、隔离性、持久性),即系统障碍下,多并发下保障安全性。 而且可以使用SQL ,并提供标准的开发接口,所以容易开发和维护。 总的来说,性能上内存数据库不如共享内存技术实现的应用,但综合评价性能、开发和管理、稳定性、功能等,内存数据库更优越。 Q78
在使用oracle动态库编译的程序里面有连接内存数据库的部分应用程序可以使用吗
完全不同的数据,需要重新开发。 但一个程序里可以同时连接2个数库。 Q79
请详细说明模糊检查点与乒乓检查点的原理。
初始创建数据库时默认有两个数据文件(mydb_0_0、mydb_1_0),三个log文件(logancher),ping pong检查点就是交替的进行数据文件的写操作,而模糊是将内存的脏页进行罗列后统一进行写。 Q80
altibase的loganchor文件中具体包括什么信息?
log、归档日志、数据文件位置信息 Q81
altibase中采用了什么最佳的数据结构?
链表技术 Q82
altibase中采用了什么最佳内存算法?
Btree(磁盘上)、B+tree(内存上) Q83
altibase中的内存索引为什么在ALTIBASE4种支持B TREE,不支持 T TREE?是否支持HASH 索引。
数据都是在变化的不可能采用hash索引,Btree结构比Ttree稳定。因此目前altibase中不再采用T-tree。 Q84
在altibase的sql92标准中提高了支持分等级查询,是否可以介绍一下分等级查询的概念?
ppt中相关的内容需要确认,需要修改ppt的内容建议将此部分中的内容删除。 Q85
Altibase中是否支持伪列?
altibase中不支持伪列 Q86
altibase是否支持锁的自动升级,比如行级锁升级为表级锁?
支持行级锁升级为表级锁(通过参数来控制,参数lock_escalation_memory_size,超过100mb时将,ISO_level为0时支持将行级锁升级为表级锁) Q87
altibase的wal机制与oracle磁盘数据库的wal机制有什么不同?
altibase的wal机制与oracle磁盘数据库的wal机制相同
Q88
请详细说明内存数据库的 SCN ,分为几类,详细的作用。
SCN是altibase内存数据库内部的变更号码,这个号码是依次递增由altibase内存数据库内部进行自动维护。 Q89
内存数据库有很多线程,它们与主线程是如何通信的?如果其中有一个线程出了问题,或者死了,会对数据库有什么影响?
都是由进程来负责线程间相互通讯。 Q90
内存数据库中的锁是在程序中如何实现的?如果用MUTEX来实现的,是否可以用其他方法来代替实现?
从unix下编程角度去理解,目前没有好的替代方法。 Q91
内存数据库中是否有心跳的概念,如果有,请详细说说。
只是在复制时使用的心跳,其他时候没有心跳概念。 Q92
内存数据库中存储最小的单位是页(32K),是否可以更改。如果一行数据记录超过一页,是如何存储的。
没有必要进行修改,分页存储,这样会导致内存数据库的性能下降,由于分页。 Q93
内存数据库中是否有行连接与行迁移,如果有,如何看一个表有这些现象,如何解决行连接与行迁移?
altibase内存数据库中存在行连接,目前没有方法能够查看表连接,如果想解决表连接那么可以根据业务数据大小合理的设置altibae内存数据库的内存参数。 Q94
内存数据库中有MVCC机制,是什么来决定MVCC,也就是说一个数据页能演化多少了版本,由什么来决定?
主备版本拷贝是在进行update时,会拷贝多份,具体可以拷贝多少份由数据库的内存大小决定。 Q95
altibase的mvcc机制是如何实现?
altibase的mvcc机制与oracle一样
Q96
在内存数据库中有垃圾回收线程,能否说一说垃圾回收线程什么时候起作用?什么时候不起作用?如何判断这页没有用了,进行垃圾回收?
altibase内存数据库的垃圾回收线程实时在起作用,对于脏页的判断由altibase内存数据库内部进行判断。 Q97
在单CPU 与多核CPU(2、4)中,16个CPU,ALTIBASE 能达到最好的性能?这个16个CPU是指单CPU ?还是指多核 ?
altibase内存数据库在16颗CPU下性能最佳,是单核CPU。(32核,16颗cpu下) Q98
在内存数据库中是否支持CUBE操作,如果不支持用什么方法来实现它?
altibase中不支持CUBE操作,目前没有好的方法来实现。 Q99
在ODBC 接口中,是否完全支持 ODBC标准3.0 ?
altibase内存数据库对于ODBC标准3.0不是完全支持 Q100
在ODBC 接口中,是否支持SQLDescribe Param,如果不支持,用什么方法来实现它。
altibase的ODBC接口中不支持SQLDescribe Param函数,目前没有什么好的方法来实现。 Q101
内存数据库支持事务的隔离级别有几种?
altibase内存数据库支持四种隔离级别,具体的内容请参见手册。 Q102
内存数据库是融合的数据库,我只要内存数据库,不用磁盘数据库,是否可以关闭磁盘数据库也就是说,不让磁盘数据库干扰内存数据库。
altibase内存数据库可以单独的使用内存引擎和磁盘引擎, 但是在使用内存引擎的过程中不可以将磁盘引擎的相关文件删除,否则会导致数据库无法启动。 Q103
在内存数据库中,我删除了SYSTEM01.DBF,SYSTEM02.DBF,A.DBF,对内存数据库有何影响?
例如:A.DBF是创建表空间用的。 A26:如果用户手动的删除或者意外的损坏了altibase内存数据库的相关数据文件后,将导致altibase内存数据库无法启动。因此为了避免出现此类故障,建议在实际应用的架构中采用altibase内存数据库的复制技术或者数据库的备份技术进行保护。
Q104
在同一时刻,有两个语句执行,数据库先执行哪一个? 例如:SESSION1: T1 :UPDATE A SET AB=1; T2 :COMMIT; SESSION2: T1 :UPDATE A SET AB=3; T2 :COMMIT;
此类操作在实际的应用中很难模拟出来,假设出现了此类操作,那么altibase内存数据库将会报告错误信息 Q105
在内存数据库中可以提前检测死锁,请说一说如何进行检测的?如果检测到死锁,数据库是如何进行处理的?
altibase内存数据库中由底层的server线程负责检查死锁 Q106
在DIS工具中,在ORACLE、DB2 、MSSQL是如何实现把数据同步到内存数据库中?如果采用 CDC 机制,是否可以说一下在上述数据库中的原理,是如何实现的?如果用CDC 机制,是否对上述数据库有影响?如果有影响有多大?
目前altibase5的DIS工具中采用CDC机制 CDC 是 Capture Data Change 的缩写,可以直接确认 DBMS 的 LOG,并抽取任意的 source data。 对数据库的性能影响多大,还得等产品发布以后测试才知道。 Q107
在DIS工具中,有一个表在ORACLE中,一个表在内存数据库中,两个表是一样的。 DIS是如何解决冲突的?例如: 在ORACLE中执行:insert into A VALUES (1); 有一个字段,并且是主键。 在ALTIBASE中执行:insert into A VALUES (1); 有一个字段,并且是主键。
目前DIS工具中不能够处理此类的数据冲突问题,对于此类问题需要用户在使用过程中去避免。 Q108
在内存数据库中是否支持 RBO ?如果不支持RBO,支持CBO ,那么统计是系统自动实现的还是人工实现的,如果是系统自动实现的,是隔多长时间来统计?我们如何知道?
altibase内存数据库支持RBO和CBO优化模式,默认采用CBO优化模式 Q109
insert into tb1 select * from tb2 ;(主机的mem为16G,而tb2的记录量大小4G,为什么执行此语句时速度很慢?)
100万条记录以内可以使用此方法,大于100万后不建议使用此语句进行操作。对于此SQL语句altibase内存数据库执行效率本身就很慢,oracle磁盘数据库快是由于Oracle磁盘数据库采用了并行处理技术。为了在实际应用altibase中达到并行处理技术,那么需要人工将表的数据集分成记录数范围小于100万的子集进行多进程并发处理。 Q110
altibase 可不可以将所使用的内存针定(pin)在内存中,避免被交换出去。
Altibase 不能指定一定在内存中,Altibase 是基于操作系统的,对Altibase 来说操作系统提供的都是内存! Q111
使用iloader时,如果目标数据库没有存在表,in 命令能否执行成功呢?
既然没有目标数据库,一定不会成功! iloader 提供 -log a.log - bad a.bad 输出日志及出错记录的信息。 Q112
数据库不能正常启动
原因:active logs文件被删除
(1)数据库的active logs不建议人工删除,容易造成数据库的瘫痪或者一段数据的丢失
(2)由于磁盘的损坏,可能造成某一个active logs读写失败,这种情况下,一般通过对侧复制服务器来恢复 Q113
在使用JDBC编程,访问存取altibase数据库,出现乱码问题。
(1)在数据库服务器一侧:NLS_USE = US7ASCII 不需要设置其他的字符集,也不需要修改环境变量
(2)通过ODBC连接,不存在乱码问题 (3)在JDBC连接串 设置如下:
String port = args[0]; String url = %user = \要区分大小写 Q114
内存数据库的内存调小就只要修改MEM_MAX_DB_SIZE = 40G,然后重启库吧?
不能调小于磁盘上的 mydb 个数,即内存表空间。
Altibase 的 Meta 信息记录 tablespace size,tablespace 是一旦扩展就不能减少。 当 MEM_MAX_DB_SIZE 修改为小于 tablespace size ,则无法启动
Altibase 为了更好的利用内存资源,起库时不把 tablepace 的空页加载到内存。 Q115
ILOADER的问题,对一个表是否可以并行导入?
对,一个表是可以并行导入,可以加快性能。但是注意磁盘繁忙程度与内存的变化。 Q116
altibase的listener如何配置的?
首先,altibase 没有单独的 database, instance 概念,在 altibase 中这两个就是一样的,所以不用像 tnsnames.ora中配置多个 instance。
其次,altibase 区分于 PORT_NO 的,所以 client 指定哪个 PORT_NO 就连接哪个。1个服务器上不能同时启动 PORT_NO 一样的 altibase。 还有除了 Q117
ISQL_CONNECTION主要起什么作用?
altibase 连接方式 有 3个: tcp/ip(默认), unix domain, ipc,性能上 IPC > UNIX_DOMAIN > TCP/IP
ipc 和 unix domain 只能在本机连接,而且 ipc 方式连接时,配置IPC_CHANNEL_COUNT export ISQL_CONNECTION=UNIX_DOMAIN export ISQL_CONNECTION=IPC
如果 ISQL_CONNECTION修改为 IPC , iloader (数据导入导出)也是 IPC 连接,本地导入导出会快一些。 Q118
isql里怎么做执行计划?
alter session set explain plan = on; Q119
如何查看一个session正在操作什么语句?
v$statement 能看到,建议你在数据库上创建经常使用的 Admin veiw。 Q120
如何查看一个session是否正常? 比如某个占用大量的cpu?
v$statement 里 total_time 长的就是大量使用 cpu ,再与 v$session join 能查到 client pid。 在上面创建的 admin view 里也能看得到,或者 get_top2.sql里也能看得到。。
1)create table amon_stmt_okt as select sysdate mtime, id, session_id,execute_success from v$statement;
2)is -f get_top2.sql (get_top2.sql和 top2.sql 需要在一个目录里)。 Q121
altibase默认使用内存是process heap吗?
是的,SHM_DB_KEY 如果不是 0 就会使用 shared memroy,关库也不会释放这个空间,但是启动速度肯定快。
PORT_NO, NLS_USE 也要与服务器端一致,这个可以在
$ALTIBASE_HOME/conf/altibase.properties 中配置。
Q122
推荐使用shared memory or process heap吗?
推荐使用 process heap,原因是 A4 开始启动数据库时只 loading used page, 而且disk 的 read 速度提高了,altibase 本身的 loading 速度提高了,整个启动速度很快。 Q123
loading used page,包括那些东西 ?
比如说t1 表最多的时候10万条, 后来应用delete 了并减小到了 1万条,数据库启动之前 allocated size 是 10万, used size是1万。
对应的磁盘空间是 10万条, 但重起数据库的时候只 loading used page,即只 loading 1万条数据。 shared memory还是10万条空间,但删除的可能已标记了。 Q124
Refining Disk Table 和refine memory table主要是做什么?
starting manual 69页 有相关说明。
altibase 是支持 MVCC 的, 所以存在 before-image 和 after-image( versioning record). 手册讲的是:当 server stop 时,可能存在事务产生的 versioning record ,还没来得及被 GC处理。 这些数据存在于数据库,所以server start的时候通过refine ,回收没用的 versioning record。 简单讲整理没用的page 。
还有 shm 模式下,假如内存不够会用到 swap 领域, 这时候如果倒霉就 refine 时间很长。 Q125
GC是多久清理一次,有参数设置的吗?
iSQL> select name, value1 from v$property where name like '%GC%';
GC 应该是实时的,但这个thread也应该是都少秒一次 wakeup。 但 GC这些参数设置小点,加快清理frequency,则对于系统的压力很大。 Q126
shared memory启动,data的物理位置并没有变化,为什么还要rebuild indces?
SHM 的时候只有数据在这个领域, index 不在这个领域, 所以需要重建索引的。再有也为了 index 性能和节省空间,重起数据库的时候每次build 一下为好 。 Q127
STARTUP_SHM_CHUNK_SIZE
a.若在start db时,数据大小大于此参数值,db还是正常开启吗? b.若在DB运行当中,数据大小超过此参数值,db还是正常运作吗?
当SHM_DB_KEY 设置为 1的时候(默认值是0),第一次起库的时候把数据加载到共享内存当中,所
以关闭数据
库也不会释放内存空,这样减少起库时加载数据的时间。这个参数是当 SHM_DB_KEY 设为 1的时候,决定共享内存
块大小的参数,默认值是1G. 您说的参数应该是 MAX_DB_SIZE,如果大于这个大小,则数据库无法正常运行。即建
库的时候可以建 10M,之后自动扩展内存空间,但只能扩展到 MAX_DB_SIZE。 Q128
PERS_PAGE_CHUNK_COUNT找不到这个参数
这个参数现在没有了。以前是3200* 32K= 10M为单位增加共享内存块,但现在都是 STARTUP_SHM_CHUNK_SIZE 为单位增加。 Q129
AUTOCOMMIT_MODE如何设为NOT COMMITTED AUTOMATICALLY EX: AUTO_COMMIT = 1
可以在 altibase.properties 设置为0,或者 iSQL> autocommit off; 这样每个 session 单独设置。