Chinaunix首页 | 论坛 | 博客
  • 博客访问: 814519
  • 博文数量: 328
  • 博客积分: 7000
  • 博客等级: 少将
  • 技术积分: 3810
  • 用 户 组: 普通用户
  • 注册时间: 2006-12-15 22:00
文章分类

全部博文(328)

文章存档

2009年(2)

2008年(84)

2007年(207)

2006年(35)

我的朋友

分类: Sybase

2006-12-24 22:14:24

 
I/O的速度是影响数据库性能的一个瓶颈。在每一个数据库应用中,各个表的增长速率和存取频率往往是不一样的。通常,频繁使用的表和索引与其他大量的数据库对象一起存放在缺省的一个物理设备上,导致I/O性能较低。所以如果能把数据库中使用频率最高的表和索引放在独立的磁盘设备上,最好使用单独的磁盘控制器,就能够通过控制数据的物理存放来提高I/O性能。为了达到这一目的,SQL Server为系统管理员提供了段(segment)的机制,使得数据库对象与特定的SQL Server设备联系起来。具体来说,段是指某个特定SQL Server数据库可用的数据库设备的指定子集,从概念上讲,段是指向一个或多个数据库设备的标签。通过我们的实验表明,合理地使用段,能够有效地提高数据库的性能。下面叙述具体的操作方法。

  1.创建两个新的用户设备

  用disk init将SQL Server数据库设备名映射到物理设备,由于我们的数据库已经有两个数据库设备分别存储数据和索引,所以我们新增两个大小为200M的数据库设备分别存放关键表和关键索引。

  1> use master

  2> go

  1> disk init name=“fastdev1" physname= “/dev/rz4h"

  vdevno=6 size=102400

  2> go

  1> disk init name=“fastdev2" physname= “/dev/rz9h"

  vdevno=7 size=102400

  2>go

  2.将新数据库设备增加到应用数据库nnzxdb中

  当使用alter database把新设备fastdev1、 fastdev2分配给数据库nnzxdb时,default和system段自动被映射到新空间,所有使用 create table或create index语句的缺省形式都可以存储使用。

  1> alter database nnzxdb on fastdev1=200, fastdev2=200

  2> go

  3.将段名映射到数据库设备名,以创建新段

  为了把表和索引放在新建的设备上,需要在新设备上创建新段。

  1> use nnzxdb

  2> go

  1>sp_addsegment fastseg1,nnzxdb,fastdev1

  2>go

  1> sp_addsegment fastseg2,nnzxdb,fastdev2

  2> go

  4.改变段的范围,删除default和system段的范围以使它们不再指向新设备

  为了将新设备分配给特定的表private,并保证其他用户对象不存储在该设备上,使用sp_dropsegment缩小default和system段的范围。

  1> sp_dropsegment “default",nnzxdb,fastdev1

  2> go

  1> sp_dropsegment system,nnzxdb,fastdev1

  2> go

  1> sp_dropsegment “default",nnzxdb,fastdev2

  2> go

  1> sp_dropsegment system,nnzxdb,fastdev2

  2> go

  5.把关键表private及其索引移到新段上

  利用系统过程sp_placeobject,可以在新段上放置现有对象,但并不能从它分配的段上删除对象,它可导致该对象今后的全部磁盘分配发生在新指定的段上。也就是说,sp_placeobject只影响未来空间分配,并没有把对象从一个数据库对象移动到另一个设备上,为了完全移动一个表到新设备上,首先要删除它的聚簇索引(如果有),然后在新段上创建或重建聚簇索引。为了将表private移动到新段上,我们先删除它的聚簇索引,再在新段上给它建立一个新的聚簇索引,然后在另一个段上建立原有的非聚簇索引。这样,达到了将表、索引和日志分别放在三个物理设备上的目的。

  1> sp_placeobject fastseg1,private

  2> go

  1> drop index private.pri_idx

  2> go

  1> create clustered index pri_idx on private(unit_code) on fastseg1

  2> go

  1> create unique nonclusted index pri_index on private(id_ number) on fastseg2

  2> go

  以上是将一个表和索引从原有设备移到新设备的过程,在实验中我们把应用数据库中使用最频繁的3个表及其索引都移到了新设备上。从我们的实验效果来看,将关键表及其索引放置到单独的段以后,系统性能提高的效果是很明显的,所有相关的存取速度都大大提高了,有些原来需要5分钟才能提交的事务,现在20多秒就能够完成。

阅读(822) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~