1
、描述IDS
数据库(database server
)由哪三个主要组成部分?并解释说明各组成部分的一些主要的概念。
IDS数据库是一个多线程结构(multithreaded architecture),由内存(shared memory)、CPU(VP)、磁盘(DISK)三个主要部分组成。
VP,IDS数据库中所有的进程统称为virtual processor(vp)。所有的vp属于一个特定的vp class,一个特定的VP CLASS 主要完成特定的一些任务。所有的VPs以root用户运行,在UNIX下对应的进程为oninit进程。
Shared Memory,划分为Resident Portion、Virtual Portion和Message Portion。
A、Resident Portion,常驻内存部分,包含BUFFER POOL和系统其他数据结构
主要用于存储buffer pool(磁盘缓冲数据),其他的结构有:locks(每个LOCK分配44个字节大小),LRU队列(包含FLRU、MLRU),Logical Log Buffers(3个BUFFER),Physical Log Buffers(2个BUFFER)。
B、Virtual Portion,虚拟内存部分,主要为线程控制信息
以pools进行分配,一个pool为8K大小。主要用于:用户SESSION数据,字典信息,存储过程,线程信息,排序等
C、Message Portion,消息内存部分,用于应用程序间通信
当系统初始化时进行分配,用于应用程序连接服务器的信息。
DISK,磁盘。IDS数据库最高层逻辑上由不同的DBSPACE组成,DBSPACE由物理上的chunk组成,chunk对应物理上的raw device或者cooked file。包含数据文件、逻辑文件(逻辑日志文件和物理逻辑文件)。表创建在dbspace上,对应的空间为tablespace,tabspace按extend进行扩展。Extend由连续的page组成,page为最基本的I/O单元。
2
、安装IDS
数据库之前需要的准备工作有哪些?
准备完成后,如何配置和初始化数据库服务器,及如何配置网络连接。
获取IDS安装包后,安装IDS之前的准备工作如下:
A、阅读RELEASE NOTE相关
B、根据RELEASE NOTE相关信息,确认操作系统核心参数的设置正确。
C、根据RELEASE NOTE打操作系统必要的patch。
D、创建informix组和用户
配置数据库服务器
A、设置环境变量
(1)、将INFORMIXDIR变量设置为你安装数据库服务器产品的目录
(2)、将PATH环境变量设置为包括$INFORMIXDIR/bin
(3)、设置INFORMIXSERVER,指定为缺省的数据库服务器
(4)、将ONCONFIG变量设置为有效onconfig配置文件的名称
B、准备连接文件
(1)、修改$INFORMIXDIR/etc/sqlhosts文件
C、设置配置参数
(1)、修改$INFORMIXDIR/etc/onconfig文件,配置相关参数
D、初始化和启动数据库服务器
(1)、初始化数据库服务器,oninit –i 只有第一次初始化时使用-i选项。
(2)、初始化完成后,需要修改物理日志表空间位置及大小,同时根据需要修改逻辑日志大小和数量。
(3)、根据运行情况,优化修改onconfig文件参数。
3
、描述共享内存(shared memory)
的组成部分,如何在ONCONFIG
文件中进行配置?如何进行监控(监控命令的使用)?
Shared Memory,划分为Resident Portion、Virtual Portion和Message Portion。
A、Resident Portion,常驻内存部分,包含BUFFER POOL和系统其他数据结构
主要用于存储buffer pool(磁盘缓冲数据),其他的结构有:locks(每个LOCK分配44个字节大小),LRU队列(包含FLRU、MLRU),Logical Log Buffers(3个BUFFER),Physical Log Buffers(2个BUFFER)。
在onconfig文件中对应的参数情况:buffer pool—BUFFERS,locks—LOCKS,LRU队列—LRUS,Physical Log Buffers—PHYSBUFF,Logical Log Buffers—LOGBUFF
B、Virtual Portion,虚拟内存部分,主要为线程控制信息
以pools进行分配,一个pool为8K大小。主要用于:用户SESSION数据,字典信息,存储过程,线程信息,排序等
在onconfig文件中对应的参数情况:SHMVIRTSIZE SHMADD SHMTOTAL
C、Message Portion,消息内存部分,用于应用程序间通信
当系统初始化时进行分配,用于应用程序连接服务器的信息。
常用监控命令有:
onstat – 查看常驻内存大小
onstat –g seg 查看各类内存的使用情况
onstat –R 查看LRU队列情况
onstat –u和onstat –k 查看锁情况
4
、IDS
有哪几类主要的VP
,并描述如何进行正确的配置?如何进行监控(监控命令的使用)?
IDS主要的VP类型和配置方式:
A、CPU,运行所有用户线程和一些系统线程,通过ONCONFIG文件配置NUMCPUVPS,在多CPU情况下配置为CPU个数-1;
B、PIO,负责物理日志写任务,系统自动分配1~2个VPS;
C、LIO,负责逻辑日志写任务, 系统自动分配1~2个VPS;
D、AIO,负责磁盘I/O任务;(KAIO),通过ONCONFIG文件进行配置NUMAIOVPS参数,一般配置为CHUNK的个数,当使用KAIO时,配置为2个即可;
常用监控命令:
onstat –g ioq 监控AIO队列,监控I/O请求队列LEN和MAXLEN来观察AIO的情况。
onstat -g rea 监控哪个类型的VP个数不够。
onstat –g ath 监控活动线程情况。
5
、描述IDS
的存储结构,分别写出如何采用raw device
和cooked file
进行表空间的创建。写出DBSPACE
的使用情况的监控方法。
IDS的存储结构从上之下描述为:DBSPACE(CHUNK),TABLESPACE,EXTEND,PAGE。一个dbspace物理上由一个或者多个chunk组成,tablespace为一个表在dbspace上的存储空间的一个统称,tablespace以extend为单位进行扩展大小,一个extend由连续的page组成,page为IDS中最基本的I/O逻辑单位。
Dbspace的创建分采用raw device和cooked file两种形式。创建方法类似,分别描述如下:
A、使用raw device创建DBSPACE
(1)、准备raw device
ln –s /dev/rxy0f /dev/ifmx-raw-001
chmod 660 /dev/ifmx-raw-001
chgrp informix /dev/ifmx-raw-001
chown informix /dev/ifmx-raw-001
(2)、创建dbspace
onspaces –c –d dbspacename –p /dev/ifmx-raw-001 –o 200000 –s 1000000
B、使用cooked file创建DBSPACE
(1)、准备cooked file
touch /dev/ifmx-cook-001
chmod 660 /dev/ifmx-cook-001
chgrp informix /dev/ifmx-cook-001
chown informix /dev/ifmx-cook-001
(2)、创建dbspace
onspaces –c –d dbspacename –p /dev/ifmx-cook-001 –o 200000 –s 1000000
表空间的监控:可以使用onstat –d来查看表空间的使用情况。
6
、解释说明IDS
的逻辑日志、物理日志的作用,分别说明如何进行逻辑日志、物理日志的管理及监控?
逻辑日志,用于记录系统中进行更新操作信息,包括DML,DDL语句。物理日志用于记录数据修改的前影信息。当系统发生故障时,可以利用逻辑日志物理日志进行恢复。
逻辑日志的管理和监控:
A、在onconfig文件进行初始化设置,LOGFILES用来设置逻辑日志的个数,LOGSIZE用来设置每个逻辑日志文件的大小。
B、增加一个逻辑日志文件的方法:onparams –a –d logspace –s 100000
C、监控逻辑日志的使用情况,onstat –l ,根据输出报告,分析逻辑日志的buffer是否设置的合理,同时可以监控到逻辑日志的当前使用情况。需要根据系统的实际情况,合理设置逻辑日志文件个数及大小的设置是否合理,一般大数据量情况下,每个逻辑日志文件大小设置为100M,个数可以根据情况设置。
物理日志的管理和监控:
A、在onconfig文件中进行设置,当系统初始化时,使用了rootdbs,需要从rootdbs中分离,需要为物理日志单独设置dbspace。
B、使用如下命令改变物理日志的位置和大小:onparams –p –d logspace –s 1000000
C、使用onstat –l 命令查看物理日志的缓存使用情况。
7
、系统触发CHECKPOINT
的时机有哪些?发生CHECKPOINT
后系统会进行哪些操作?
Checkpoint有两种类型:full checkpoint和fuzzy checkpoint。
FULL checkpoint的触发时机有:
A、当使用ontape 或者ON-Bar 进行备份和恢复时;
B、当fast recovery 或者full recovery结束时;
C、当数据库服务器当前逻辑日志将要切换到下一个free日志,但这个free日志包含了最后一次checkpoint信息时;
D、当使用onmode –c 命令时;
E、 当数据库服务器正常shutdown时。
FUZZY checkpoint的触发时机有:
A、当系统中的checkpoint interval时间间隔后,并且这段时间内系统中至少有一个修改操作发生时;
B、系统物理日志75%被占用时;
C、当系统检测到下一个即将成为当前逻辑日志的逻辑日志文件中包含“最新checkpoint”信息时;
D、当执行一些系统管理任务时,比如:增加一个chunk或者dbspace等;
E、 当手工执行onmode –c fuzzy命令时。
当checkpoint产生后,系统将执行如下6个步骤的任务来完成一次CHECKPOINT。
Step 1:No Threads in Critical Section,用户线程不能进入关键区域;
Step 2:Physical Log Buffers Flushed to Disk,物理日志缓存刷新到磁盘;
Step 3:Modified Buffers Flushed to Disk,修改记录从内存中刷新到磁盘;
Step 4:CheckPoint Record is Writen,CHECKPOINT信息写入到逻辑日志中;
Step 5:Logical Log Buffer Flushed to Disk,逻辑日志缓存刷新到磁盘;
Step 6:Logically Empty the Physical Log,逻辑上情况物理日志。
8
、如何创建临时表空间,如何创建临时表,如何控制临时表的存储DBSPACE
?
创建临时表空间的方法和创建普通的表空间类似,首先准备ROW DEVICE 或者COOKED FILE,再进行权限的管理chmod 660,然后使用如下命令进行添加表空间:
onspaces –c –t –d tempdbs –p /dev/rdsk/device9 –o 10000 –s 500000
创建临时表的方式有显示的和隐示的两种形式,显示的方式为:create temp table tabname(cols define);隐示的方式为:select * from tabname into temp tmptabname;
我们需要控制临时表的存储dbspace,若需要使用创建的临时表空间,则需要在创建临时表时使用选项:with no log。
9
、若采用周日进行全备份,周2
周4
进行增量备份的备份方案。请说明具体的操作步骤?若周3
系统发生故障,请说明如何利用备份进行恢复的步骤?
备份方案:
修改ONCONFIG文件中备份参数TAPEDEV, TAPEBLK和TAPESIZE,逻辑日志备份参数LTAPEDEV, LTAPEBLK和LTAPESIZE
周日全备份,ontape –L 0
周2周4增量备份,ontape –L 1
系统恢复步骤:
首先采用周日的全备份进行恢复到周日的时间点,ontape –r,然后采用周2的增量备份进行增量恢复到周2的时间点,再采用逻辑日志恢复到周3发生故障的时间点。
10
、例举出IDS10
,11
的5
项以上的新特性。
(1)、性能方面:
A、可配置的页面大小,可以在ONCONFIG文件中进行不同页面大小的缓冲池的设置。通过降低数据页和索引页的IO操作次数提高存取效率。
B、单个dbspace上的多个table fragments,降低了总的dbspace数目,分片表达式是针对同一个dbspace,提高了性能并简化了dbspace的管理。
(2)、管理的增强
A、ontape使用标准的I/O,可以备份到目录中;
B、重命名dbspace;
C、单用户模式,介入静止模式和在线模式之间的模式,DBA可以进行任何维护工作。
D、SQL管理API
(3)、安全的增强
A、列级加密,内置加密函数
B、安全环境检查,检查$INFORMIXDIR及它的目录权限,检查SQLHOSTS、ONCONFIG文件的权限;
C、基于标签的访问控制
(4)、可用性增强
A、索引的变化,create index 和 drop index 在执行时可以不加独占锁;
B、恢复表到指定的时间点,可以从0级备份中恢复一个表的部分或者全部数据到用户期望的时间点;
(5)、开发功能增强
A、查询的FROM 子句中的派生表
B、索引自连接查询计划
C、增加committed read隔离级别,增强了并发性
D、跨服务器分布式操作中的增强数据类型,BOOLEAN,LVARCHAR
E、新增SQL内置函数:比如:ADD_MONTHS(),NEXT_DAY,TRUNC(),SYSDATE()等,基本和ORACLE的内置函数一致,便于数据库之间的迁移。