TimesTen学习(四)Data Manager守护进程

《TimesTen学习(一)安装篇》http://blog.itpub.net/23135684/viewspace-717741/
《TimesTen学习(二)连接创建第一个数据库》http://blog.itpub.net/23135684/viewspace-1189880/
《TimesTen学习(三)远程连接TimesTen数据库》http://blog.itpub.net/23135684/viewspace-1190342/
这篇文章将重点讨论一下Data Manager守护进程相关的内容。

   首先我们要明确Data Manager Daemon守护进程是在TimesTen服务端安装过程中就会创建的进程,通过ttDaemonAdmin -start|-stop启动和停止(参考安装篇)。

1.Data Manager Daemon的功能。

Data Manager Daemon包含以下的功能:
1).管理共享内存访问。
2).协助进程恢复。
3).管理数据库的统计信息,例如,哪些数据库在使用,哪些应用进程连接到了哪些数据库。
4).管理内存策略。
5).开始复制进程、TimesTen服务器和cache agent。

注意:应用程序是连接到TimesTen数据库,而不是连接到Data Manager Daemon。

2.自动启动Data Manager Daemon。

    如果想TimesTen实例在每次服务器重启的时候自动启动,那么以root用户运行setuproot脚本,setuproot脚本被存放在<install_dir>/bin目录下:
[root@ttdb ~]# cd /home/timesten/TimesTen/tt1122/bin
[root@ttdb bin]# ./setuproot -install
Would you like to install the TimesTen daemon startup scripts into /etc/init.d? [ yes ] yes
Copying /home/timesten/TimesTen/tt1122/startup/tt_tt1122 to /etc/init.d

Successfully installed the following scripts :
/etc/init.d/tt_tt1122
/etc/rc.d/rc0.d/K45tt_tt1122
/etc/rc.d/rc1.d/K45tt_tt1122
/etc/rc.d/rc2.d/S90tt_tt1122
/etc/rc.d/rc3.d/S90tt_tt1122
/etc/rc.d/rc5.d/S90tt_tt1122
/etc/rc.d/rc6.d/K45tt_tt1122

所有Unix平台,Data Manager Daemon的启动脚本都被放置在/etc/init.d目录下。

同样可以通过setuproot对自动启动进行卸载,例如:
[root@ttdb bin]# ./setuproot -help
setuproot [-install] [-uninstall] [-help] [-verbose]
        -install      Install TimesTen daemon startup scripts
        -uninstall    Un-install TimesTen daemon startup scripts
        -help         Display this help message
        -verbose      Display extra installation/uninstallation information

3.关闭TimesTen。

    TimesTen由被加载到共享内存的数据库、用户连接、replication和cache agents组成。关闭TimesTen将完成以下的工作:
1).友好的断开用户连接。
2).关闭所有replication和cache agent。
3).如果数据库内存策略是manual,将从共享内存卸载数据库。
4).停止TimesTen Daemon。

4.管理TimesTen Daemon选项。

    ttendaemon.options文件包含了TimesTen Daemon选项。安装期间,安装程序根据在安装提示输入设置一些选项值,保存在该文件中。
在Windows平台,ttendaemon.options文件位于daemon home目录下:
<install_dir>\srv\info

在Unix平台,ttendaemon.options文件位于daemon home目录下:
<install_dir>/info

ttendaemon.options文件控制着以下特性:

1).Daemon监听的网络端口。
2).TimesTen实例中subdaemon的最小值和最大值。
3).是否启动TimesTen服务器。
4).是否使用共享内存段作为客户端/服务器的内部进程通信方式。
5).系统预生成的服务器进程数。
6).用户日志、支持日志的位置及大小。
7).向后兼容性。
8).TimesTen实例的最大用户数。
9).数据通过NFS进行访问,仅针对Linux环境。
10).Oracle Database TNS_ADMIN的值,该文件的TNS_ADMIN选项值不能被修改。
11).致命错误之后调整默认的数据库恢复。

ttmodinstall工具用于改变ttendaemon.options文件的大多数公共选项,如果不能使用该工具修改的特殊选项,必须手动修改ttendaemon.options文件,在手动修改前需要先停止TimesTen Daemon。

