浅谈TimesTen内存数据库的结构

作者介绍

朱亮

云和恩墨技术专家,6年专职oracle dba生涯先后服务于保险、金融、电信、百货等客户

Oracle TimesTen In-Memory Database(简称TimesTen或TT)是一种业界领先的内存中关系数据库,2005年被oracle公司收购。TimesTen主要为电信、网络、证券交易等行业提供基础架构软件,并用这种软件进行事件管理、交易和数据的工作,支持的系统包括实时计费系统、股票交易系统、呼叫中心系统、航线运营系统等。

TimesTen主要用于以下部署方式:

1、 用于独立的OLTP系统的内存数据库 2、 用于Oracle物理数据库的内存缓存数据库 3、 在Oracle Exalytics的内存分析

一般行业内,大多采用第一种和第二种方式使用TimesTen数据库。

文件结构

TimesTen数据库主要包括的文件有:

1、检查点文件

主要用来记录和同步Data Store的内存数据,是内存在磁盘上的一个镜像,类似于oracle数据库的数据文件。每个TimesTen实例有两个检查点文件,在做检查点操作的时候会交替写入这两个文件,两个检查点文件之间的存在一定的时间间隔。

在TimesTen数据库中,有两种类型的检查点:

  1. 非阻塞检查点:非阻塞检查点也被称为模糊检查点。这些检查点的频率可以通过应用程序进行调整。非阻塞检查点不需要数据库上的任何锁,因此在检查点操作正在进行时,多个应用程序可以在同一数据库上异步提交或回滚事务,它是一个不完全检查点,不必保证事务的一致性。
  2. 阻塞检查点:做该检查点操作时会加上数据库级别的锁,它是一个完全检查点,必须保证事务的一致性。

2、事物文件

其主要作用为:

a、用于发生系统故障时,重做事务

b、用于撤消回滚的事务

c、将更改的内容复制到其他TimesTen数据库

d、将更改的内容复制到Oracle数据库

e、允许应用程序通过XLA接口监视对表的更改

事物日志文件存放路径位于配置文件中logdir参数所指定的目录下,当完成以下操作后,TimesTen会自动清除事物日志文件:

  1. 将日志记录写入事务日志文件(或以前的事务日志文件)的所有事务都已提交或回滚。
  2. 事务日志文件中记录的所有更改都已写入检查点文件。
  3. 如果使用复制功能,事务日志文件中记录的所有更改都已复制到对端。
  4. 如果已经为该行为配置了TimesTen缓存,则事务日志文件中记录的所有更改将被传播到Oracle数据库。
  5. 如果使用XLA,事务日志文件中记录的所有更改都已报告给XLA应用程序。

3、配置文件

TimesTen服务器端的配置信息都被记录在sys.odbc.ini文件中,包括:服务器端基本配置和各个Data Store的初始化参数,Data Store装载时会读取该配置文件中的相关配置;连接DSN时也会读取该文件中的信息。

客户端连接的配置信息则被记录在sys.ttconnect.ini文件中,如果需要使用C/S连接模式,就需要配置该文件。

ttendaemon.options则用来记录TimesTen主进程所需要的配置信息也就是实例信息,包括后台日志目录、日志大小、C/S连接端口号、TNS_ADMIN目录等,修改该文件需要重启守护进程。

4、警告日志文件

ttmesg.log记录的是TimesTen运行情况的日志记录,有些类似于Oracle的alert.log文件;tterrors.log则记录的是报错信息。ttmesg.log和tterrors.log都可以通过设置ttendaemon.options配置文件中的参数来控制每个文件的大小、个数、存放路径等。

内存结构

如上图所示,TimesTen的内存结构主要分为PermSize、TempSize、LogBuffer和64M的DB header

PermSize:Data Store,保存所有数据库数据的区域,我们将其视为一个独立的数据库。

LogBuffer:用于暂时存储记录Data Store变更的日志,类似于Oracle的SGA共享内存区域的日志缓存(Log Buffer)

TempSize:临时存储执行计划等数据的共享区域,排序等等操作临时使用。相比与Oracle,TimesTen在此处作出了结构上的简化,可以视为Oracle的多个内存区域的合集,也正因为这样的简化,TimesTen在使用上相当于就必需保证简单化,否则争用热点出现,其性能甚至可能不如Oracle数据库。

由于这三个参数都是基于Data Stone的,所以对应的配置文件是sys.odbc.ini文件,我们可以通过修改sys.odbc.ini文件,来指定每一个DS在加载的过程中,需要分配多大的内存。在已经运行的环境下,可以通过dssize –m的命令,看到每一个区域所使用的内存大小,以及最高水位线(如下图)。

对于PermSize的大小,可以用过ttSize和ttComputeTabSizes来计算出,而TempSize的大小没有工具可以进行计算,在TimesTen数据库负载工作时,观测TEMP_IN_USE_HIGH_WATER的大小。PermSize和TempSize的调整,都需要从内存中卸载TimesTen数据库以进行更改,并且PermSize大小如果缩小,需要重新创建TimesTen数据库。

后台进程

在后台进程中,我们可以分为常驻进程和可选进程两种:

1、主守护进程(Daemon)

