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 单独设置。