下面是TimesTen安装后的ttendaemon.options文件内容:
[timesten@ttdb info]$ pwd
/opt/TimesTen/tt1122/info
[timesten@ttdb info]$ cat ttendaemon.options 
# Commented values are default values
#-supportlog /opt/TimesTen/tt1122/info/ttmesg.log
#-maxsupportlogfiles 10
#-maxsupportlogsize 10485760
#-userlog /opt/TimesTen/tt1122/info/tterrors.log
#-maxuserlogfiles 10
#-maxuserlogsize 0x100000
#
-verbose
-tns_admin /opt/TimesTen/info
-server 53397

-server指定TimesTen Server监听端口(这个是连接TimesTen数据库的端口,和Daemon监听端口要区分开)。

-serverpool number指定预产生的TimesTen服务器进程数,这样可以提高客户端的连接请求的性能,如果没有设置该值,那么没有进程是预产生的,进程的数量除了受到TimesTen配置影响外,还受到操作系统的限制。

-maxConnsPerServer NumberOfChildServerProcesses 该参数设置单一服务器进程能够处理的最大客户端数,如果值大于1,那么子服务器进程运行在多线程模式,所以单一的服务器进程能为数据库的多个客户端连接服务,该值的范围在1到2047,默认值是1。如果该参数大于1,注意设置ServerStackSize参数值,参见第10点的内容。

-serversPerDSN NumberOfChildServerProcesses 在服务器可以有多个服务器进程服务多个输入的连接,ServersPerDSN属性指定初始化的服务器进程数,每个新进入的连接产生一个新的服务器进程,直到到达ServersPerDSN。当达到ServersPerDSN值,存在的服务器进程处理多个连接,直到到达MaxConnsPerServer参数指定的值。该参数值的范围是1到2047,默认值为1。

    maxConnsPerServer和serversPerDSN两个参数是相关的,这两个属性不是用来限制通过DSN的客户端连接数,它们控制怎样在服务器进程之间分发连接。例如,如果MaxConnsPerServer设置为2,ServersPerDSN设置为5,那么会发生以下的情况:
1).到达数据库的第一个连接会由第一个服务器进程来处理,到达服务器的连接2~连接5会由初始化的服务器进程2~服务器进程5来处理,每个进程对应一个连接。
2).到达服务器的连接6,ServersPerDSN到达了限制值,MaxConnsPerServer没有到达限制值,连接6会由第一个服务器进程处理,到达的连接7~连接10由服务器进程2~5处理。
3).到达数据库的第11个连接,由于ServersPerDSN和MaxConnsPerServer两个参数都到达限制值,所以新产生的服务器进程6开始处理这个连接。

5.设定Daemon监听地址。

   默认情况下,Daemon监听服务器所有的IP地址,如果需要固定监听某一个或多个IP,那么可以在ttendaemon.options配置文件中加入如下的配置:
-listenaddr address
   监听多个IP地址需要配置多条-listenaddr记录,最多可以配置监听4个IP地址。

6.TimesTen日志。

   TimesTen日志分为两类:用户错误日志和支持日志。用户错误日志类似Oracle Database中的告警日志;支持日志除了包含用户错误信息外,还包括Oracle技术支持需要的日志信息。

下面ttendaemon.options中的参数用于控制用户错误日志、支持日志的位置和大小,以及系统中存储的文件数。

-supportlog path -f path 指定支持日志文件的位置,默认地址是<daemon_home>/ttmesg.log。

-maxsupportlogfiles num 一旦日志文件到达了指定大小,TimesTen主Daemon自动循环日志文件,这个选项指定支持日志文件保留的个数,默认是10个。

-maxsupportlogsize nBytes 指定支持日志文件的最大值,默认是100MB。

-userlog logfile logfile:用户指定使用的日志文件位置以及名称,默认文件是<daemon_home>/tterrors.log。
也可以是:
-userlog [syslog] syslog:将错误消息发送到对应的操作系统日志文件中。

-maxuserlogfiles num 这个参数和maxsupportlogfiles参数的含义相同,只是该参数用于限定日志文件。

-maxuserlogsize nBytes 指定用户日志文件最大值,默认是10M。

-showdate 该参数只在UNIX平台适用,表示日期应该出现在所有消息的前面。

ttDaemonLog工具可以用来查看日志相关信息。

设置-noserverlog选项可以禁止产生日志。

7.修改subdaemon的个数。

