`
wsql
  • 浏览: 11776192 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

Sybase对多个临时数据库tempdb的支持

 
阅读更多
发现Sybase有个非常有趣的特性,就是支持多个tempdb。虽然一向对Sybase没什么好感,但对这个特性还是十分欣赏。查看了一点资料,觉得Sybase自身的一个白皮书比较权威,试着做个翻译。

概述

当数据库应用程序需要存储中间结果或者数据时,就需要临时空间。在Sybase的旗舰产品 ASE中,这个临时空间将由一个特殊的系统数据库tempdb来提供。而且,SQL语句对数据进行处理时,也会用到一些临时表。所有这些都将导致 tempdb数据库的沉重负担。过去,大量应用对tempdb数据库中数据和日志的争用导致性能下降。

对多个临时数据库tempdb的支持在Sybase ASE 12.5.0.3中被引入,在12.5.1中得到完善。该特性使用户可以创建多个临时数据库,并且能够给应用程序指定一个或多个临时数据库作为该应用程序 的专用库。有了这个革命性的特性,系统管理员们现在就能对tempdb这项资源有了更强的控制。该特性能够更好地实现资源分配,增加可用性,提升系统性 能。

特性简介

多tempdb支持特性使得用户可以创建多个临时库,这些库又可以在后续的应用中创建临时对 象。借助一个系统存储过程,DBA可以把任何用户及应用程序绑定到指定的临时库或者临时库组中。默认组是由系统创建的,系统tempdb就属于该组。 DBA可以将其它临时库加入该组。

登录/连接建立时,根据存在的绑定,会话就被指定到一个特定的临时库中。如果一个登录账号被 绑定到一个特定的临时库,并且该临时库可用,那么建立的会话就指向该库;如果登录账号没有绑定,或者绑定的是一个临时库组,那么系统会根据Round- Robin算法(轮询算法)从默认组中选定一个临时库,使会话指向它。

指定给会话的临时库在会话终止之前一直有效,并且不会发生改变。该会话所创建的所有临时对象 也存在于该临时库中。该会话中调用存储过程所创建或访问的临时表也存在于该临时库中。当会话结束或者服务器停止服务时,所有这些对象都会自动清除。当然, 临时表也也可以在会话过程中显式清除。

用户创建的临时库跟系统tempdb非常相似,它们都是被用来创建临时对象,而且,它们中的数据或对象在被清除后是不可被恢复的。跟系统tempdb相比,用户创建的临时库是可以被DBA删除的。

临时库是一种系统资源

在Sybase ASE 12.5.0.3推出之前,对于将临时库中的空间分配给各个应用程序这样的问题,DBA毫无办法。系统tempdb是被所有应用程序共用的。在此情形下, 要确定能满足各个应用程序需求的临时库大小很难办到。一个对资源存在大量需求的应用程序可能就会占光tempdb的全部空间,从而导致一些关键应用失败, 应为没有可用的tempdb空间了。在ASE 12.5.0.3中,用户可以使用以下的语句创建新的临时库:

Create temporary database tempdb_1 on tempdb dev = 50

该语句将创建一个名为tempdb_1的临时库。该库可以被加入默认临时库组。ASE 12.5.0.3的用户手册“新特性”一节中对于该项新特性有更多的细节。一般来说,在创建用户数据库时将日志和数据存放在不同的设备上总是有益的。但在 创建用户临时数据库时,这样做却没有必要,因为在写日志时“写”命令被进行了特殊处理,细节将在之后的部分详述。

要将用户创建的临时库加入默认的临时库组,需要使用系统存储过程sp_tempdb:

Sp_tempdb ‘add’, ‘tempdb_1’, ‘default’

Tempdb_1现在就成为了默认组的一个成员。所有属于默认组的临时库可以通过如下的语句查看:

Sp_tempdb ‘show’

当用户建立连接时,ASE数据库引擎就会根据Round-Robin算法从默认组中选出一个 临时库,并指派给该连接。举例来说,如果默认组中只有两个临时库,所有的应用程序都被绑定到了默认组上,假定有10个用户连接,那么5个将被指定到 tempdb,余下的将被指指定到tempdb_1。这样就实现了默认组中用户的负载均衡。

提请注意,应用程序不是必须应用该特性。应用程序创建的所有带“#”前缀的临时表都是创建在应用程序连接时就指定的临时库中的。

临时库也可以随时脱离所加入的默认组。你可以在负载高峰期配置多个临时库来满足需求,并在高峰期后删除它们。所有这些操作都不必让ASE停止服务,也不需要将数据库设为单用户模式。

为不同应用分配资源

ASE 12.5.1对该特性进行了完善,任何应用或登录连接都可以被绑定到指定的临时库中。举例来说,假定有两个应用程序在运行,一个是处理高效OLTP事务 的,另一个是个后台批处理。OLTP应用就可以绑定到一个创建在RAM盘上的临时库上,而那个后台批处理应用就可以绑定到一个创建在常规磁盘上的较大临时 库上,因为它需要较大的临时空间。你可以这样做。

假定OLTP应用程序的名字是“oltp_app”,我们可以用:

Create temporary database oltp_tempdb on ramdev = 50

go

sp_tempdb ‘bind’, ‘AP’, ‘oltp_app’, ‘DB’, ‘oltp_tempdb’

go

假定批处理应用程序的名字是“batch_app”,我们可以用:

Create temporary database batch_tempdb on dbdev = 500

go

sp_tempdb ‘bind’, ‘AP’, ‘batch_app’, ‘DB’, ‘batch_tempdb’

go

这样,需要大量临时空间的批处理应用就不会与需要相对较小临时空间但需要快速响应的OLTP应用产生冲突。

绑定可以被随时解除是该特性的一个重要体现。而且,用户创建的临时库在较少使用时可以删除。举例来说,以上的批处理应用运行结束以后,该临时库就可以删除,从而释放磁盘空间。如下命令实现这一目的:

Sp_tempdb ‘unbind’, ‘AP’, ‘batch_app’

go

drop database batch_tempdb

go

因为临时库可以被随时创建和删除,DBA就可以轻易实现对临时库资源的高效管理。

绑定登录账号到特定临时库是该特性的另一个重要方面。这对于sa账号尤其重要,该特性能够帮助DBA在不跟其它应用程序争临时库资源的前提下高效地执行一些关键的管理任务。需要用到的命令如下:

Create temporary database sa_tempdb on sadbdev = 100

go

sp_tempdb ‘bind’, ‘LG’, ‘sa’, ‘DB’, ‘sa_tempdb’

go

在ASE 12.5.0.3发布以前,如果tempdb空间用完,sa也不能执行一些需要用到tempdb空间的存储过程。有了ASE 12.5.0.3,DBA就可以为sa保留一个专用的临时库。这就保证了sa可以可靠地进入系统,执行管理任务。

类似地,任何用户登录都可以被分别绑定到指定的临时库上,这样管理起来就有更大的灵活性。值得注意的是,绑定任意的用户登录(不仅仅是sa)是ASE 12.5.1及之后的版本才提供。

服务器结合

现今,IT界的一大趋势是把一个企业范围内的各种应用程序放到一起,在一个服务器上运行。当这些应用程序在同一个ASE服务器上运行时,它们很快就会发生冲突,因为它们共用同一个tempdb。有了多临时库支持,DBA就能将每个应用程序绑定到合适的临时库。

增强的可用性

可用性是企业应用的一项关键指标,Sybase在这方面给予了最高程度的重视。有了多临时库 支持,在单个临时库不可用时DBA们可以不用那么紧张了。在ASE 12.5.0.3发布之前,一旦tempdb崩溃,服务器就不得不重启。但是现在,有了多个临时库,DBA们就可以从默认组中删除崩溃的临时库,其它临时 库会分担之后的负载。这项技术显著降低了系统的宕机时间。

性能提升

多临时库支持特性对系统性能的提升表现在两个主要的方面,更大的事务处理能力(吞吐量)和更短的响应时间。

减少资源争用

有了多个临时库,两个重要的资源争用会降低:系统目录争用和日志争用。

在ASE 12.5.0.3之前,每在tempdb中创建或删除一个对象,就要往/从tempdb的系统目录中插入或删除一行纪录。这是资源争用的一个方面。有了多 个临时库,这种争用将显著降低。一项内部测试表明,在只有一个tempdb时,随着客户增加,对系统目录的争用急剧增长;增加临时库能显著降低对系统目录 的争用。

类似,为tempdb事务分配多个日志设备而不是仅分配一个也能极大减少日志纪录的瓶颈。其 结果就是,多个临时库增大了系统的吞吐量。在我们的测试中,使用两个临时库比一个临时库,系统吞吐量增加了至少30%。我们注意到在只有一个tempdb 时,如果系统中的用户数超过某个数,系统的吞吐量就开始下降。在增加一个临时库以后,对系统目录和日志的争用显著降低,直接导致系统吞吐量的增加。

Tempdb的写优化

临时库是不可恢复的。(在启动时,ASE会删除临时库并重建。)ASE利用了这一特征来避免从缓存中写入数据或日志到磁盘,而这正是一般数据库必须做的。

举例来说,如果一个用户做了如下的操作:

Select * into tempdb..temp_table from foo

那么ASE就会在事务结束时清空新建临时表所缓存的数据。这是因为select into是一个不纪录日志的操作,为了保证可恢复性,我们就需要保证数据被写入磁盘。对一般数据库来说,这是对的;但是由于临时库是不可恢复的,ASE 12.5.0.3就会避免在操作结束时把缓存中的数据写入磁盘。

对一些DML操作比如insert/update/delete ASE并不强制在提交操作时写日志。举例来说,如果用户进行了以下操作:

Insert into tempdb..temp_table select * from foo

那么ASE就不会强制在提交操作时写日志。这就意味着更少的上下文变换,日志纪录和数据设备的负担更轻,最终增加系统吞吐量。在我们的内部测试中,我们看到过高达50%的写操作减少。

结论

为了在关键任务环境中给客户提升价值,Sybase提供了很多特性,ASE 12.5.0.3提供的多临时库支持功能强大,保证了更大的吞吐量。ASE 12.5.1所做的完善为配置管理这一特性提供了更好的灵活性。这份白皮书向DBA们展示了怎样在不改变应用的情形下,通过配置系统来更好地利用资源。 Sybase相信跟花钱购买这一特性比较起来,特性本身所带来的企业成本降低是显著的。

分享到:
评论

相关推荐

    数据库tempdb的日志已满

    数据库tempdb的日志已满数据库tempdb的日志已满

    SqlServer数据库提示 “tempdb” 的日志已满 问题解决方案

    数据库 'tempdb' 的日志已满。请备份该数据库的事务日志以释放一些日志空间。 网上找了下解决方案,大体是扩大临时库的日志文件的大小解决的 解决过程: 查看了下数据库的属性,是自动增长,不指定文件大小上限。 ...

    如何恢复tempdb数据库.pdf

    如何恢复tempdb数据库.pdf

    数据库编程期末答疑,卷子讲解,SQL server相关操作讲解,如有侵权请联系删除

    如下是一个简化的员工考勤应用E-R图,请在SQL Server中创建名为YQKG的数据库,包括两个数据文件,一个日志文件,文件名按SQL Server对象命名规范定义,数据文件按10%的比例增长,数据库定义完成后输入如下样本数据。...

    关于SqlServer2000数据库中tempdb.mdf的迁移

    关于SqlServer2000数据库中tempdb.mdf的迁移

    恢复tempdb到安装初始化状态

    恢复tempdb数据库的方法要分两个部分。首先将tempdb重设到默认大小;其次确认和改变tempdb数据库到新的设备上

    tempdb:Redis支持的临时键值存储节点

    TempDB是Redis支持的Node临时键值存储。 这对于存储临时数据(例如登录代码,身份验证令牌和临时密码)很有用。 安装 npm install tempdb 运行Redis服务器 查看以为您的平台安装,或使用众多云提供商之一。 根据您...

    更改SQL Server 2005数据库中tempdb位置的方法

    本文我们主要介绍了SQL Server 2005数据库中更改tempdb系统数据库的位置的方法,希望能够对您有所帮助。

    SQL数据库试题及答案

    C: 一个数据库可以包含多个数据库文件,但只能包含一个事务日志文件。 D: 一个数据库可以包含多个事务日志文件,但只能包含一个数据库文件。 序号:532 难度:2 考查点:SQL Server 数据库的管理 2. (分值:1.0 分...

    sybase入门教程

    70年代,随着大型共享数据库应用的普及,美国SYBASE公司基于当时的关系代数理论所提出的数据库关系模型,开发了Sybase数据库系统...Sybase中的系统数据库基本包括有:master、model、sysprocs、tempdb,其它为用户库。

    sybase日志问题知识普及

    SYBASE SQL Server 的每一个数据库,无论是系统数据库(master,model, sybsystemprocs, tempdb),还是用户数据库,都有自己的transaction log,每个库都有syslogs表。Log记录用户对数据库修改的操作,所以如果不用...

    Sybase ASE快速参考手册

    3.10.2 对小量数据的多次并发访问 62 3.10.3 堆栈表和热点 64 3.10.4 死锁 66 3.10.5 何时使用不同类型的加锁方法 69 3.10.6 结论 70 3.11 DBCC 70 3.12 Sybase ASE的字符集 74 3.12.1 概念 74 3.12.2 配置 79 ...

    在数据库 'czbt2' 中检测到一个可能的数据库一致性问题

    如果DBCC checkdb('数据库名',REPAIR_A LLOW_DATA_LOSS)语句执行一次不行,可以在多执行几次直到没有再提示数据库有错误为止。 DBCC checkdb('数据库名',REPAIR_ALLOW_DATA_LOSS) --设置为多用户模式 sp_dboption '...

    SqlServer系列:数据库组成及系统数据库.pdf

    2.4 tempdb数据库 tempdb是SQL Server中的⼀个临时数据库,⽤于存放临时对象或中间结果,只要创建临时表,则临时表会创建在tempdb数据库中。 SQL Server关闭后,该数据库中的内容被清空,每次重新启动服务器之后,...

    sql数据库日志已满的解决办法

    sql数据库日志已满的解决办法

    Sybase ASE快速参考手册.pdf

    3.10.2 对小量数据的多次并发访问 70 3.10.3 堆栈表和热点 73 3.10.4 死锁 74 3.10.5 何时使用不同类型的加锁方法 77 3.10.6 结论 79 3.11 DBCC 79 3.12 Sybase ASE的字符集 84 3.12.1 概念 84 3.12.2 配置 ...

    数据库课程设计 选修课管理程序设计

    很好 很强大 欢迎指导 很完善的数据库课程设计 选修课管理程序设计,关键词:SQL语言;IBM DB2;数据库设计;学生选课管理系统

    tempdb太大引起磁盘容量不足的解决方案.docx

    tempdb太大引起磁盘容量不足的解决方案

    [详细完整版]数据库基础.pdf

    5、 建立数据库 服务管理器----提供服务 查询分析器----代码窗口 企业管理器----可视化操作 在企业管理中可以看到六个默认数据库其中四个是系统数据库,两个 是范例数据库 系统数据库:master,model,msdb,tempdb ...

Global site tag (gtag.js) - Google Analytics