主要负责的工作有启动subdaemon,ttcserver(listener),

内存管理的policy(inuse,manual,alawy)和共享内存的请求,进程的恢复和启动相应的agent。在系统中安装的每个TimesTen 实例上都运行了一个主守护程序进程。应用程序通过TimesTen ODBC 或JDBC驱动程序建立了到主守护程序的“deadman”套接字连接。

2、子守护进程(Sub Daemon)

子守护进程是由主守护进程产生的子进程,用于管理内存中加载的Data Store。每个活动的Data Store(已加载到内存中的存储)都有一个子守护程序进程。主要功能有,负责加载和卸载Data Store,监视死锁、冲刷事务处理日志缓冲区、事务回滚、处理过期数据、检查点以及在系统故障后恢复Data Store等。子守护进程是一个多线程的进程结构,通过ttstatus可以看到当前的subdeamon的线程(如下图):

3、ttcserver(listener)

该进程主要要是侦听用户请求,然后通根据用户请求的DSN转发到相应的subdaemon,这个进程为每个连接生成一个ttcserver进程来执行应用程序的各种请求。功能类似于oracle数据库的listener进程。在TimesTen 11的版本里,默认的配置,该进程在53397的端口上侦听,用户可以通过ttmodinstall来进行修改,在TimesTen7版本中,该进程在17003的端口上侦听(如下图):

4、ttcserver(用户)

这种进程是具体负责执行应用程序请求的进程,比如执行sql,读取数据等等,由ttcserver(listener)负责启动。

5、timestenrepd:

Replication进程用于管理主备复制、AWT同步的复制进程,该进程会派生并并管理复制持有日志进程、XLA父进程、接受进程、传送进程、Failover进程以及复制监听进程等子进程。该进程是可选进程,只有在开启复制关系时,才会存在。进程也是多线程结构(如下图):

6、timestenorad:

Cache Agent进程用于管理Cache Group同步的进程,实现TimesTen与Oracle之间的数据同步;该进程会派生并管理句柄进程、刷新时间管理进程、刷新进程以及清理进程等子进程。该进程是可选进程,也是多线程结构(如下图):

7、其他可选进程:

FullBackup进程用于内存数据库全库备份、Bulkcp进程用于内存数据库数据导入导出、XLA进程用于Transaction Log的API接口进程。

TimesTen高可用

对于目前大多数业内环境,TimesTen的部署方式大多采用以下两种方式:TimesTen为主,进行应用业务的支撑,同时自动同步到oracle数据库中;另一种是oracle数据库为主要业务支撑环境,TimesTen只支持应用读取的功能。

在采用第一种部署中,oracle官方建议使用以下方式进行高可用环境的搭建,即TimesTen主库进行业务的事物支撑,在它的同步复制的备库,对外提供业务读取和向oracle数据库环境同步的功能(如下图)。

原文发布于微信公众号 - 数据和云(OraNews)

原文发表时间:2017-11-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏架构师之旅

轻松搭建分布式文件系统

用户在登录之后可以上传文件,也可以看到所有上传的文件(自己或其他用户上传的文件),并可以下载这些文件。

1094
来自专栏乐沙弥的世界

基于iproute命令集配置Linux网络(ip命令)

iproute是Linux下一个网络管理工具包合集,用于取代先前的如ifconfig,route,ifup,ifdown,netstat等历史网络管理工具。该工...

1097
来自专栏Grace development

NGINX日志配置总结

本来准备讲解nginx和apache的日志的,但是个人不太推荐apache(纯属个人爱好),这里就不介绍apache的日志了。

352
来自专栏Rainbond开源「容器云平台」

敲黑板 | 云帮储存那点事儿

1363
来自专栏数据和云

MongoDB 初体验:存储引擎 MMAPv1 与高内存消耗及升级迁移

当我对公司的一个内部系统性能无可忍受时,意外发现在这个内存仅为 32G 的服务器上,运行着一个 MongoDB 数据库,其主进程 mongod 占用了 30.7...

1157
来自专栏彭湖湾的编程世界

【计算机网络】 DNS学习笔记 (>﹏<)

参考书籍 《计算机网络-自顶向下》  作者 James F. Kurose DNS的作用 DNS是因特网的目录服务 DNS是因特网的目录服务,它提供了主机名到I...

22411
来自专栏SDNLAB

OVN实战三之打通真实网络提供NAT

概述 上篇文章《OVN实战二之Overlay实现》介绍了OVN中逻辑交换机、逻辑路由器的用法,本章介绍如何让OVN中的虚拟机访问外部网络和面向外部网络提供服务(...

3226
来自专栏皮振伟的专栏

​[usb][tcp]usbredir的优化---TCP keepalive

前言: 前文《[kvm][qemu]影响虚拟化热迁移的设备》中提到了usbredir技术,也顺便提到了对它的TCP keepalive的优化。 本文分析usbr...

2806
来自专栏懒人开发

ZooKeeper入门

我们知道,著名的hadoop,kafka,dubbo 都是基于zookeeper而构建。

582
来自专栏Linyb极客之路

Nginx配置详解

Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的。从2004年发布至今,凭借开源的力量,已经接近成熟与完善。

831

扫描关注云+社区