TimesTen使用subdaemon执行以下的任务:
1).管理数据库。
2).刷新事务日志缓存到磁盘。
3).执行定期的检查点。
4).实施各种表的老化。
5).发现并处理死锁。
6).回滚直接方式下应用异常终止的事务。
7).执行数据库必要的后台过程。

    TimesTen主Daemon根据需要动态的生成subdaemon,可以手动指定daemon可能产生subdaemon的范围,指定一个最小值和最大值,默认最小值是4,最大值是50。可以通过在ttendaemon.options文件中配置-minsubs和-maxsubs两个参数来设置新的值。

8.允许数据库访问NFS文件系统。

    默认情况下,TimesTen系统不能访问NFS文件系统中的数据。在Linux x86 64bit的系统中,可以将checkpoint和事务日志文件放在NFS文件系统中。
    如果要启动访问NFS文件系统,在ttendaemon.options文件中加入如下的参数:
-allowNetworkFiles

9.启动Linux大页支持。

    启动Linux大页支持TimesTen,在ttendaemon.options文件中加入以下内容:
-linuxLargePageAlignment Size_in_MB
Size_in_MB是在/proc/meminfo中Hugepagesize的值,单位是MB。

10.配置子服务器进程线程堆栈大小。

设置每个客户端连接的子服务器进程线程堆栈的大小,在ttendaemon.options文件中加入以下的内容:
-ServerStackSize ThreadStackSize
    ThreadStackSize单位是KB,在32bit系统默认值是128KB,在64bit系统默认值是256KB,如果每个子服务器进程最大客户端连接数是1,ThreadStackSize设置将被忽略,因为单一的客户端连接是通过子服务器进程的主线程进行服务的。只有当maxConnsPerServer参数大于1才需要设置该参数。

11.客户端通过IPC直接连接到服务器共享内存段

    默认情况下,在应用链接的TimesTen驱动和TimesTen服务器之间通过TCP/IP进行通信。

如果客户端应用和TimesTen服务器在相同的机器上,针对IPC(内部进程通信)可以直接连接到服务器共享内存段。

例如,这个特性对在32bit客户端应用与64bit数据库进行通信的时候在性能方面是有利的。

在ttedaemon.options文件中加入-serverShmIpc参数告诉TimesTen服务器尝试客户端通过IPC的方式直接连接到服务器的共享内存段。

12.管理共享内存段大小

    启用了通过IPC直接连接到共享内存段才需要设置该参数。
    在ttendaemon.options文件中加入-serverShmSize size告诉TimesTen Server创建一个指定大小的共享内存段(MB),如果这个参数错误,TimesTen服务器创建一个64MB大小的共享内存段。

一个合适的共享内存段大小依赖于:
1).预期并发连接到属于同一个TimesTen服务器实例的所有数据库的数目。
2).在每个子连接中并发分配的语句数目。
3).一个查询传递的数据量。

指导原则:
1).最大允许1Gb。
2).TimesTen需要1MB内存内部使用。
3).每个连接需要固定的16KB大小的块。
4).每个语句占用的空间会随着查询传递的数据量来增大或减小,TimesTen通过增加双倍或减半的算法来增大或减小语句缓存大小。

    例如,如果用户应用预期最多有100个启用共享内存的客户端/服务器连接,如果每个连接预期最大有50个语句,最大返回128KB的数据,使用下面的公式配置serverShmSize值:
serverShmSize = 1 MB + (100 * 16) KB + (100 * 50 * 128) KB
              = 1 MB + 2 MB + 625 MB = 628 MB

如果共享内存段空间不够,TimesTen将拒绝通过共享内存段的方式连接到TimesTen数据库。

--end--

时间: 2024-10-25 21:29:47

TimesTen学习(四)Data Manager守护进程的相关文章

浅谈Service Manager成为Android进程间通信(IPC)机制Binder守护进程之路_Android

   上一篇文章Android进程间通信(IPC)机制Binder简要介绍和学习计划简要介绍了Android系统进程间通信机制Binder的总体架构,它由Client.Server.Service Manager和驱动程序Binder四个组件构成.本文着重介绍组件Service Manager,它是整个Binder机制的守护进程,用来管理开发者创建的各种Server,并且向Client提供查询Server远程接口的功能.         既然Service Manager组件是用来管理Serve

TimesTen学习(三)远程连接TimesTen数据库

    <TimesTen学习(一)安装篇>:http://blog.itpub.net/23135684/viewspace-717741/    <TimesTen学习(二)连接创建第一个数据库>:http://blog.itpub.net/23135684/viewspace-1189880/     这篇文章主要讨论在Windows平台通过ODBC的方式远程连接到Linux平台的TimesTen数据库.    首先需要在要Windows平台安装TimesTen客户端,选择安

Linux进程学习(孤儿进程和守护进程)

孤儿进程和守护进程 通过前面的学习我们了解了如何通过fork()函数和vfork()函数来创建一个进程.现在 我们继续深入来学习两个特殊的进程:孤儿进程和守护进程 一.孤儿进程 1.什么是 孤儿进程如果一个子进程的父进程先于子进程 结束, 子进程就成为一个孤儿进程,它由 init 进程收养,成为 init 进程的子进程.2.那么如何让一个进程变为一个孤儿进程呢?我们可以先创建一个进程,然后杀死其父进程,则其就变成了孤儿进程.pid =  fork();if(pid > 0) {         

TimesTen学习(一)安装篇

TimesTen学习(一)安装篇 一.Linux平台安装准备工作. 1.大页设置 1).修改HugePage配置值: echo 32 > /proc/sys/vm/nr_hugepages 2).查看HugePage值: [root@ttdb ~]# cat /proc/meminfo | grep Huge HugePages_Total:    28 HugePages_Free:     28 HugePages_Rsvd:      0 Hugepagesize:     2048 kB

python:守护进程deamon

一.守护进程的基本编码规范     详细参见:<AdvancedProgrammingin The Unix Environment>Section 13.3 Page 583      本小节将介绍一些守护进程的基本编码规范,这些规范将阻止守护进程与当前环境产生一些不必要的交互.本节将通过一个函数daemonize实现这些规范.     1. 首先要做的被称为 umask,这一步骤会将文件创建掩码重置为0.这一步的原因是守护进程继承(inherited)得到的文件掩码有可能会拒绝某些特定的文

android守护进程

Service组件在android开发中经常遇到,其经常作为后台服务,需要始终保持运行,负责处理一些必要(见不得人)的任务.而一些安全软件,如360等,会有结束进程的功能,如果不做Service的保持,就会被其杀掉. 在早些时候,我们可以通过在 1. service中重写onStartCommand方法,这个方法有三个返回值, START_STICKY是service被kill掉后自动 public int onStartCommand(Intent intent, int flags, int

《Spark与Hadoop大数据分析》——3.1 启动 Spark 守护进程

3.1 启动 Spark 守护进程 如果你计划使用 Standalone 的集群管理器,则需要启动 Spark 的主机(master)和工作机(worker)的守护进程(daemon),它们是 Spark 架构的核心组件.守护进程的启动/停止在不同的发行版里略有差异.Hadoop 发行版(如 Cloudera.Hortonworks 和 MapR)会把 Spark 作为服务,并把 YARN 作为默认的资源管理器.这意味着在默认情况下所有 Spark 应用程序都会在 YARN 框架上运行.但是,要

Android通过JNI实现守护进程_Android

开发一个需要常住后台的App其实是一件非常头疼的事情,不仅要应对国内各大厂商的ROM,还需要应对各类的安全管家...虽然不断的研究各式各样的方法,但是效果并不好,比如任务管理器把App干掉,服务就起不来了... 网上搜寻一番后,主要的方法有以下几种方法,但都是治标不治本: 1.提高Service的优先级:这个,也只能说在系统内存不足需要回收资源的时候,优先级较高,不容易被回收,然并卵... 2.提高Service所在进程的优先级:效果不是很明显 3.在onDestroy方法里重启service:

Android通过JNI实现守护进程

开发一个需要常住后台的App其实是一件非常头疼的事情,不仅要应对国内各大厂商的ROM,还需要应对各类的安全管家...虽然不断的研究各式各样的方法,但是效果并不好,比如任务管理器把App干掉,服务就起不来了... 网上搜寻一番后,主要的方法有以下几种方法,但都是治标不治本: 1.提高Service的优先级:这个,也只能说在系统内存不足需要回收资源的时候,优先级较高,不容易被回收,然并卵... 2.提高Service所在进程的优先级:效果不是很明显 3.在onDestroy方法里重启service: